Unexpected COPS format
Aleksander Morgado
aleksander at aleksander.es
Tue Mar 21 09:13:27 UTC 2017
Hey Colin,
On Mon, Mar 20, 2017 at 9:17 AM, Colin Helliwell
<colin.helliwell at ln-systems.com> wrote:
>
>> On 17 March 2017 at 19:56 Aleksander Morgado <aleksander at aleksander.es> wrote:
>>
>> On Fri, Mar 17, 2017 at 6:40 PM, Dan Williams <dcbw at redhat.com> wrote:
>>
>> > I ended up with something like:
>> >
>> > void
>> > mm_3gpp_normalize_operator_id (gchar **id,
>> > MMModemCharset cur_charset)
>> > {
>> > g_assert (id);
>> >
>> > /* Some modems return the operator name as a hexadecimal string of the
>> >
>> > * bytes of the operator name as encoded by the current character set.
>> > */
>> >
>> > if (*id && !mm_3gpp_parse_operator_id (id, NULL, NULL, NULL)) {
>> > *id = mm_charset_take_and_convert_to_utf8 (*id, cur_charset);
>> > if (!mm_3gpp_parse_operator_id (id, NULL, NULL, NULL))
>> > g_clear_pointer (id, g_free);
>> > }
>> > }
>> >
>> > but didn't get as far as writing testcases for it in src/tests/test-
>> > modem-helpers.c. Testcases would be great, obviously.
>>
>> This would be very similar to mm_3gpp_normalize_operator_name()
>> already; maybe we could just have a single method for both?
>>
>
> Happy to submit the patch below. Unsure about a testcase - I'm cross-building for a different target and haven't looked at building native and running tests. If it helps, the modem is giving
> '+COPS: 0,2,"00320033003400310030",2'
> for '23410'
>
Any chance you can provide the patch in a way I can just "git am" it?
i.e. "git send-email" or "git format-patch"
>
>> Colin, what's the AT+CSCS? return value that you're getting before any
>> of this happens? Are you getting it reported as UCS2?
>>
>
> The CSCS exchanges are:
> --> 'AT+CSCS=?<CR>'
> <-- '<CR><LF>+CSCS: ("GSM","UCS2")<CR><LF>'
> <-- '<CR><LF>OK<CR><LF>'
> --> 'AT+CSCS="UCS2"<CR>'
> <-- '<CR><LF>OK<CR><LF>'
> --> 'AT+CSCS?<CR>'
> <-- '<CR><LF>+CSCS: "UCS2"<CR><LF>'
> <-- '<CR><LF>OK<CR><LF>'
>
>
> diff -Nur a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c
> --- a/src/mm-broadband-modem.c 2017-03-20 06:36:45.210171801 +0000
> +++ b/src/mm-broadband-modem.c 2017-03-20 07:12:16.865399207 +0000
> @@ -3484,7 +3484,9 @@
> error))
> return NULL;
>
> - mm_dbg ("loaded Operator Code: %s", operator_code);
> + mm_3gpp_normalize_operator_string (&operator_code, MM_BROADBAND_MODEM (self)->priv->modem_current_charset);
> + if (operator_code)
> + mm_dbg ("loaded Operator Code: %s", operator_code);
> return operator_code;
> }
>
> @@ -3525,7 +3527,7 @@
> error))
> return NULL;
>
> - mm_3gpp_normalize_operator_name (&operator_name, MM_BROADBAND_MODEM (self)->priv->modem_current_charset);
> + mm_3gpp_normalize_operator_string (&operator_name, MM_BROADBAND_MODEM (self)->priv->modem_current_charset);
> if (operator_name)
> mm_dbg ("loaded Operator Name: %s", operator_name);
> return operator_name;
> diff -Nur a/src/mm-modem-helpers.c b/src/mm-modem-helpers.c
> --- a/src/mm-modem-helpers.c 2017-03-20 06:36:44.890171799 +0000
> +++ b/src/mm-modem-helpers.c 2017-03-20 08:00:34.426196108 +0000
> @@ -2980,12 +2980,12 @@
> /*************************************************************************/
>
> void
> -mm_3gpp_normalize_operator_name (gchar **operator,
> - MMModemCharset cur_charset)
> +mm_3gpp_normalize_operator_string (gchar **operator_string,
> + MMModemCharset cur_charset)
> {
> - g_assert (operator);
> + g_assert (operator_string);
>
> - if (*operator == NULL)
> + if (*operator_string == NULL)
> return;
>
> /* Some modems (Option & HSO) return the operator name as a hexadecimal
> @@ -2994,19 +2994,19 @@
> */
> if (cur_charset == MM_MODEM_CHARSET_UCS2) {
> /* In this case we're already checking UTF-8 validity */
> - *operator = mm_charset_take_and_convert_to_utf8 (*operator, MM_MODEM_CHARSET_UCS2);
> + *operator_string = mm_charset_take_and_convert_to_utf8 (*operator_string, MM_MODEM_CHARSET_UCS2);
> }
> /* Ensure the operator name is valid UTF-8 so that we can send it
> * through D-Bus and such.
> */
> - else if (!g_utf8_validate (*operator, -1, NULL))
> - g_clear_pointer (operator, g_free);
> + else if (!g_utf8_validate (*operator_string, -1, NULL))
> + g_clear_pointer (operator_string, g_free);
>
> /* Some modems (Novatel LTE) return the operator name as "Unknown" when
> * it fails to obtain the operator name. Return NULL in such case.
> */
> - if (*operator && g_ascii_strcasecmp (*operator, "unknown") == 0)
> - g_clear_pointer (operator, g_free);
> + if (*operator_string && g_ascii_strcasecmp (*operator_string, "unknown") == 0)
> + g_clear_pointer (operator_string, g_free);
> }
>
> /*************************************************************************/
> diff -Nur a/src/mm-modem-helpers.h b/src/mm-modem-helpers.h
> --- a/src/mm-modem-helpers.h 2017-03-20 06:36:44.890171799 +0000
> +++ b/src/mm-modem-helpers.h 2017-03-20 08:01:06.514196263 +0000
> @@ -291,8 +291,8 @@
>
> MMModemAccessTechnology mm_string_to_access_tech (const gchar *string);
>
> -void mm_3gpp_normalize_operator_name (gchar **operator,
> - MMModemCharset cur_charset);
> +void mm_3gpp_normalize_operator_string (gchar **operator_string,
> + MMModemCharset cur_charset);
>
> gboolean mm_3gpp_parse_operator_id (const gchar *operator_id,
> guint16 *mcc,
> _______________________________________________
> ModemManager-devel mailing list
> ModemManager-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/modemmanager-devel
--
Aleksander
https://aleksander.es
More information about the ModemManager-devel
mailing list