diff options
author | Denis Kenzior <denkenz@gmail.com> | 2010-03-28 23:58:37 -0500 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2010-03-28 23:58:37 -0500 |
commit | 5780fdb51f0ae3db67aa322e09ec315e69bb53a9 (patch) | |
tree | aa310203c30bae5dd1f23953d9a98124e2b6d198 | |
parent | 21dd4f040a040254a9ac1ece8e3ba0b7d47f57d4 (diff) | |
download | ofono-5780fdb51f0ae3db67aa322e09ec315e69bb53a9.tar.bz2 |
Fix: Handle 2 and 3 argument versions of ERINFO
-rw-r--r-- | drivers/atmodem/network-registration.c | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/drivers/atmodem/network-registration.c b/drivers/atmodem/network-registration.c index 94ca2514..addde7b6 100644 --- a/drivers/atmodem/network-registration.c +++ b/drivers/atmodem/network-registration.c @@ -104,6 +104,14 @@ static void at_registration_status(struct ofono_netreg *netreg, cbd->user = nd; + /* + * Send *ERINFO to find out the current tech, it will be intercepted + * in mbm_erinfo_notify + */ + if (nd->vendor == OFONO_VENDOR_MBM) + g_at_chat_send(nd->chat, "AT*ERINFO?", none_prefix, + NULL, NULL, NULL); + if (g_at_chat_send(nd->chat, "AT+CREG?", creg_prefix, at_creg_cb, cbd, g_free) > 0) return; @@ -698,9 +706,21 @@ static void mbm_erinfo_notify(GAtResult *result, gpointer user_data) if (g_at_result_iter_next(&iter, "*ERINFO:") == FALSE) return; - g_at_result_iter_next_number(&iter, &mode); - g_at_result_iter_next_number(&iter, &gsm); - g_at_result_iter_next_number(&iter, &umts); + if (g_at_result_iter_next_number(&iter, &mode) == FALSE) + return; + + if (g_at_result_iter_next_number(&iter, &gsm) == FALSE) + return; + + /* + * According to MBM the ERINFO unsolicited response does not contain + * the mode parameter, however at least the MD300 does report it. So + * we handle both 2 and 3 argument versions + */ + if (g_at_result_iter_next_number(&iter, &umts) == FALSE) { + gsm = mode; + umts = gsm; + } ofono_info("network capability: GSM %d UMTS %d", gsm, umts); } |