* [PATCH 3/5] cdma-atmodem: Add CDMA MO Call Support
@ 2010-12-02 23:31 Dara Spieker-Doyle
2010-12-09 8:43 ` Denis Kenzior
0 siblings, 1 reply; 5+ messages in thread
From: Dara Spieker-Doyle @ 2010-12-02 23:31 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 12948 bytes --]
---
Makefile.am | 7 ++
configure.ac | 5 +
drivers/cdma-atmodem/atmodem.c | 47 +++++++++
drivers/cdma-atmodem/atmodem.h | 26 +++++
drivers/cdma-atmodem/atutil.c | 45 +++++++++
drivers/cdma-atmodem/atutil.h | 65 +++++++++++++
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);
+
+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);
+
+}
+
+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);
+}
--
1.7.0.4
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH 3/5] cdma-atmodem: Add CDMA MO Call Support
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
2010-12-10 21:41 ` Dara Spieker-Doyle
0 siblings, 1 reply; 5+ messages in thread
From: Denis Kenzior @ 2010-12-09 8:43 UTC (permalink / raw)
To: ofono
[-- 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
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH 3/5] cdma-atmodem: Add CDMA MO Call Support
2010-12-09 8:43 ` Denis Kenzior
@ 2010-12-10 21:41 ` Dara Spieker-Doyle
2010-12-13 20:53 ` Dara Spieker-Doyle
0 siblings, 1 reply; 5+ messages in thread
From: Dara Spieker-Doyle @ 2010-12-10 21:41 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1007 bytes --]
Hi Denis
On Thu, 2010-12-09 at 09:43 +0100, ext Denis Kenzior wrote:
>
> > 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.
No, they are not verbatim copies as e.g. error decoding is different.
Would you prefer we clarify this by renaming the files cdmautil.(ch)?
> > +
> > + 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?
This is future work as part of the overall design of call state
management with transitions initiated from the modem.
Our current hardware has limitations where such notifications are not
supported.
Cheers
Dara
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 3/5] cdma-atmodem: Add CDMA MO Call Support
2010-12-10 21:41 ` Dara Spieker-Doyle
@ 2010-12-13 20:53 ` Dara Spieker-Doyle
2010-12-15 19:02 ` Denis Kenzior
0 siblings, 1 reply; 5+ messages in thread
From: Dara Spieker-Doyle @ 2010-12-13 20:53 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1177 bytes --]
Hi Denis
On Fri, 2010-12-10 at 22:41 +0100, Spieker-Doyle Dara
(Nokia-MS/SanDiego) wrote:
> Hi Denis
>
> On Thu, 2010-12-09 at 09:43 +0100, ext Denis Kenzior wrote:
>
> >
> > > 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.
>
> No, they are not verbatim copies as e.g. error decoding is different.
> Would you prefer we clarify this by renaming the files cdmautil.(ch)?
>
On second thoughts, I agree for this patch - I will correct this and
re-use the drivers/atmodem/atutil.[ch].
Additionally, for future feature support, I do envisage some delta with
various AT utilities for CDMA. For example, with our current hardware,
the AT return string can have a different format from the GSM AT command
standard.
Do you have any particular preference in such cases as to whether we
modify the e.g. gatchat sources directly to support this or whether we
create CDMA specific functions within the cdma-atmodem driver?
Thank you
Dara
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 3/5] cdma-atmodem: Add CDMA MO Call Support
2010-12-13 20:53 ` Dara Spieker-Doyle
@ 2010-12-15 19:02 ` Denis Kenzior
0 siblings, 0 replies; 5+ messages in thread
From: Denis Kenzior @ 2010-12-15 19:02 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1570 bytes --]
Hi Dara,
On 12/13/2010 02:53 PM, Dara Spieker-Doyle wrote:
> Hi Denis
>
> On Fri, 2010-12-10 at 22:41 +0100, Spieker-Doyle Dara
> (Nokia-MS/SanDiego) wrote:
>> Hi Denis
>>
>> On Thu, 2010-12-09 at 09:43 +0100, ext Denis Kenzior wrote:
>>
>>>
>>>> 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.
>>
>> No, they are not verbatim copies as e.g. error decoding is different.
>> Would you prefer we clarify this by renaming the files cdmautil.(ch)?
>>
> On second thoughts, I agree for this patch - I will correct this and
> re-use the drivers/atmodem/atutil.[ch].
> Additionally, for future feature support, I do envisage some delta with
> various AT utilities for CDMA. For example, with our current hardware,
> the AT return string can have a different format from the GSM AT command
> standard.
> Do you have any particular preference in such cases as to whether we
> modify the e.g. gatchat sources directly to support this or whether we
> create CDMA specific functions within the cdma-atmodem driver?
>
This has to be considered on a case by case basis. I can't predict what
is the better approach until I see specifics. Having said that, I
really hope that we do not need to change the gatchat sources directly.
But if these changes makes sense then I certainly don't see a problem
in doing so.
Regards,
-Denis
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2010-12-15 19:02 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
2010-12-10 21:41 ` Dara Spieker-Doyle
2010-12-13 20:53 ` Dara Spieker-Doyle
2010-12-15 19:02 ` Denis Kenzior
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.