* [PATCH v4, 3/5] nokiacdma: Add plugin and CDMA MO Call Support
@ 2011-01-04 1:50 Dara Spieker-Doyle
2011-01-10 22:39 ` Denis Kenzior
0 siblings, 1 reply; 3+ messages in thread
From: Dara Spieker-Doyle @ 2011-01-04 1:50 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 5560 bytes --]
---
Makefile.am | 3 +
plugins/nokiacdma.c | 198 +++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 201 insertions(+), 0 deletions(-)
create mode 100644 plugins/nokiacdma.c
diff --git a/Makefile.am b/Makefile.am
index 4139863..8572efc 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -295,6 +295,9 @@ builtin_sources += plugins/ste.c
builtin_modules += caif
builtin_sources += plugins/caif.c
+
+builtin_modules += nokiacdma
+builtin_sources += plugins/nokiacdma.c
endif
if MAINTAINER_MODE
diff --git a/plugins/nokiacdma.c b/plugins/nokiacdma.c
new file mode 100644
index 0000000..adfecf4
--- /dev/null
+++ b/plugins/nokiacdma.c
@@ -0,0 +1,198 @@
+/*
+ * This file is part of 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 <stdlib.h>
+#include <errno.h>
+#include <termios.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#include <glib.h>
+#include <gatchat.h>
+#include <gattty.h>
+
+#define OFONO_API_SUBJECT_TO_CHANGE
+#include <ofono/plugin.h>
+#include <ofono/log.h>
+#include <ofono/modem.h>
+
+#include <drivers/atmodem/atutil.h>
+#include <ofono/cdma-voicecall.h>
+
+#include "common.h"
+
+struct nokiacdma_data {
+ GAtChat *chat;
+};
+
+static void nokiacdma_debug(const char *str, void *data)
+{
+ const char *prefix = data;
+
+ ofono_info("%s%s", prefix, str);
+}
+
+static int nokiacdma_probe(struct ofono_modem *modem)
+{
+ struct nokiacdma_data *data;
+
+ DBG("%p", modem);
+
+ data = g_try_new0(struct nokiacdma_data, 1);
+ if (data == NULL)
+ return -ENOMEM;
+
+ ofono_modem_set_data(modem, data);
+
+ return 0;
+}
+
+static void nokiacdma_remove(struct ofono_modem *modem)
+{
+ struct nokiacdma_data *data = ofono_modem_get_data(modem);
+
+ DBG("%p", modem);
+
+ ofono_modem_set_data(modem, NULL);
+
+ if (data->chat)
+ g_at_chat_unref(data->chat);
+
+ g_free(data);
+}
+
+static int nokiacdma_enable(struct ofono_modem *modem)
+{
+ struct nokiacdma_data *data = ofono_modem_get_data(modem);
+ GAtSyntax *syntax;
+ GIOChannel *channel;
+ const char *device;
+
+ device = ofono_modem_get_string(modem, "Device");
+ if (device == NULL)
+ return -EINVAL;
+
+ channel = g_at_tty_open(device, NULL);
+ if (channel == NULL)
+ return -EIO;
+
+ /* TODO: Will need a CDMA AT syntax parser later. Using GSM V1 for now. */
+ syntax = g_at_syntax_new_gsmv1();
+
+ data->chat = g_at_chat_new(channel, syntax);
+ g_at_syntax_unref(syntax);
+ g_io_channel_unref(channel);
+
+ if (data->chat == NULL)
+ return -ENOMEM;
+
+ if (getenv("OFONO_AT_DEBUG"))
+ g_at_chat_set_debug(data->chat, nokiacdma_debug,
+ "CDMA Device: ");
+
+ return 0;
+}
+
+static int nokiacdma_disable(struct ofono_modem *modem)
+{
+ struct nokiacdma_data *data = ofono_modem_get_data(modem);
+
+ DBG("%p", modem);
+
+ g_at_chat_unref(data->chat);
+ data->chat = NULL;
+
+ return 0;
+}
+
+static void nokiacdma_pre_sim(struct ofono_modem *modem)
+{
+ struct nokiacdma_data *data = ofono_modem_get_data(modem);
+
+ ofono_cdma_voicecall_create(modem, 0, "cdmamodem", data->chat);
+}
+
+static void nokiacdma_post_sim(struct ofono_modem *modem)
+{
+}
+
+static gboolean nokiacdma_set_online_cb(gpointer cb_data)
+{
+ struct cb_data *cbd = cb_data;
+ ofono_modem_online_cb_t cb = cbd->cb;
+
+ CALLBACK_WITH_SUCCESS(cb, cbd->data);
+
+ g_free(cbd);
+
+ /* do not call again */
+ return FALSE;
+}
+
+static void nokiacdma_set_online(struct ofono_modem *modem,
+ ofono_bool_t online,
+ ofono_modem_online_cb_t cb, void *user_data)
+{
+ struct cb_data *cbd = cb_data_new(cb, user_data);
+
+ DBG("modem %p %s", modem, online ? "online" : "offline");
+
+ /* TODO: Add implementation to control modem online status */
+ g_idle_add(nokiacdma_set_online_cb, cbd);
+}
+
+static void nokiacdma_post_online(struct ofono_modem *modem)
+{
+ DBG("%p", modem);
+}
+
+static struct ofono_modem_driver nokiacdma_driver = {
+ .name = "nokiacdma",
+ .probe = nokiacdma_probe,
+ .remove = nokiacdma_remove,
+ .enable = nokiacdma_enable,
+ .disable = nokiacdma_disable,
+ .pre_sim = nokiacdma_pre_sim,
+ .post_sim = nokiacdma_post_sim,
+ .set_online = nokiacdma_set_online,
+ .post_online = nokiacdma_post_online,
+};
+
+static int nokiacdma_init(void)
+{
+ return ofono_modem_driver_register(&nokiacdma_driver);
+}
+
+static void nokiacdma_exit(void)
+{
+ ofono_modem_driver_unregister(&nokiacdma_driver);
+}
+
+OFONO_PLUGIN_DEFINE(nokiacdma, "Generic CDMA AT Modem", VERSION,
+ OFONO_PLUGIN_PRIORITY_DEFAULT,
+ nokiacdma_init, nokiacdma_exit)
--
1.7.0.4
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH v4, 3/5] nokiacdma: Add plugin and CDMA MO Call Support
2011-01-04 1:50 [PATCH v4, 3/5] nokiacdma: Add plugin and CDMA MO Call Support Dara Spieker-Doyle
@ 2011-01-10 22:39 ` Denis Kenzior
2011-01-10 23:12 ` Dara Spieker-Doyle
0 siblings, 1 reply; 3+ messages in thread
From: Denis Kenzior @ 2011-01-10 22:39 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1331 bytes --]
Hi Dara,
> +static void nokiacdma_remove(struct ofono_modem *modem)
> +{
> + struct nokiacdma_data *data = ofono_modem_get_data(modem);
> +
> + DBG("%p", modem);
> +
> + ofono_modem_set_data(modem, NULL);
> +
> + if (data->chat)
> + g_at_chat_unref(data->chat);
Feel free to skip the NULL check, g_at_chat_unref handles this just fine.
> +
> + g_free(data);
> +}
> +
<snip>
> +static gboolean nokiacdma_set_online_cb(gpointer cb_data)
> +{
> + struct cb_data *cbd = cb_data;
> + ofono_modem_online_cb_t cb = cbd->cb;
> +
> + CALLBACK_WITH_SUCCESS(cb, cbd->data);
> +
> + g_free(cbd);
> +
> + /* do not call again */
> + return FALSE;
> +}
> +
> +static void nokiacdma_set_online(struct ofono_modem *modem,
> + ofono_bool_t online,
> + ofono_modem_online_cb_t cb, void *user_data)
> +{
> + struct cb_data *cbd = cb_data_new(cb, user_data);
> +
> + DBG("modem %p %s", modem, online ? "online" : "offline");
> +
> + /* TODO: Add implementation to control modem online status */
> + g_idle_add(nokiacdma_set_online_cb, cbd);
> +}
> +
I'm really lost in the above two functions. If you don't have an
implementation, you can just skip it. oFono should do the right thing
and automatically bring devices up into online state if set_online is
missing.
Regards,
-Denis
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH v4, 3/5] nokiacdma: Add plugin and CDMA MO Call Support
2011-01-10 22:39 ` Denis Kenzior
@ 2011-01-10 23:12 ` Dara Spieker-Doyle
0 siblings, 0 replies; 3+ messages in thread
From: Dara Spieker-Doyle @ 2011-01-10 23:12 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1554 bytes --]
Hi Denis
On 01/10/2011 02:39 PM, ext Denis Kenzior wrote:
> Hi Dara,
>
>> +static void nokiacdma_remove(struct ofono_modem *modem)
>> +{
>> + struct nokiacdma_data *data = ofono_modem_get_data(modem);
>> +
>> + DBG("%p", modem);
>> +
>> + ofono_modem_set_data(modem, NULL);
>> +
>> + if (data->chat)
>> + g_at_chat_unref(data->chat);
>
> Feel free to skip the NULL check, g_at_chat_unref handles this just fine.
>
I'll remove this
>> +
>> + g_free(data);
>> +}
>> +
>
> <snip>
>
>> +static gboolean nokiacdma_set_online_cb(gpointer cb_data)
>> +{
>> + struct cb_data *cbd = cb_data;
>> + ofono_modem_online_cb_t cb = cbd->cb;
>> +
>> + CALLBACK_WITH_SUCCESS(cb, cbd->data);
>> +
>> + g_free(cbd);
>> +
>> + /* do not call again */
>> + return FALSE;
>> +}
>> +
>> +static void nokiacdma_set_online(struct ofono_modem *modem,
>> + ofono_bool_t online,
>> + ofono_modem_online_cb_t cb, void *user_data)
>> +{
>> + struct cb_data *cbd = cb_data_new(cb, user_data);
>> +
>> + DBG("modem %p %s", modem, online ? "online" : "offline");
>> +
>> + /* TODO: Add implementation to control modem online status */
>> + g_idle_add(nokiacdma_set_online_cb, cbd);
>> +}
>> +
>
> I'm really lost in the above two functions. If you don't have an
> implementation, you can just skip it. oFono should do the right thing
> and automatically bring devices up into online state if set_online is
> missing.
>
OK - we'll skip it as discussed and I'll include this in the patch rebase.
Thank you
Dara
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2011-01-10 23:12 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-01-04 1:50 [PATCH v4, 3/5] nokiacdma: Add plugin and CDMA MO Call Support Dara Spieker-Doyle
2011-01-10 22:39 ` Denis Kenzior
2011-01-10 23:12 ` Dara Spieker-Doyle
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.