diff --git a/plugins/nokia.c b/plugins/nokia.c index 4ff16813..b7db2cc9 100644 --- a/plugins/nokia.c +++ b/plugins/nokia.c @@ -39,6 +39,8 @@ #include #include #include +#include +#include #include #include @@ -49,6 +51,8 @@ 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) @@ -120,7 +124,29 @@ static GAtChat *open_device(struct ofono_modem *modem, static void nokia_disconnect(gpointer user_data) { + struct ofono_modem *modem = user_data; + struct nokia_data *data = ofono_modem_get_data(modem); + DBG(""); + + 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) + 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) @@ -227,6 +253,14 @@ static void nokia_post_sim(struct ofono_modem *modem) ofono_ussd_create(modem, OFONO_VENDOR_QUALCOMM_MSM, "atmodem", data->control); ofono_phonebook_create(modem, 0, "atmodem", data->control); + + data->gprs = ofono_gprs_create(modem, OFONO_VENDOR_NOKIA, + "atmodem", data->control); + + 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 struct ofono_modem_driver nokia_driver = {