Huawei plugin sometimes fails to load operator code

Ben Chan benchan at chromium.org
Fri Aug 16 00:00:34 PDT 2013


I noticed that the Huawei plugin sometimes fails to load the operator
code. The issue is that the plugin doesn't register any handler for
the ^RFSWITCH unsolicited message. When an unhandled ^RFSWITCH
unsolicited message gets mixed with a +COPS response containing the
operator code, e.g. <CR><LF>^RFSWITCH: 1,1<CR><LF><CR><LF>+COPS:
0,2,"310410",2<CR><LF>, the mm_3gpp_parse_cops_test_response() fails
to extract the operator code.

It's kinda tricky to register a handler to ignore ^RFSWITCH
unsolicited messages as the solicited and unsolicited messages only
differ by an extra "OK".
    solicited: <CR><LF>^RFSWITCH: 1,1<CR><LF><CR><LF>OK<CR><LF>
    unsolicited: <CR><LF>^RFSWITCH: 1,1<CR><LF>

As AT^CURC=2 is not supported on the MU736, I can't specify an
unsolicited indication mask to filter out ^RFSWITCH.
mm_3gpp_parse_cops_test_response() could be changed to handle this
situation better, but something else may fail.  I wonder if there is a
better way to resolve this issue.

AT command is such a messy business :-/

Thanks,
Ben

###

Example log:

2013-08-15T16:04:03.867816-07:00 localhost ModemManager[23189]: <info>
 Modem /org/freedesktop/ModemManager1/Modem/0: state changed (enabling
-> enabled)

2013-08-15T16:04:06.070609-07:00 localhost ModemManager[23189]:
<debug> (ttyUSB0): <-- '<CR><LF>^RFSWITCH: 1,1<CR><LF>'

2013-08-15T16:04:06.077267-07:00 localhost ModemManager[23189]:
<debug> (ttyUSB0): <-- '<CR><LF>^MODE: 0,0<CR><LF>'
2013-08-15T16:04:06.077304-07:00 localhost ModemManager[23189]:
<debug> Access Technology: 'unknown'
2013-08-15T16:04:06.084052-07:00 localhost ModemManager[23189]:
<debug> (ttyUSB0): <-- '<CR><LF>^RSSI: 11<CR><LF>'
2013-08-15T16:04:06.084088-07:00 localhost ModemManager[23189]:
<debug> 3GPP signal quality: 35
2013-08-15T16:04:06.084658-07:00 localhost ModemManager[23189]: <info>
 Modem /org/freedesktop/ModemManager1/Modem/0: signal quality updated
(35)
2013-08-15T16:04:06.090459-07:00 localhost ModemManager[23189]:
<debug> (ttyUSB0): <-- '<CR><LF>^CSNR:-107,-16<CR><LF><CR><LF>^SRVST:
0<CR><LF>'
2013-08-15T16:04:07.530523-07:00 localhost ModemManager[23189]:
<debug> (ttyUSB0): <-- '<CR><LF>+CREG:
1,"DE7E","004985F6",6<CR><LF><CR><LF>+CGREG:
1,"DE7E","004985F6",6,"D6"<CR><LF>'
2013-08-15T16:04:07.530741-07:00 localhost ModemManager[23189]: <info>
 Modem /org/freedesktop/ModemManager1/Modem/0: 3GPP Registration state
changed (idle -> registering)
2013-08-15T16:04:07.530754-07:00 localhost ModemManager[23189]:
<debug> loading Operator Code...
2013-08-15T16:04:07.530760-07:00 localhost ModemManager[23189]:
<debug> (ttyUSB0) device open count is 2 (open)
2013-08-15T16:04:07.531072-07:00 localhost ModemManager[23189]:
<debug> (ttyUSB0): --> 'AT+COPS=3,2;+COPS?<CR>'
2013-08-15T16:04:07.555642-07:00 localhost ModemManager[23189]:
<debug> (ttyUSB0): <-- '<CR><LF>^MODE: 5,4<CR><LF>'
2013-08-15T16:04:07.555677-07:00 localhost ModemManager[23189]:
<debug> Access Technology: 'umts'
2013-08-15T16:04:07.556110-07:00 localhost ModemManager[23189]: <info>
 Modem /org/freedesktop/ModemManager1/Modem/0: access technology
changed (unknown -> umts)
2013-08-15T16:04:07.561525-07:00 localhost ModemManager[23189]:
<debug> (ttyUSB0): <-- '<CR><LF>^RSSI: 9<CR><LF>'
2013-08-15T16:04:07.561592-07:00 localhost ModemManager[23189]:
<debug> 3GPP signal quality: 29
2013-08-15T16:04:07.561757-07:00 localhost ModemManager[23189]: <info>
 Modem /org/freedesktop/ModemManager1/Modem/0: signal quality updated
(29)
2013-08-15T16:04:07.568198-07:00 localhost ModemManager[23189]:
<debug> (ttyUSB0): <-- '<CR><LF>^CSNR:-112,-16<CR><LF><CR><LF>^SRVST:
2<CR><LF>'
2013-08-15T16:04:07.575732-07:00 localhost ModemManager[23189]:
<debug> (ttyUSB0): <-- '<CR><LF>+COPS:
0,2,"310410",2<CR><LF><CR><LF>OK<CR><LF>'

2013-08-15T16:04:07.575823-07:00 localhost ModemManager[23189]:
<debug> [d'oh] mm_3gpp_parse_operator: ^RFSWITCH:
1,1#015#012#015#012+COPS: 0,2,"310410",2
2013-08-15T16:04:07.575873-07:00 localhost ModemManager[23189]:
<debug> [d'oh] operator code: (null)


More information about the ModemManager-devel mailing list