summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndres Salomon <dilinger@collabora.co.uk>2009-09-29 23:53:59 -0400
committerDenis Kenzior <denkenz@gmail.com>2009-09-29 23:04:24 -0500
commit4decda3f7f359559493d0154a96ef6b1654a3edc (patch)
treed0fe2a959f146aa0b47c6b1c54741aaab1f8b5cf
parent128d129ef5b02525e0688feffe67a5a2c739a2e4 (diff)
downloadofono-4decda3f7f359559493d0154a96ef6b1654a3edc.tar.bz2
G1: move chat handling into enable callback
This updates the g1 code to create the GAtChat object in the enable() callback, and to unref it in the disable() callback. This is more in line with what the other plugins do, and as a bonus fixes a segfault when powering down the G1 modem.. Signed-off-by: Andres Salomon <dilinger@collabora.co.uk>
-rw-r--r--plugins/g1.c48
1 files changed, 22 insertions, 26 deletions
diff --git a/plugins/g1.c b/plugins/g1.c
index 5c53a12a..0414f495 100644
--- a/plugins/g1.c
+++ b/plugins/g1.c
@@ -57,39 +57,14 @@ static void g1_debug(const char *str, void *data)
/* Detect hardware, and initialize if found */
static int g1_probe(struct ofono_modem *modem)
{
- GAtSyntax *syntax;
- GAtChat *chat;
- const char *device;
-
DBG("");
- device = ofono_modem_get_string(modem, "Device");
- if (device == NULL)
- return -EINVAL;
-
- syntax = g_at_syntax_new_gsm_permissive();
- chat = g_at_chat_new_from_tty(device, syntax);
- g_at_syntax_unref(syntax);
-
- if (chat == NULL)
- return -EIO;
-
- if (getenv("OFONO_AT_DEBUG") != NULL)
- g_at_chat_set_debug(chat, g1_debug, NULL);
-
- ofono_modem_set_data(modem, chat);
-
return 0;
}
static void g1_remove(struct ofono_modem *modem)
{
- GAtChat *chat = ofono_modem_get_data(modem);
-
DBG("");
-
- ofono_modem_set_data(modem, NULL);
- g_at_chat_unref(chat);
}
static void cfun_set_on_cb(gboolean ok, GAtResult *result, gpointer user_data)
@@ -105,10 +80,28 @@ static void cfun_set_on_cb(gboolean ok, GAtResult *result, gpointer user_data)
/* power up hardware */
static int g1_enable(struct ofono_modem *modem)
{
- GAtChat *chat = ofono_modem_get_data(modem);
+ GAtSyntax *syntax;
+ GAtChat *chat;
+ const char *device;
DBG("");
+ device = ofono_modem_get_string(modem, "Device");
+ if (device == NULL)
+ return -EINVAL;
+
+ syntax = g_at_syntax_new_gsm_permissive();
+ chat = g_at_chat_new_from_tty(device, syntax);
+ g_at_syntax_unref(syntax);
+
+ if (chat == NULL)
+ return -EIO;
+
+ if (getenv("OFONO_AT_DEBUG") != NULL)
+ g_at_chat_set_debug(chat, g1_debug, NULL);
+
+ ofono_modem_set_data(modem, chat);
+
/* ensure modem is in a known state; verbose on, echo/quiet off */
g_at_chat_send(chat, "ATE0Q0V1", NULL, NULL, NULL, NULL);
@@ -137,6 +130,9 @@ static int g1_disable(struct ofono_modem *modem)
/* power down modem */
g_at_chat_send(chat, "AT+CFUN=0", NULL, cfun_set_off_cb, modem, NULL);
+ g_at_chat_unref(chat);
+ ofono_modem_set_data(modem, NULL);
+
return 0;
}