All of lore.kernel.org
 help / color / mirror / Atom feed
From: Denis Kenzior <denkenz@gmail.com>
To: ofono@ofono.org
Subject: Re: [PATCH 3/5] cdma-atmodem: Add CDMA MO Call Support
Date: Thu, 09 Dec 2010 02:43:11 -0600	[thread overview]
Message-ID: <4D00969F.9070303@gmail.com> (raw)
In-Reply-To: <1291332685-18740-4-git-send-email-dara.spieker-doyle@nokia.com>

[-- Attachment #1: Type: text/plain, Size: 14210 bytes --]

Hi Dara,

On 12/02/2010 05:31 PM, Dara Spieker-Doyle wrote:
> ---
>  Makefile.am                      |    7 ++
>  configure.ac                     |    5 +
>  drivers/cdma-atmodem/atmodem.c   |   47 +++++++++
>  drivers/cdma-atmodem/atmodem.h   |   26 +++++

Lets call this cdmamodem/cdmamodem.[ch]

>  drivers/cdma-atmodem/atutil.c    |   45 +++++++++
>  drivers/cdma-atmodem/atutil.h    |   65 +++++++++++++

Are these verbatim copies of atmodem/atutil.[ch]?  If so, then there's
no reason why you can't re-use those.  No need to copy them.

>  drivers/cdma-atmodem/voicecall.c |  195 ++++++++++++++++++++++++++++++++++++++
>  7 files changed, 390 insertions(+), 0 deletions(-)
>  create mode 100644 drivers/cdma-atmodem/atmodem.c
>  create mode 100644 drivers/cdma-atmodem/atmodem.h
>  create mode 100644 drivers/cdma-atmodem/atutil.c
>  create mode 100644 drivers/cdma-atmodem/atutil.h
>  create mode 100644 drivers/cdma-atmodem/voicecall.c
> 
> diff --git a/Makefile.am b/Makefile.am
> index f111f96..9aac08b 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -242,6 +242,13 @@ conf_DATA += plugins/phonesim.conf
>  endif
>  endif
>  
> +if CDMA_ATMODEM
> +builtin_modules += cdma_atmodem
> +builtin_sources += drivers/cdma-atmodem/atmodem.c \
> +			drivers/cdma-atmodem/atmodem.h \
> +			drivers/cdma-atmodem/voicecall.c
> +endif
> +
>  builtin_modules += g1
>  builtin_sources += plugins/g1.c
>  
> diff --git a/configure.ac b/configure.ac
> index 0c1986a..090f3ee 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -158,6 +158,11 @@ AC_ARG_ENABLE(atmodem, AC_HELP_STRING([--disable-atmodem],
>  					[enable_atmodem=${enableval}])
>  AM_CONDITIONAL(ATMODEM, test "${enable_atmodem}" != "no")
>  
> +AC_ARG_ENABLE(cdmaatmodem, AC_HELP_STRING([--disable-cdma-atmodem],
> +				[disable CDMA AT modem support]),
> +					[enable_cdma_atmodem=${enableval}])
> +AM_CONDITIONAL(CDMA_ATMODEM, test "${enable_cdma_atmodem}" != "no")
> +
>  AC_ARG_ENABLE(phonesim, AC_HELP_STRING([--disable-phonesim],
>  				[disable Phone simulator support]),
>  					[enable_phonesim=${enableval}])
> diff --git a/drivers/cdma-atmodem/atmodem.c b/drivers/cdma-atmodem/atmodem.c
> new file mode 100644
> index 0000000..86dd074
> --- /dev/null
> +++ b/drivers/cdma-atmodem/atmodem.c
> @@ -0,0 +1,47 @@
> +/*
> + *
> + *  oFono - Open Source Telephony
> + *
> + *  Copyright (C) 2010 Nokia Corporation. All rights reserved.
> + *
> + *  This program is free software; you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License version 2 as
> + *  published by the Free Software Foundation.
> + *
> + *  This program is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public License
> + *  along with this program; if not, write to the Free Software
> + *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
> + *
> + */
> +
> +#ifdef HAVE_CONFIG_H
> +#include <config.h>
> +#endif
> +
> +#include <glib.h>
> +
> +#define OFONO_API_SUBJECT_TO_CHANGE
> +#include <ofono/plugin.h>
> +#include <ofono/types.h>
> +
> +#include "atmodem.h"
> +
> +static int cdma_atmodem_init(void)
> +{
> +	cdma_at_voicecall_init();
> +
> +	return 0;
> +}
> +
> +static void cdma_atmodem_exit(void)
> +{
> +	cdma_at_voicecall_exit();
> +}
> +
> +OFONO_PLUGIN_DEFINE(cdma_atmodem, "CDMA AT modem driver", VERSION,
> +	OFONO_PLUGIN_PRIORITY_DEFAULT, cdma_atmodem_init, cdma_atmodem_exit)
> diff --git a/drivers/cdma-atmodem/atmodem.h b/drivers/cdma-atmodem/atmodem.h
> new file mode 100644
> index 0000000..32facbc
> --- /dev/null
> +++ b/drivers/cdma-atmodem/atmodem.h
> @@ -0,0 +1,26 @@
> +/*
> + *
> + *  oFono - Open Source Telephony
> + *
> + *  Copyright (C) 2010 Nokia Corporation. All rights reserved.
> + *
> + *  This program is free software; you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License version 2 as
> + *  published by the Free Software Foundation.
> + *
> + *  This program is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public License
> + *  along with this program; if not, write to the Free Software
> + *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
> + *
> + */
> +
> +extern void cdma_at_voicecall_init();
> +extern void cdma_at_voicecall_exit();
> +
> +extern void cdma_at_devinfo_init();
> +extern void cdma_at_devinfo_exit();
> diff --git a/drivers/cdma-atmodem/atutil.c b/drivers/cdma-atmodem/atutil.c
> new file mode 100644
> index 0000000..b58c1ee
> --- /dev/null
> +++ b/drivers/cdma-atmodem/atutil.c
> @@ -0,0 +1,45 @@
> +/*
> + *
> + *  oFono - Open Source Telephony
> + *
> + *  Copyright (C) 2010 Nokia Corporation. All rights reserved.
> + *
> + *  This program is free software; you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License version 2 as
> + *  published by the Free Software Foundation.
> + *
> + *  This program is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public License
> + *  along with this program; if not, write to the Free Software
> + *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
> + *
> + */
> +
> +#ifdef HAVE_CONFIG_H
> +#include <config.h>
> +#endif
> +
> +#include <glib.h>
> +#include <string.h>
> +#include <stdlib.h>
> +
> +#define OFONO_API_SUBJECT_TO_CHANGE
> +#include <ofono/log.h>
> +#include <ofono/types.h>
> +
> +#include "atutil.h"
> +
> +void decode_at_error(struct ofono_error *error, const char *final)
> +{
> +	if (!strcmp(final, "OK")) {
> +		error->type = OFONO_ERROR_TYPE_NO_ERROR;
> +		error->error = 0;
> +	} else {
> +		error->type = OFONO_ERROR_TYPE_FAILURE;
> +		error->error = 0;
> +	}
> +}
> diff --git a/drivers/cdma-atmodem/atutil.h b/drivers/cdma-atmodem/atutil.h
> new file mode 100644
> index 0000000..9a7c5e1
> --- /dev/null
> +++ b/drivers/cdma-atmodem/atutil.h
> @@ -0,0 +1,65 @@
> +/*
> + *
> + *  oFono - Open Source Telephony
> + *
> + *  Copyright (C) 2010 Nokia Corporation. All rights reserved.
> + *
> + *  This program is free software; you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License version 2 as
> + *  published by the Free Software Foundation.
> + *
> + *  This program is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public License
> + *  along with this program; if not, write to the Free Software
> + *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
> + *
> + */
> +
> +#ifndef __AT_UTIL_H
> +#define __AT_UTIL_H
> +
> +void decode_at_error(struct ofono_error *error, const char *final);
> +
> +struct cb_data {
> +	void *cb;
> +	void *data;
> +	void *user;
> +};
> +
> +static inline struct cb_data *cb_data_new(void *cb, void *data)
> +{
> +	struct cb_data *ret;
> +
> +	ret = g_try_new0(struct cb_data, 1);
> +
> +	if (ret == NULL)
> +		return ret;
> +
> +	ret->cb = cb;
> +	ret->data = data;
> +
> +	return ret;
> +}
> +
> +#define CALLBACK_WITH_FAILURE(cb, args...)		\
> +	do {						\
> +		struct ofono_error cb_e;		\
> +		cb_e.type = OFONO_ERROR_TYPE_FAILURE;	\
> +		cb_e.error = 0;				\
> +							\
> +		cb(&cb_e, ##args);			\
> +	} while (0)					\
> +
> +#define CALLBACK_WITH_SUCCESS(f, args...)		\
> +	do {						\
> +		struct ofono_error e;			\
> +		e.type = OFONO_ERROR_TYPE_NO_ERROR;	\
> +		e.error = 0;				\
> +		f(&e, ##args);				\
> +	} while (0)					\
> +
> +#endif /* __AT_UTIL_H */
> diff --git a/drivers/cdma-atmodem/voicecall.c b/drivers/cdma-atmodem/voicecall.c
> new file mode 100644
> index 0000000..efae370
> --- /dev/null
> +++ b/drivers/cdma-atmodem/voicecall.c
> @@ -0,0 +1,195 @@
> +/*
> + *
> + *  oFono - Open Source Telephony
> + *
> + *  Copyright (C) 2010 Nokia Corporation. All rights reserved.
> + *
> + *  This program is free software; you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License version 2 as
> + *  published by the Free Software Foundation.
> + *
> + *  This program is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public License
> + *  along with this program; if not, write to the Free Software
> + *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
> + *
> + */
> +
> +#ifdef HAVE_CONFIG_H
> +#include <config.h>
> +#endif
> +
> +#define _GNU_SOURCE
> +#include <string.h>
> +#include <stdlib.h>
> +#include <stdio.h>
> +#include <errno.h>
> +
> +#include <glib.h>
> +
> +#include <ofono/log.h>
> +#include <ofono/modem.h>
> +#include <ofono/cdma-voicecall.h>
> +
> +#include "gatchat.h"
> +#include "gatresult.h"
> +
> +#include "atutil.h"
> +#include "atmodem.h"
> +
> +static const char *none_prefix[] = { NULL };
> +
> +struct voicecall_driver {
> +	struct ofono_cdma_voicecall_manager *vc;
> +	unsigned int local_release;
> +	GAtChat *chat;
> +	unsigned int vendor;
> +};
> +
> +struct change_state_req {
> +	struct ofono_cdma_voicecall_manager *vc;
> +	ofono_cdma_voicecall_cb_t cb;
> +	void *data;
> +};
> +
> +static void at_dial_cb(gboolean ok, GAtResult *result, gpointer user_data)
> +{
> +	struct cb_data *cbd = user_data;
> +	ofono_cdma_voicecall_cb_t cb = cbd->cb;
> +	GAtResultIter iter;
> +	struct ofono_error error;
> +
> +	decode_at_error(&error, g_at_result_final_response(result));
> +
> +	if (!ok)
> +		goto out;
> +
> +	g_at_result_iter_init(&iter, result);

What is this for?

> +
> +out:
> +	cb(&error, cbd->data);
> +}
> +
> +static void at_dial(struct ofono_cdma_voicecall_manager *vc,
> +				const struct ofono_cdma_phone_number *ph,
> +				ofono_cdma_voicecall_cb_t cb, void *data)
> +{
> +	struct voicecall_driver *vd = ofono_cdma_voicecall_manager_get_data(vc);
> +	struct cb_data *cbd = cb_data_new(cb, data);
> +	char buf[256];
> +
> +	if (cbd == NULL)
> +		goto error;
> +
> +	cbd->user = vc;
> +
> +	snprintf(buf, sizeof(buf), "AT+CDV=%s", ph->number);
> +
> +	if (g_at_chat_send(vd->chat, buf, none_prefix,
> +				at_dial_cb, cbd, g_free) > 0)
> +		return;
> +
> +error:
> +	g_free(cbd);
> +
> +	CALLBACK_WITH_FAILURE(cb, data);
> +}
> +
> +static void at_template(const char *cmd,
> +				struct ofono_cdma_voicecall_manager *vc,
> +				GAtResultFunc result_cb,
> +				ofono_cdma_voicecall_cb_t cb, void *data)
> +{
> +	struct voicecall_driver *vd = ofono_cdma_voicecall_manager_get_data(vc);
> +	struct change_state_req *req = g_try_new0(struct change_state_req, 1);
> +
> +	if (req == NULL)
> +		goto error;
> +
> +	req->vc = vc;
> +	req->cb = cb;
> +	req->data = data;
> +
> +	if (g_at_chat_send(vd->chat, cmd, none_prefix,
> +				result_cb, req, g_free) > 0)
> +		return;
> +
> +error:
> +	g_free(req);
> +
> +	CALLBACK_WITH_FAILURE(cb, data);
> +}
> +
> +static void at_hangup_cb(gboolean ok, GAtResult *result, gpointer user_data)
> +{
> +	struct change_state_req *req = user_data;
> +
> +	if (!ok) {
> +		ofono_error("hangup failed.");
> +		return;
> +	}
> +
> +	ofono_cdma_voicecall_manager_disconnected(req->vc,
> +				OFONO_DISCONNECT_REASON_LOCAL_HANGUP, NULL);
> +		CALLBACK_WITH_SUCCESS(req->cb, req->data);
> +

Why the extra empty line?

How do we handle remote side hanging up?

> +}
> +
> +static void at_hangup(struct ofono_cdma_voicecall_manager *vc,
> +			ofono_cdma_voicecall_cb_t cb, void *data)
> +{
> +	/* Hangup active call */
> +	at_template("AT+CHV", vc, at_hangup_cb, cb, data);
> +}
> +
> +static int at_voicecall_probe(struct ofono_cdma_voicecall_manager *vc,
> +		unsigned int vendor, void *data)
> +{
> +	GAtChat *chat = data;
> +	struct voicecall_driver *vd;
> +
> +	vd = g_try_new0(struct voicecall_driver, 1);
> +	if (vd == NULL)
> +		return -ENOMEM;
> +
> +	vd->chat = g_at_chat_clone(chat);
> +	vd->vendor = vendor;
> +
> +	ofono_cdma_voicecall_manager_set_data(vc, vd);
> +
> +	ofono_cdma_voicecall_manager_register(vc);
> +
> +	return 0;
> +}
> +
> +static void at_voicecall_remove(struct ofono_cdma_voicecall_manager *vc)
> +{
> +	struct voicecall_driver *vd = ofono_cdma_voicecall_manager_get_data(vc);
> +
> +	ofono_cdma_voicecall_manager_set_data(vc, NULL);
> +
> +	g_at_chat_unref(vd->chat);
> +	g_free(vd);
> +}
> +
> +static struct ofono_cdma_voicecall_manager_driver driver = {
> +	.name			= "cdma-atmodem",
> +	.probe			= at_voicecall_probe,
> +	.remove			= at_voicecall_remove,
> +	.dial			= at_dial,
> +	.hangup			= at_hangup,
> +};
> +
> +void cdma_at_voicecall_init()
> +{
> +	ofono_cdma_voicecall_manager_driver_register(&driver);
> +}
> +
> +void cdma_at_voicecall_exit()
> +{
> +	ofono_cdma_voicecall_manager_driver_unregister(&driver);
> +}

Regards,
-Denis

  reply	other threads:[~2010-12-09  8:43 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-02 23:31 [PATCH 3/5] cdma-atmodem: Add CDMA MO Call Support Dara Spieker-Doyle
2010-12-09  8:43 ` Denis Kenzior [this message]
2010-12-10 21:41   ` Dara Spieker-Doyle
2010-12-13 20:53     ` Dara Spieker-Doyle
2010-12-15 19:02       ` Denis Kenzior

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4D00969F.9070303@gmail.com \
    --to=denkenz@gmail.com \
    --cc=ofono@ofono.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.