* [PATCH 1/5] bluetooth: define DBUS_TIMEOUT macro @ 2010-08-04 10:22 Gustavo F. Padovan 2010-08-04 10:22 ` [PATCH 2/5] Bluetooth DUN modem prototype Gustavo F. Padovan 2010-08-05 15:35 ` [PATCH 1/5] bluetooth: define DBUS_TIMEOUT macro Denis Kenzior 0 siblings, 2 replies; 8+ messages in thread From: Gustavo F. Padovan @ 2010-08-04 10:22 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1384 bytes --] --- plugins/bluetooth.h | 2 ++ plugins/hfp.c | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/plugins/bluetooth.h b/plugins/bluetooth.h index fb0d841..b70bb0c 100644 --- a/plugins/bluetooth.h +++ b/plugins/bluetooth.h @@ -23,6 +23,8 @@ #define BLUEZ_ADAPTER_INTERFACE BLUEZ_SERVICE ".Adapter" #define BLUEZ_DEVICE_INTERFACE BLUEZ_SERVICE ".Device" +#define DBUS_TIMEOUT 15 + #define HFP_AG_UUID "0000111F-0000-1000-8000-00805F9B34FB" /* Profiles bitfield */ diff --git a/plugins/hfp.c b/plugins/hfp.c index b6cd415..0337891 100644 --- a/plugins/hfp.c +++ b/plugins/hfp.c @@ -595,7 +595,7 @@ static int hfp_enable(struct ofono_modem *modem) status = bluetooth_send_with_reply(data->handsfree_path, BLUEZ_GATEWAY_INTERFACE, "Connect", hfp_connect_reply, modem, NULL, - 15, DBUS_TYPE_INVALID); + DBUS_TIMEOUT, DBUS_TYPE_INVALID); if (status < 0) return -EINVAL; @@ -636,8 +636,8 @@ static int hfp_disable(struct ofono_modem *modem) if (data->agent_registered) { status = bluetooth_send_with_reply(data->handsfree_path, BLUEZ_GATEWAY_INTERFACE, "Disconnect", - hfp_power_down, modem, NULL, 15, - DBUS_TYPE_INVALID); + hfp_power_down, modem, NULL, + DBUS_TIMEOUT, DBUS_TYPE_INVALID); if (status < 0) return -EINVAL; -- 1.7.1.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/5] Bluetooth DUN modem prototype 2010-08-04 10:22 [PATCH 1/5] bluetooth: define DBUS_TIMEOUT macro Gustavo F. Padovan @ 2010-08-04 10:22 ` Gustavo F. Padovan 2010-08-04 10:22 ` [PATCH 3/5] Add dun_enable() function Gustavo F. Padovan 2010-08-05 15:35 ` [PATCH 1/5] bluetooth: define DBUS_TIMEOUT macro Denis Kenzior 1 sibling, 1 reply; 8+ messages in thread From: Gustavo F. Padovan @ 2010-08-04 10:22 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 10370 bytes --] Add a still dummy DUN code, now it can only creates and removes modems. The DUN plugin follows the HFP one a lot, the is basics a copy of some HFP plugin's parts. --- Makefile.am | 6 ++ drivers/dunmodem/dunmodem.c | 50 +++++++++++ drivers/dunmodem/dunmodem.h | 24 +++++ plugins/bluetooth.c | 11 +++ plugins/bluetooth.h | 2 + plugins/dun.c | 203 +++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 296 insertions(+), 0 deletions(-) create mode 100644 drivers/dunmodem/dunmodem.c create mode 100644 drivers/dunmodem/dunmodem.h create mode 100644 plugins/dun.c diff --git a/Makefile.am b/Makefile.am index b64ce8e..62ffc17 100644 --- a/Makefile.am +++ b/Makefile.am @@ -179,6 +179,9 @@ builtin_sources += drivers/atmodem/atutil.h \ drivers/hfpmodem/network-registration.c \ drivers/hfpmodem/call-volume.c +builtin_modules += dunmodem +builtin_sources += drivers/dunmodem/dunmodem.h drivers/dunmodem/dunmodem.c + builtin_modules += mbmmodem builtin_sources += drivers/atmodem/atutil.h \ drivers/mbmmodem/mbmmodem.h \ @@ -242,6 +245,9 @@ builtin_sources += plugins/bluetooth.c plugins/bluetooth.h builtin_modules += hfp builtin_sources += plugins/hfp.c plugins/bluetooth.h +builtin_modules += dun +builtin_sources += plugins/dun.c + builtin_modules += palmpre builtin_sources += plugins/palmpre.c diff --git a/drivers/dunmodem/dunmodem.c b/drivers/dunmodem/dunmodem.c new file mode 100644 index 0000000..5657668 --- /dev/null +++ b/drivers/dunmodem/dunmodem.c @@ -0,0 +1,50 @@ +/* + * + * oFono - Open Source Telephony + * + * Copyright (C) 2008-2010 Intel Corporation. All rights reserved. + * Copyright (C) 2010 Gustavo F. Padovan <gustavo@padovan.org> + * + * 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 <stdio.h> +#include <string.h> +#include <errno.h> + +#include <glib.h> + +#define OFONO_API_SUBJECT_TO_CHANGE +#include <ofono/plugin.h> +#include <ofono/modem.h> + +#include "dunmodem.h" + +static int dunmodem_init(void) +{ + return 0; +} + +static void dunmodem_exit(void) +{ +} + +OFONO_PLUGIN_DEFINE(dunmodem, "Dial-up Networking Driver", VERSION, + OFONO_PLUGIN_PRIORITY_DEFAULT, dunmodem_init, dunmodem_exit) diff --git a/drivers/dunmodem/dunmodem.h b/drivers/dunmodem/dunmodem.h new file mode 100644 index 0000000..291e2ce --- /dev/null +++ b/drivers/dunmodem/dunmodem.h @@ -0,0 +1,24 @@ +/* + * + * oFono - Open Source Telephony + * + * Copyright (C) 2010 Gustavo F. Padovan <gustavo@padovan.org> + * + * 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 + * + */ + +struct dun_data { + char *dun_path; +}; diff --git a/plugins/bluetooth.c b/plugins/bluetooth.c index 5a85eaa..b7ec0d3 100644 --- a/plugins/bluetooth.c +++ b/plugins/bluetooth.c @@ -218,6 +218,9 @@ static void has_uuid(DBusMessageIter *array, gpointer user_data) if (!strcasecmp(uuid, HFP_AG_UUID)) *profiles |= HFP_AG; + if (!strcasecmp(uuid, DUN_GW_UUID)) + *profiles |= DUN_GW; + dbus_message_iter_next(&value); } } @@ -276,6 +279,14 @@ static void device_properties_cb(DBusPendingCall *call, gpointer user_data) profile->create(path, device_addr, adapter_addr, alias); } + if ((have_uuid & DUN_GW) && device_addr && adapter_addr) { + profile = g_hash_table_lookup(uuid_hash, DUN_GW_UUID); + if (!profile || !profile->create) + goto done; + + profile->create(path, device_addr, adapter_addr, alias); + } + done: dbus_message_unref(reply); } diff --git a/plugins/bluetooth.h b/plugins/bluetooth.h index b70bb0c..d1302d4 100644 --- a/plugins/bluetooth.h +++ b/plugins/bluetooth.h @@ -26,9 +26,11 @@ #define DBUS_TIMEOUT 15 #define HFP_AG_UUID "0000111F-0000-1000-8000-00805F9B34FB" +#define DUN_GW_UUID "00001103-0000-1000-8000-00805F9B34FB" /* Profiles bitfield */ #define HFP_AG 0x01 +#define DUN_GW 0x02 struct bluetooth_profile { const char *name; diff --git a/plugins/dun.c b/plugins/dun.c new file mode 100644 index 0000000..1e9f972 --- /dev/null +++ b/plugins/dun.c @@ -0,0 +1,203 @@ +/* + * oFono - Open Source Telephony + * + * Copyright (C) 2008-2010 Intel Corporation. All rights reserved. + * Copyright (C) 2010 Gustavo F. Padovan <gustavo@padovan.org> + * + * 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 <stdio.h> +#include <string.h> +#include <errno.h> +#include <glib.h> +#include <ofono.h> + +#define OFONO_API_SUBJECT_TO_CHANGE +#include <ofono/plugin.h> +#include <ofono/log.h> +#include <ofono/modem.h> + +#include <drivers/dunmodem/dunmodem.h> + +#include <ofono/dbus.h> + +#include "bluetooth.h" + +#ifndef DBUS_TYPE_UNIX_FD +#define DBUS_TYPE_UNIX_FD -1 +#endif + +static DBusConnection *connection; +static GHashTable *modem_hash = NULL; + +static int dun_create_modem(const char *device, const char *dev_addr, + const char *adapter_addr, const char *alias) +{ + struct ofono_modem *modem; + struct dun_data *data; + char buf[256]; + + /* We already have this device in our hash, ignore */ + if (g_hash_table_lookup(modem_hash, device) != NULL) + return -EALREADY; + + ofono_info("Using device: %s, devaddr: %s, adapter: %s", + device, dev_addr, adapter_addr); + + strcpy(buf, "dun/"); + bluetooth_create_path(dev_addr, adapter_addr, buf + 4, sizeof(buf) - 4); + + modem = ofono_modem_create(buf, "dun"); + if (modem == NULL) + return -ENOMEM; + + data = g_try_new0(struct dun_data, 1); + if (!data) + goto free; + + data->dun_path = g_strdup(device); + if (data->dun_path == NULL) + goto free; + + ofono_modem_set_data(modem, data); + ofono_modem_set_name(modem, alias); + ofono_modem_register(modem); + + g_hash_table_insert(modem_hash, g_strdup(device), modem); + return 0; + +free: + g_free(data); + ofono_modem_remove(modem); + + return -ENOMEM; +} + +static gboolean dun_remove_each_modem(gpointer key, gpointer value, + gpointer user_data) +{ + struct ofono_modem *modem = value; + + ofono_modem_remove(modem); + + return TRUE; +} + +static void dun_remove_all_modem() +{ + if (modem_hash == NULL) + return; + + g_hash_table_foreach_remove(modem_hash, dun_remove_each_modem, NULL); +} + +static void dun_set_alias(const char *device, const char *alias) +{ + struct ofono_modem *modem; + + if (!device || !alias) + return; + + modem = g_hash_table_lookup(modem_hash, device); + if (!modem) + return; + + ofono_modem_set_name(modem, alias); +} + +static int dun_probe(struct ofono_modem *modem) +{ + DBG("%p", modem); + return 0; +} + +static void dun_remove(struct ofono_modem *modem) +{ + struct dun_data *data = ofono_modem_get_data(modem); + + g_hash_table_remove(modem_hash, data->dun_path); + + g_free(data->dun_path); + g_free(data); + + ofono_modem_set_data(modem, NULL); +} + +static int dun_enable(struct ofono_modem *modem) +{ + DBG("%p", modem); + return 0; +} + +static int dun_disable(struct ofono_modem *modem) +{ + DBG("%p", modem); + return 0; +} + +static struct ofono_modem_driver dun_driver = { + .name = "dun", + .probe = dun_probe, + .remove = dun_remove, + .enable = dun_enable, + .disable = dun_disable, +}; + +static struct bluetooth_profile dun_profile = { + .name = "dun", + .create = dun_create_modem, + .remove_all = dun_remove_all_modem, + .set_alias = dun_set_alias, +}; + +static int dun_init() +{ + int err; + + if (DBUS_TYPE_UNIX_FD < 0) + return -EBADF; + + connection = ofono_dbus_get_connection(); + + err = ofono_modem_driver_register(&dun_driver); + if (err < 0) + return err; + + err = bluetooth_register_uuid(DUN_GW_UUID, &dun_profile); + if (err < 0) { + ofono_modem_driver_unregister(&dun_driver); + return err; + } + + modem_hash = g_hash_table_new_full(g_str_hash, g_str_equal, + g_free, NULL); + + return 0; +} + +static void dun_exit() +{ + bluetooth_unregister_uuid(DUN_GW_UUID); + ofono_modem_driver_unregister(&dun_driver); + + g_hash_table_destroy(modem_hash); +} + +OFONO_PLUGIN_DEFINE(dun, "Dial-up Networking Profile Plugins", VERSION, + OFONO_PLUGIN_PRIORITY_DEFAULT, dun_init, dun_exit) -- 1.7.1.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/5] Add dun_enable() function 2010-08-04 10:22 ` [PATCH 2/5] Bluetooth DUN modem prototype Gustavo F. Padovan @ 2010-08-04 10:22 ` Gustavo F. Padovan 2010-08-04 10:22 ` [PATCH 4/5] Add dun_disable() to power down the modem Gustavo F. Padovan 2010-08-05 15:42 ` [PATCH 3/5] Add dun_enable() function Denis Kenzior 0 siblings, 2 replies; 8+ messages in thread From: Gustavo F. Padovan @ 2010-08-04 10:22 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 3062 bytes --] dun_enable() is called by setting the Powered property to true. It creates a rfcomm link throught the BlueZ Serial API. --- drivers/dunmodem/dunmodem.h | 1 + plugins/bluetooth.h | 1 + plugins/dun.c | 62 +++++++++++++++++++++++++++++++++++++++++- 3 files changed, 62 insertions(+), 2 deletions(-) diff --git a/drivers/dunmodem/dunmodem.h b/drivers/dunmodem/dunmodem.h index 291e2ce..6d545c9 100644 --- a/drivers/dunmodem/dunmodem.h +++ b/drivers/dunmodem/dunmodem.h @@ -21,4 +21,5 @@ struct dun_data { char *dun_path; + char *rfcomm; }; diff --git a/plugins/bluetooth.h b/plugins/bluetooth.h index d1302d4..2a4a549 100644 --- a/plugins/bluetooth.h +++ b/plugins/bluetooth.h @@ -22,6 +22,7 @@ #define BLUEZ_MANAGER_INTERFACE BLUEZ_SERVICE ".Manager" #define BLUEZ_ADAPTER_INTERFACE BLUEZ_SERVICE ".Adapter" #define BLUEZ_DEVICE_INTERFACE BLUEZ_SERVICE ".Device" +#define BLUEZ_SERIAL_INTERFACE BLUEZ_SERVICE ".Serial" #define DBUS_TIMEOUT 15 diff --git a/plugins/dun.c b/plugins/dun.c index 1e9f972..60d0271 100644 --- a/plugins/dun.c +++ b/plugins/dun.c @@ -25,6 +25,7 @@ #include <stdio.h> #include <string.h> #include <errno.h> +#include <gdbus.h> #include <glib.h> #include <ofono.h> @@ -139,10 +140,67 @@ static void dun_remove(struct ofono_modem *modem) ofono_modem_set_data(modem, NULL); } +static void dun_connect_reply(DBusPendingCall *call, gpointer user_data) +{ + struct ofono_modem *modem = user_data; + struct dun_data *data = ofono_modem_get_data(modem); + const char *dev; + DBusError derr; + DBusMessage *reply, *msg; + + reply = dbus_pending_call_steal_reply(call); + + if (ofono_modem_get_powered(modem)) + goto done; + + if (!dbus_message_get_args(reply, NULL, DBUS_TYPE_STRING, &dev, + DBUS_TYPE_INVALID)) + goto done; + + data->rfcomm = g_strdup(dev); + + dbus_error_init(&derr); + if (!dbus_set_error_from_message(&derr, reply)) { + ofono_modem_set_powered(modem, TRUE); + goto done; + } + + DBG("Connect reply: %s", derr.message); + + if (dbus_error_has_name(&derr, DBUS_ERROR_NO_REPLY)) { + msg = dbus_message_new_method_call(BLUEZ_SERVICE, + data->dun_path, + BLUEZ_SERIAL_INTERFACE, "Disconnect"); + if (!msg) + ofono_error("Disconnect failed"); + else + g_dbus_send_message(connection, msg); + } + + ofono_modem_set_powered(modem, FALSE); + + dbus_error_free(&derr); + +done: + dbus_message_unref(reply); +} + static int dun_enable(struct ofono_modem *modem) { - DBG("%p", modem); - return 0; + struct dun_data *data = ofono_modem_get_data(modem); + int status; + const char *uuid = DUN_GW_UUID; + + status = bluetooth_send_with_reply(data->dun_path, + BLUEZ_SERIAL_INTERFACE, "Connect", + dun_connect_reply, modem, NULL, + DBUS_TIMEOUT, DBUS_TYPE_STRING, &uuid, + DBUS_TYPE_INVALID); + + if (status < 0) + return -EINVAL; + + return -EINPROGRESS; } static int dun_disable(struct ofono_modem *modem) -- 1.7.1.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 4/5] Add dun_disable() to power down the modem 2010-08-04 10:22 ` [PATCH 3/5] Add dun_enable() function Gustavo F. Padovan @ 2010-08-04 10:22 ` Gustavo F. Padovan 2010-08-04 10:22 ` [PATCH 5/5] dun: Add GAtChat for the rfcomm device Gustavo F. Padovan 2010-08-05 15:43 ` [PATCH 4/5] Add dun_disable() to power down the modem Denis Kenzior 2010-08-05 15:42 ` [PATCH 3/5] Add dun_enable() function Denis Kenzior 1 sibling, 2 replies; 8+ messages in thread From: Gustavo F. Padovan @ 2010-08-04 10:22 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1545 bytes --] When setting Powered to 0 the link rfcomm is disconnected. --- plugins/dun.c | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 40 insertions(+), 2 deletions(-) diff --git a/plugins/dun.c b/plugins/dun.c index 60d0271..3d1e5c4 100644 --- a/plugins/dun.c +++ b/plugins/dun.c @@ -203,10 +203,48 @@ static int dun_enable(struct ofono_modem *modem) return -EINPROGRESS; } +static void dun_power_down(DBusPendingCall *call, gpointer user_data) +{ + struct ofono_modem *modem = user_data; + struct dun_data *data = ofono_modem_get_data(modem); + DBusMessage *reply; + DBusError derr; + + reply = dbus_pending_call_steal_reply(call); + + dbus_error_init(&derr); + if (dbus_set_error_from_message(&derr, reply)) { + DBG("Disconnect reply: %s", derr.message); + dbus_error_free(&derr); + goto done; + } + + ofono_modem_set_powered(modem, FALSE); + +done: + g_free(data->rfcomm); + + dbus_message_unref(reply); +} + static int dun_disable(struct ofono_modem *modem) { - DBG("%p", modem); - return 0; + struct dun_data *data = ofono_modem_get_data(modem); + int status; + + if (!ofono_modem_get_powered(modem)) + return 0; + + status = bluetooth_send_with_reply(data->dun_path, + BLUEZ_SERIAL_INTERFACE, "Disconnect", + dun_power_down, modem, NULL, DBUS_TIMEOUT, + DBUS_TYPE_STRING, &data->rfcomm, + DBUS_TYPE_INVALID); + + if (status < 0) + return -EINVAL; + + return -EINPROGRESS; } static struct ofono_modem_driver dun_driver = { -- 1.7.1.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 5/5] dun: Add GAtChat for the rfcomm device 2010-08-04 10:22 ` [PATCH 4/5] Add dun_disable() to power down the modem Gustavo F. Padovan @ 2010-08-04 10:22 ` Gustavo F. Padovan 2010-08-05 15:43 ` [PATCH 4/5] Add dun_disable() to power down the modem Denis Kenzior 1 sibling, 0 replies; 8+ messages in thread From: Gustavo F. Padovan @ 2010-08-04 10:22 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 3075 bytes --] --- drivers/dunmodem/dunmodem.c | 1 + drivers/dunmodem/dunmodem.h | 1 + plugins/dun.c | 56 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 0 deletions(-) diff --git a/drivers/dunmodem/dunmodem.c b/drivers/dunmodem/dunmodem.c index 5657668..1020dd2 100644 --- a/drivers/dunmodem/dunmodem.c +++ b/drivers/dunmodem/dunmodem.c @@ -30,6 +30,7 @@ #include <errno.h> #include <glib.h> +#include <gatchat.h> #define OFONO_API_SUBJECT_TO_CHANGE #include <ofono/plugin.h> diff --git a/drivers/dunmodem/dunmodem.h b/drivers/dunmodem/dunmodem.h index 6d545c9..f7351b7 100644 --- a/drivers/dunmodem/dunmodem.h +++ b/drivers/dunmodem/dunmodem.h @@ -22,4 +22,5 @@ struct dun_data { char *dun_path; char *rfcomm; + GAtChat *chat; }; diff --git a/plugins/dun.c b/plugins/dun.c index 3d1e5c4..488e7a3 100644 --- a/plugins/dun.c +++ b/plugins/dun.c @@ -23,11 +23,14 @@ #include <config.h> #endif #include <stdio.h> +#include <stdlib.h> #include <string.h> #include <errno.h> #include <gdbus.h> #include <glib.h> #include <ofono.h> +#include <gatchat.h> +#include <gattty.h> #define OFONO_API_SUBJECT_TO_CHANGE #include <ofono/plugin.h> @@ -47,6 +50,48 @@ static DBusConnection *connection; static GHashTable *modem_hash = NULL; +static void dun_debug(const char *str, void *user_data) +{ + ofono_info("%s", str); +} + +static GAtChat *create_port(const char *device) +{ + GAtSyntax *syntax; + GIOChannel *channel; + GAtChat *chat; + + channel = g_at_tty_open(device, NULL); + if (!channel) + return NULL; + + syntax = g_at_syntax_new_gsm_permissive(); + chat = g_at_chat_new(channel, syntax); + g_at_syntax_unref(syntax); + g_io_channel_unref(channel); + + if (!chat) + return NULL; + + return chat; +} + +static GAtChat *open_device(const char *device, char *debug) +{ + GAtChat *chat; + + DBG("%s", device); + + chat = create_port(device); + if (chat == NULL) + return NULL; + + if (getenv("OFONO_AT_DEBUG")) + g_at_chat_set_debug(chat, dun_debug, debug); + + return chat; +} + static int dun_create_modem(const char *device, const char *dev_addr, const char *adapter_addr, const char *alias) { @@ -159,6 +204,10 @@ static void dun_connect_reply(DBusPendingCall *call, gpointer user_data) data->rfcomm = g_strdup(dev); + data->chat = open_device(dev, "Modem:"); + if (data->chat == NULL) + goto done; + dbus_error_init(&derr); if (!dbus_set_error_from_message(&derr, reply)) { ofono_modem_set_powered(modem, TRUE); @@ -235,6 +284,13 @@ static int dun_disable(struct ofono_modem *modem) if (!ofono_modem_get_powered(modem)) return 0; + if (data->chat) { + g_at_chat_cancel_all(data->chat); + g_at_chat_unregister_all(data->chat); + g_at_chat_unref(data->chat); + data->chat = NULL; + } + status = bluetooth_send_with_reply(data->dun_path, BLUEZ_SERIAL_INTERFACE, "Disconnect", dun_power_down, modem, NULL, DBUS_TIMEOUT, -- 1.7.1.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 4/5] Add dun_disable() to power down the modem 2010-08-04 10:22 ` [PATCH 4/5] Add dun_disable() to power down the modem Gustavo F. Padovan 2010-08-04 10:22 ` [PATCH 5/5] dun: Add GAtChat for the rfcomm device Gustavo F. Padovan @ 2010-08-05 15:43 ` Denis Kenzior 1 sibling, 0 replies; 8+ messages in thread From: Denis Kenzior @ 2010-08-05 15:43 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1821 bytes --] Hi Gustavo, On 08/04/2010 05:22 AM, Gustavo F. Padovan wrote: > When setting Powered to 0 the link rfcomm is disconnected. > --- > plugins/dun.c | 42 ++++++++++++++++++++++++++++++++++++++++-- > 1 files changed, 40 insertions(+), 2 deletions(-) > > diff --git a/plugins/dun.c b/plugins/dun.c > index 60d0271..3d1e5c4 100644 > --- a/plugins/dun.c > +++ b/plugins/dun.c > @@ -203,10 +203,48 @@ static int dun_enable(struct ofono_modem *modem) > return -EINPROGRESS; > } > > +static void dun_power_down(DBusPendingCall *call, gpointer user_data) > +{ > + struct ofono_modem *modem = user_data; > + struct dun_data *data = ofono_modem_get_data(modem); > + DBusMessage *reply; > + DBusError derr; > + > + reply = dbus_pending_call_steal_reply(call); > + > + dbus_error_init(&derr); > + if (dbus_set_error_from_message(&derr, reply)) { > + DBG("Disconnect reply: %s", derr.message); > + dbus_error_free(&derr); > + goto done; > + } > + > + ofono_modem_set_powered(modem, FALSE); > + > +done: > + g_free(data->rfcomm); > + > + dbus_message_unref(reply); > +} > + > static int dun_disable(struct ofono_modem *modem) > { > - DBG("%p", modem); > - return 0; > + struct dun_data *data = ofono_modem_get_data(modem); > + int status; > + > + if (!ofono_modem_get_powered(modem)) > + return 0; Again, please don't do this part. If the core messes up, I want to know early. > + > + status = bluetooth_send_with_reply(data->dun_path, > + BLUEZ_SERIAL_INTERFACE, "Disconnect", > + dun_power_down, modem, NULL, DBUS_TIMEOUT, > + DBUS_TYPE_STRING, &data->rfcomm, > + DBUS_TYPE_INVALID); > + > + if (status < 0) > + return -EINVAL; > + > + return -EINPROGRESS; > } > > static struct ofono_modem_driver dun_driver = { Regards, -Denis ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/5] Add dun_enable() function 2010-08-04 10:22 ` [PATCH 3/5] Add dun_enable() function Gustavo F. Padovan 2010-08-04 10:22 ` [PATCH 4/5] Add dun_disable() to power down the modem Gustavo F. Padovan @ 2010-08-05 15:42 ` Denis Kenzior 1 sibling, 0 replies; 8+ messages in thread From: Denis Kenzior @ 2010-08-05 15:42 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 2467 bytes --] Hi Gustavo, > +static void dun_connect_reply(DBusPendingCall *call, gpointer user_data) > +{ > + struct ofono_modem *modem = user_data; > + struct dun_data *data = ofono_modem_get_data(modem); > + const char *dev; > + DBusError derr; > + DBusMessage *reply, *msg; > + > + reply = dbus_pending_call_steal_reply(call); > + > + if (ofono_modem_get_powered(modem)) > + goto done; I prefer you don't do this check above. If the core isn't doing something right I want things to crash right away. > + > + if (!dbus_message_get_args(reply, NULL, DBUS_TYPE_STRING, &dev, > + DBUS_TYPE_INVALID)) > + goto done; That seems wrong, you need to tell the core powering up failed. This should be treated as an error. > + > + data->rfcomm = g_strdup(dev); > + > + dbus_error_init(&derr); > + if (!dbus_set_error_from_message(&derr, reply)) { > + ofono_modem_set_powered(modem, TRUE); > + goto done; > + } Checking for D-Bus Error should be done before grabbing the reply arguments, especially since you never free rfcomm above. > + > + DBG("Connect reply: %s", derr.message); > + > + if (dbus_error_has_name(&derr, DBUS_ERROR_NO_REPLY)) { > + msg = dbus_message_new_method_call(BLUEZ_SERVICE, > + data->dun_path, > + BLUEZ_SERIAL_INTERFACE, "Disconnect"); > + if (!msg) > + ofono_error("Disconnect failed"); > + else > + g_dbus_send_message(connection, msg); > + } I'm not sure this part is really necessary. How can we trigger a condition where this function fails but the tty device is created? > + > + ofono_modem_set_powered(modem, FALSE); > + > + dbus_error_free(&derr); Might want to localize dbus_error_free() to the same area where it is being used. Makes the code easier to read. > + > +done: > + dbus_message_unref(reply); > +} > + > static int dun_enable(struct ofono_modem *modem) > { > - DBG("%p", modem); Might want to leave the DBG in there. > - return 0; > + struct dun_data *data = ofono_modem_get_data(modem); > + int status; > + const char *uuid = DUN_GW_UUID; > + > + status = bluetooth_send_with_reply(data->dun_path, > + BLUEZ_SERIAL_INTERFACE, "Connect", > + dun_connect_reply, modem, NULL, > + DBUS_TIMEOUT, DBUS_TYPE_STRING, &uuid, > + DBUS_TYPE_INVALID); > + > + if (status < 0) > + return -EINVAL; > + > + return -EINPROGRESS; > } > > static int dun_disable(struct ofono_modem *modem) Regards, -Denis ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/5] bluetooth: define DBUS_TIMEOUT macro 2010-08-04 10:22 [PATCH 1/5] bluetooth: define DBUS_TIMEOUT macro Gustavo F. Padovan 2010-08-04 10:22 ` [PATCH 2/5] Bluetooth DUN modem prototype Gustavo F. Padovan @ 2010-08-05 15:35 ` Denis Kenzior 1 sibling, 0 replies; 8+ messages in thread From: Denis Kenzior @ 2010-08-05 15:35 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 262 bytes --] Hi Gustavo, On 08/04/2010 05:22 AM, Gustavo F. Padovan wrote: > --- > plugins/bluetooth.h | 2 ++ > plugins/hfp.c | 6 +++--- > 2 files changed, 5 insertions(+), 3 deletions(-) > This patch has been applied, thanks. Regards, -Denis ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2010-08-05 15:43 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-08-04 10:22 [PATCH 1/5] bluetooth: define DBUS_TIMEOUT macro Gustavo F. Padovan 2010-08-04 10:22 ` [PATCH 2/5] Bluetooth DUN modem prototype Gustavo F. Padovan 2010-08-04 10:22 ` [PATCH 3/5] Add dun_enable() function Gustavo F. Padovan 2010-08-04 10:22 ` [PATCH 4/5] Add dun_disable() to power down the modem Gustavo F. Padovan 2010-08-04 10:22 ` [PATCH 5/5] dun: Add GAtChat for the rfcomm device Gustavo F. Padovan 2010-08-05 15:43 ` [PATCH 4/5] Add dun_disable() to power down the modem Denis Kenzior 2010-08-05 15:42 ` [PATCH 3/5] Add dun_enable() function Denis Kenzior 2010-08-05 15:35 ` [PATCH 1/5] bluetooth: define DBUS_TIMEOUT macro Denis Kenzior
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox