aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2011-06-07 13:22:48 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-02-17 13:25:02 +0100
commit26d69ca0f26405743de08cf9ed36aa9f28a8c647 (patch)
treea97498a646163fdc2553792f46ceb6e60429d2c5 /src
parent4ed33918593b7c902d70e55f65c1442e6fec9589 (diff)
gsm: allow leading zeroes in numbers in CREG/CGREG responses
Diffstat (limited to 'src')
-rw-r--r--src/mm-modem-helpers.c18
-rw-r--r--src/tests/test-modem-helpers.c21
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));