2017-06-16 15:56 GMT+02:00 Aleksander Morgado <aleksan...@aleksander.es>: > On 16/06/17 14:57, Daniele Palmas wrote: >> Telit LTE modems could reply to +WS46=? with: >> >> +WS46: (12,22,25,28-31) >> >> This patch extends +WS46=? response parser to support ranges. >> --- >> v2: used mm_parse_uint_list as suggested by Aleksander > > > Pushed to git master and mm-1-6. I realized late that mm-1-6 didn't have the > mm_parse_uint_list() method yet, but I cherry-picked that one on top of your > patch, so now mm-1-6 also builds correctly... sorry for that mixup.
Thanks! I'll send shortly another patch that depends on this one to properly work with Telit LTE modems. Regards, Daniele > >> --- >> src/mm-modem-helpers.c | 25 ++++++++++++------------- >> src/tests/test-modem-helpers.c | 32 ++++++++++++++++++++++++++++++++ >> 2 files changed, 44 insertions(+), 13 deletions(-) >> >> diff --git a/src/mm-modem-helpers.c b/src/mm-modem-helpers.c >> index 73822e1..5e257a8 100644 >> --- a/src/mm-modem-helpers.c >> +++ b/src/mm-modem-helpers.c >> @@ -887,12 +887,14 @@ mm_3gpp_parse_ws46_test_response (const gchar >> *response, >> GError **error) >> { >> GArray *modes = NULL; >> + GArray *tech_values = NULL; >> GRegex *r; >> GError *inner_error = NULL; >> GMatchInfo *match_info = NULL; >> gchar *full_list = NULL; >> - gchar **split; >> + guint val; >> guint i; >> + guint j; >> gboolean supported_4g = FALSE; >> gboolean supported_3g = FALSE; >> gboolean supported_2g = FALSE; >> @@ -914,17 +916,13 @@ mm_3gpp_parse_ws46_test_response (const gchar >> *response, >> goto out; >> } >> >> - split = g_strsplit (full_list, ",", -1); >> + if (!(tech_values = mm_parse_uint_list (full_list, &inner_error))) >> + goto out; >> + >> modes = g_array_new (FALSE, FALSE, sizeof (MMModemMode)); >> >> - for (i = 0; split && split[i]; i++) { >> - guint val; >> - guint j; >> - >> - if (!mm_get_uint_from_str (split[i], &val)) { >> - g_warning ("Invalid +WS46 mode reported: %s", split[i]); >> - continue; >> - } >> + for (i = 0; i < tech_values->len; i++) { >> + val = g_array_index (tech_values, guint, i); >> >> for (j = 0; j < G_N_ELEMENTS (ws46_modes); j++) { >> if (ws46_modes[j].ws46 == val) { >> @@ -942,11 +940,9 @@ mm_3gpp_parse_ws46_test_response (const gchar >> *response, >> } >> >> if (j == G_N_ELEMENTS (ws46_modes)) >> - g_warning ("Unknown +WS46 mode reported: %s", split[i]); >> + g_warning ("Unknown +WS46 mode reported: %u", val); >> } >> >> - g_strfreev (split); >> - >> if (modes->len == 0) { >> inner_error = g_error_new (MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "No >> valid modes reported"); >> g_clear_pointer (&modes, g_array_unref); >> @@ -976,6 +972,9 @@ mm_3gpp_parse_ws46_test_response (const gchar *response, >> } >> >> out: >> + if (tech_values) >> + g_array_unref (tech_values); >> + >> g_free (full_list); >> >> g_clear_pointer (&match_info, g_match_info_free); >> diff --git a/src/tests/test-modem-helpers.c b/src/tests/test-modem-helpers.c >> index 5928412..5fdded4 100644 >> --- a/src/tests/test-modem-helpers.c >> +++ b/src/tests/test-modem-helpers.c >> @@ -215,6 +215,36 @@ test_ws46_response_telit_le866 (void) >> test_ws46_response (str, expected, G_N_ELEMENTS (expected)); >> } >> >> +static void >> +test_ws46_response_range_1 (void) >> +{ >> + static const MMModemMode expected[] = { >> + MM_MODEM_MODE_2G | MM_MODEM_MODE_3G, >> + MM_MODEM_MODE_2G | MM_MODEM_MODE_4G, >> + MM_MODEM_MODE_3G | MM_MODEM_MODE_4G, >> + }; >> + const gchar *str = "+WS46: (29-31)"; >> + >> + test_ws46_response (str, expected, G_N_ELEMENTS (expected)); >> +} >> + >> +static void >> +test_ws46_response_range_2 (void) >> +{ >> + static const MMModemMode expected[] = { >> + MM_MODEM_MODE_2G, >> + MM_MODEM_MODE_3G, >> + MM_MODEM_MODE_2G | MM_MODEM_MODE_3G | MM_MODEM_MODE_4G, >> + MM_MODEM_MODE_4G, >> + MM_MODEM_MODE_2G | MM_MODEM_MODE_3G, >> + MM_MODEM_MODE_2G | MM_MODEM_MODE_4G, >> + MM_MODEM_MODE_3G | MM_MODEM_MODE_4G, >> + }; >> + const gchar *str = "+WS46: (12,22,25,28-31)"; >> + >> + test_ws46_response (str, expected, G_N_ELEMENTS (expected)); >> +} >> + >> >> /*****************************************************************************/ >> /* Test CMGL responses */ >> >> @@ -3715,6 +3745,8 @@ int main (int argc, char **argv) >> g_test_suite_add (suite, TESTCASE (test_ws46_response_generic_2g3g_v2, >> NULL)); >> g_test_suite_add (suite, TESTCASE (test_ws46_response_cinterion, NULL)); >> g_test_suite_add (suite, TESTCASE (test_ws46_response_telit_le866, >> NULL)); >> + g_test_suite_add (suite, TESTCASE (test_ws46_response_range_1, NULL)); >> + g_test_suite_add (suite, TESTCASE (test_ws46_response_range_2, NULL)); >> >> g_test_suite_add (suite, TESTCASE (test_cops_response_tm506, NULL)); >> g_test_suite_add (suite, TESTCASE (test_cops_response_gt3gplus, NULL)); >> > > > -- > Aleksander > https://aleksander.es _______________________________________________ ModemManager-devel mailing list ModemManager-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/modemmanager-devel