From 0af7ded84580a4aff4e1e9f2fc878561aa866048 Mon Sep 17 00:00:00 2001 From: Dragos Tatulea Date: Fri, 18 Mar 2016 12:58:54 +0100 Subject: [PATCH] ubloxmodem: support automatic ctx activation ... by imlementing read_settings. --- drivers/ubloxmodem/gprs-context.c | 32 +++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/drivers/ubloxmodem/gprs-context.c b/drivers/ubloxmodem/gprs-context.c index 63f6ac20..23c27aa4 100644 --- a/drivers/ubloxmodem/gprs-context.c +++ b/drivers/ubloxmodem/gprs-context.c @@ -35,6 +35,7 @@ #include #include #include +#include #include "gatchat.h" #include "gatresult.h" @@ -181,6 +182,21 @@ static void ublox_read_settings(struct ofono_gprs_context *gc) CALLBACK_WITH_FAILURE(gcd->cb, gcd->cb_data); } +static void ublox_gprs_read_settings(struct ofono_gprs_context *gc, + unsigned int cid, + ofono_gprs_context_cb_t cb, void *data) +{ + struct gprs_context_data *gcd = ofono_gprs_context_get_data(gc); + + DBG("cid %u", cid); + + gcd->active_context = cid; + gcd->cb = cb; + gcd->cb_data = data; + + ublox_read_settings(gc); +} + static void cgact_enable_cb(gboolean ok, GAtResult *result, gpointer user_data) { struct ofono_gprs_context *gc = user_data; @@ -379,16 +395,11 @@ static void cgev_notify(GAtResult *result, gpointer user_data) if (!g_at_result_iter_next_unquoted_string(&iter, &event)) return; - if (g_str_has_prefix(event, "NW PDN DEACT")) { - if (!g_at_result_iter_skip_next(&iter)) - return; - } else if (g_str_has_prefix(event, "NW DEACT") == FALSE) - return; - - if (!g_at_result_iter_skip_next(&iter)) - return; - - if (!g_at_result_iter_next_number(&iter, &cid)) + if (g_str_has_prefix(event, "NW PDN DEACT")) + sscanf(event, "%*s %*s %*s %u", &cid); + else if (g_str_has_prefix(event, "NW DEACT")) + sscanf(event, "%*s %*s %u", &cid); + else return; DBG("cid %d", cid); @@ -440,6 +451,7 @@ static struct ofono_gprs_context_driver driver = { .remove = ublox_gprs_context_remove, .activate_primary = ublox_gprs_activate_primary, .deactivate_primary = ublox_gprs_deactivate_primary, + .read_settings = ublox_gprs_read_settings, }; void ublox_gprs_context_init(void)