summaryrefslogtreecommitdiffstats
path: root/plugins/nokia.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/nokia.c')
-rw-r--r--plugins/nokia.c60
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 = {