diff options
Diffstat (limited to 'plugins/nokia.c')
-rw-r--r-- | plugins/nokia.c | 60 |
1 files changed, 20 insertions, 40 deletions
diff --git a/plugins/nokia.c b/plugins/nokia.c index 6f857943..889f28ef 100644 --- a/plugins/nokia.c +++ b/plugins/nokia.c @@ -51,8 +51,6 @@ static const char *none_prefix[] = { NULL }; struct nokia_data { GAtChat *modem; GAtChat *control; - struct ofono_gprs *gprs; - struct ofono_gprs_context *gc; }; static int nokia_probe(struct ofono_modem *modem) @@ -78,9 +76,6 @@ static void nokia_remove(struct ofono_modem *modem) ofono_modem_set_data(modem, NULL); - g_at_chat_unref(data->modem); - g_at_chat_unref(data->control); - g_free(data); } @@ -123,39 +118,20 @@ static GAtChat *open_device(struct ofono_modem *modem, return chat; } -static void nokia_disconnect(gpointer user_data) +static void cfun_enable(gboolean ok, GAtResult *result, gpointer user_data) { struct ofono_modem *modem = user_data; struct nokia_data *data = ofono_modem_get_data(modem); DBG(""); - if (data->gc) - ofono_gprs_context_remove(data->gc); - - g_at_chat_unref(data->modem); - data->modem = NULL; - - data->modem = open_device(modem, "Modem", "Modem: "); - if (data->modem == NULL) - return; - - g_at_chat_set_disconnect_function(data->modem, - nokia_disconnect, modem); - - ofono_info("Reopened GPRS context channel"); - - data->gc = ofono_gprs_context_create(modem, 0, "atmodem", data->modem); - - if (data->gprs && data->gc) - ofono_gprs_add_context(data->gprs, data->gc); -} - -static void cfun_enable(gboolean ok, GAtResult *result, gpointer user_data) -{ - struct ofono_modem *modem = user_data; + if (!ok) { + g_at_chat_unref(data->modem); + data->modem = NULL; - DBG(""); + g_at_chat_unref(data->control); + data->control = NULL; + } ofono_modem_set_powered(modem, ok); } @@ -170,9 +146,6 @@ static int nokia_enable(struct ofono_modem *modem) if (data->modem == NULL) return -EINVAL; - g_at_chat_set_disconnect_function(data->modem, - nokia_disconnect, modem); - data->control = open_device(modem, "Control", "Control: "); if (data->control == NULL) { g_at_chat_unref(data->modem); @@ -180,7 +153,10 @@ static int nokia_enable(struct ofono_modem *modem) return -EIO; } - g_at_chat_send(data->control, "ATE0 +CMEE=1", none_prefix, + g_at_chat_send(data->modem, "ATE0 &C0 +CMEE=1", NULL, + NULL, NULL, NULL); + + g_at_chat_send(data->control, "ATE0 &C0 +CMEE=1", NULL, NULL, NULL, NULL); g_at_chat_send(data->control, "AT+CFUN=1", none_prefix, @@ -196,6 +172,9 @@ static void cfun_disable(gboolean ok, GAtResult *result, gpointer user_data) DBG(""); + g_at_chat_unref(data->modem); + data->modem = NULL; + g_at_chat_unref(data->control); data->control = NULL; @@ -244,6 +223,8 @@ static void nokia_pre_sim(struct ofono_modem *modem) static void nokia_post_sim(struct ofono_modem *modem) { struct nokia_data *data = ofono_modem_get_data(modem); + struct ofono_gprs *gprs; + struct ofono_gprs_context *gc; DBG("%p", modem); @@ -256,13 +237,12 @@ static void nokia_post_sim(struct ofono_modem *modem) "atmodem", data->control); ofono_phonebook_create(modem, 0, "atmodem", data->control); - data->gprs = ofono_gprs_create(modem, OFONO_VENDOR_NOKIA, + gprs = ofono_gprs_create(modem, OFONO_VENDOR_NOKIA, "atmodem", data->control); + gc = ofono_gprs_context_create(modem, 0, "atmodem", data->modem); - data->gc = ofono_gprs_context_create(modem, 0, "atmodem", data->modem); - - if (data->gprs && data->gc) - ofono_gprs_add_context(data->gprs, data->gc); + if (gprs && gc) + ofono_gprs_add_context(gprs, gc); } static struct ofono_modem_driver nokia_driver = { |