From 1f9f161e0b66fee9c0dd84ff77c51ea6645367cd Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Thu, 24 May 2012 03:28:50 +0200 Subject: [PATCH] =?UTF-8?q?atmodem:=20Fix=20issue=20with=20AT+CREG=3D=3F?= =?UTF-8?q?=20and=20AT+CGREG=3D=3F=20handling?= Some modems might see an interim +CREG: or +CGREG: notification when querying the supported modes. Aux: > AT+CFUN=1\r Aux: < \r\nOK\r\n Aux: > AT+CREG=?\r Aux: < \r\n+CREG: 2\r\n Aux: < \r\n+CREG: (0-2)\r\nOK\r\n Unable to initialize Network Registration To make this work, skip to the first line with an actual range value. --- drivers/atmodem/gprs.c | 3 ++- drivers/atmodem/network-registration.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/atmodem/gprs.c b/drivers/atmodem/gprs.c index 5f1d6100..65a8b7b9 100644 --- a/drivers/atmodem/gprs.c +++ b/drivers/atmodem/gprs.c @@ -318,11 +318,12 @@ static void at_cgreg_test_cb(gboolean ok, GAtResult *result, g_at_result_iter_init(&iter, result); +retry: if (!g_at_result_iter_next(&iter, "+CGREG:")) goto error; if (!g_at_result_iter_open_list(&iter)) - goto error; + goto retry; while (g_at_result_iter_next_range(&iter, &range[0], &range[1])) { if (1 >= range[0] && 1 <= range[1]) diff --git a/drivers/atmodem/network-registration.c b/drivers/atmodem/network-registration.c index 770c1666..a42ae504 100644 --- a/drivers/atmodem/network-registration.c +++ b/drivers/atmodem/network-registration.c @@ -1556,11 +1556,12 @@ static void at_creg_test_cb(gboolean ok, GAtResult *result, gpointer user_data) g_at_result_iter_init(&iter, result); +retry: if (!g_at_result_iter_next(&iter, "+CREG:")) goto error; if (!g_at_result_iter_open_list(&iter)) - goto error; + goto retry; while (g_at_result_iter_next_range(&iter, &range[0], &range[1])) { if (1 >= range[0] && 1 <= range[1])