diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2011-06-07 13:22:48 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-02-17 13:25:02 +0100 |
commit | 26d69ca0f26405743de08cf9ed36aa9f28a8c647 (patch) | |
tree | a97498a646163fdc2553792f46ceb6e60429d2c5 | |
parent | 4ed33918593b7c902d70e55f65c1442e6fec9589 (diff) |
gsm: allow leading zeroes in numbers in CREG/CGREG responses
-rw-r--r-- | src/mm-modem-helpers.c | 18 | ||||
-rw-r--r-- | src/tests/test-modem-helpers.c | 21 |
2 files changed, 29 insertions, 10 deletions
diff --git a/src/mm-modem-helpers.c b/src/mm-modem-helpers.c index b0355931..1feebc9e 100644 --- a/src/mm-modem-helpers.c +++ b/src/mm-modem-helpers.c @@ -223,27 +223,27 @@ mm_gsm_destroy_scan_data (gpointer data) /*************************************************************************/ -/* +CREG: <stat> (GSM 07.07 CREG=1 unsolicited) */ -#define CREG1 "\\+(CREG|CGREG):\\s*(\\d{1})" +/* +CREG: <stat> (GSM 07.07 CREG=1 unsolicited) */ +#define CREG1 "\\+(CREG|CGREG):\\s*0*([0-9])" -/* +CREG: <n>,<stat> (GSM 07.07 CREG=1 solicited) */ -#define CREG2 "\\+(CREG|CGREG):\\s*(\\d{1}),\\s*(\\d{1})" +/* +CREG: <n>,<stat> (GSM 07.07 CREG=1 solicited) */ +#define CREG2 "\\+(CREG|CGREG):\\s*0*([0-9]),\\s*0*([0-9])" /* +CREG: <stat>,<lac>,<ci> (GSM 07.07 CREG=2 unsolicited) */ -#define CREG3 "\\+(CREG|CGREG):\\s*(\\d{1}),\\s*([^,\\s]*)\\s*,\\s*([^,\\s]*)" +#define CREG3 "\\+(CREG|CGREG):\\s*0*([0-9]),\\s*([^,\\s]*)\\s*,\\s*([^,\\s]*)" /* +CREG: <n>,<stat>,<lac>,<ci> (GSM 07.07 solicited and some CREG=2 unsolicited) */ -#define CREG4 "\\+(CREG|CGREG):\\s*(\\d{1}),\\s*(\\d{1})\\s*,\\s*([^,]*)\\s*,\\s*([^,\\s]*)" +#define CREG4 "\\+(CREG|CGREG):\\s*0*([0-9]),\\s*0*([0-9])\\s*,\\s*([^,]*)\\s*,\\s*([^,\\s]*)" /* +CREG: <stat>,<lac>,<ci>,<AcT> (ETSI 27.007 CREG=2 unsolicited) */ -#define CREG5 "\\+(CREG|CGREG):\\s*(\\d{1})\\s*,\\s*([^,\\s]*)\\s*,\\s*([^,\\s]*)\\s*,\\s*(\\d{1,2})" +#define CREG5 "\\+(CREG|CGREG):\\s*0*([0-9])\\s*,\\s*([^,\\s]*)\\s*,\\s*([^,\\s]*)\\s*,\\s*0*([0-9])" /* +CREG: <n>,<stat>,<lac>,<ci>,<AcT> (ETSI 27.007 solicited and some CREG=2 unsolicited) */ -#define CREG6 "\\+(CREG|CGREG):\\s*(\\d{1}),\\s*(\\d{1})\\s*,\\s*([^,\\s]*)\\s*,\\s*([^,\\s]*)\\s*,\\s*(\\d{1,2})" +#define CREG6 "\\+(CREG|CGREG):\\s*0*([0-9]),\\s*0*([0-9])\\s*,\\s*([^,\\s]*)\\s*,\\s*([^,\\s]*)\\s*,\\s*0*([0-9])" /* +CREG: <n>,<stat>,<lac>,<ci>,<AcT?>,<something> (Samsung Wave S8500) */ /* '<CR><LF>+CREG: 2,1,000B,2816, B, C2816<CR><LF><CR><LF>OK<CR><LF>' */ -#define CREG7 "\\+(CREG|CGREG):\\s*(\\d{1}),\\s*(\\d{1})\\s*,\\s*([^,\\s]*)\\s*,\\s*([^,\\s]*)\\s*,\\s*([^,\\s]*)\\s*,\\s*[^,\\s]*" +#define CREG7 "\\+(CREG|CGREG):\\s*0*([0-9]),\\s*0*([0-9])\\s*,\\s*([^,\\s]*)\\s*,\\s*([^,\\s]*)\\s*,\\s*([^,\\s]*)\\s*,\\s*[^,\\s]*" /* +CREG: <stat>,<lac>,<ci>,<AcT>,<RAC> (ETSI 27.007 v9.20 CREG=2 unsolicited with RAC) */ #define CREG8 "\\+(CREG|CGREG):\\s*(\\d{1})\\s*,\\s*([^,\\s]*)\\s*,\\s*([^,\\s]*)\\s*,\\s*(\\d{1,2})\\s*,\\s*([^,\\s]*)" diff --git a/src/tests/test-modem-helpers.c b/src/tests/test-modem-helpers.c index 3b8e2e24..bf1d00ef 100644 --- a/src/tests/test-modem-helpers.c +++ b/src/tests/test-modem-helpers.c @@ -501,6 +501,7 @@ test_creg_match (const char *test, GRegex *r = g_ptr_array_index (array, i); if (g_regex_match (r, reply, 0, &info)) { + g_print (" matched with %d\n", i); regex_num = i + 1; break; } @@ -508,6 +509,10 @@ test_creg_match (const char *test, info = NULL; } + g_print (" regex_num (%u) == result->regex_num (%u)\n", + regex_num, + result->regex_num); + g_assert (info != NULL); g_assert (regex_num == result->regex_num); @@ -517,6 +522,9 @@ test_creg_match (const char *test, g_assert (state == result->state); g_assert (lac == result->lac); g_assert (ci == result->ci); + + g_print (" access_tech (%d) == result->act (%d)\n", + access_tech, result->act); g_assert (access_tech == result->act); g_assert (cgreg == result->cgreg); } @@ -633,6 +641,16 @@ test_creg2_xu870_unsolicited_unregistered (void *f, gpointer d) } static void +test_creg2_iridium_solicited (void *f, gpointer d) +{ + TestData *data = (TestData *) d; + const char *reply = "+CREG:002,001,\"18d8\",\"ffff\""; + const CregResult result = { 1, 0x18D8, 0xFFFF, -1 , 4, FALSE}; + + test_creg_match ("Iridium, CREG=2", TRUE, reply, data, &result); +} + +static void test_cgreg1_solicited (void *f, gpointer d) { TestData *data = (TestData *) d; @@ -1256,7 +1274,7 @@ int main (int argc, char **argv) g_test_suite_add (suite, TESTCASE (test_cops_response_gobi, NULL)); g_test_suite_add (suite, TESTCASE (test_cops_response_sek600i, NULL)); - g_test_suite_add (suite, TESTCASE (test_cops_response_gsm_invalid, NULL)); + g_test_suite_add (suite, TESTCASE (test_cops_response_gsm_invalid, NULL)); g_test_suite_add (suite, TESTCASE (test_cops_response_umts_invalid, NULL)); g_test_suite_add (suite, TESTCASE (test_creg1_solicited, data)); @@ -1273,6 +1291,7 @@ int main (int argc, char **argv) g_test_suite_add (suite, TESTCASE (test_creg2_md400_unsolicited, data)); g_test_suite_add (suite, TESTCASE (test_creg2_s8500_wave_unsolicited, data)); g_test_suite_add (suite, TESTCASE (test_creg2_gobi_weird_solicited, data)); + g_test_suite_add (suite, TESTCASE (test_creg2_iridium_solicited, data)); g_test_suite_add (suite, TESTCASE (test_cgreg1_solicited, data)); g_test_suite_add (suite, TESTCASE (test_cgreg1_unsolicited, data)); |