The PLS8 and PLAS9 modems (and likely many others modems supported by
this driver) have two AT capable serial ports: The 'MODEM' AT port
(default for PPP) and the 'APPLICATION' AT port (used for general
control).
The PLS8 modem sends URCs to the APPLICATION port by default, while he
PLAS9 defaults sending URCs to the MODEM port. To get URCs to behave
on both modems, it is necessary to explicitly set the URC reporting
port to APPLICATION.
There was a limitation in the past in the plugin, because one of the steps
during the dial (CONNECT_3GPP_CONTEXT_STEP_PDP_CTX) was to reconfigure a
specific CID hardcoding the IP type to IPv4.
That logic was removed in commit af2d6c1c4b,
but we didn't remove the IPv4 limitation at that point.
some ITM family modems require full parameters:
AT^SGAUTH=cid,type,user,pwd
even when type is AUTH_NONE.
Fortunately, all modules of the IMT family tolerate this syntax,
so it can be adopted for the entire family.
the AT^SCFG="Radio/Band" command does not return a different answer
for different charsets.
This code was working previously because the charset was left to default (GSM)
at the time of this operation, and therefore the string was unchanged anyway.
CHAP is almost universal nowadays, and so it is a better default
than PAP
Not changed for uBlox, that prefers an error if not specified,
and for Huawei, which uses NONE with user/pwd and has 2 CHAP choices
The ELS61 doesn't like authentication given without quotes:
[modem3/ttyACM1/at] --> 'AT^SGAUTH=8,1,tm,t-mobile<CR>'
[modem3/ttyACM1/at] <-- '<CR><LF>+CME ERROR: 4<CR><LF>'
Only when user/pass strings are quoted it works:
[modem6/ttyACM1/at] --> 'AT^SGAUTH=8,1,"t-mobile","tm"<CR>'
[modem6/ttyACM1/at] <-- '<CR><LF>OK<CR><LF>'
It's critical not to timeout early on devices with AT ports, or we may
end up flagging the modem as invalid.
ModemManager[26829]: <debug> [1593097973.552712] [modem1/ttyACM0/at] --> 'AT^SWWAN=1,2,1<CR>'
....
ModemManager[26829]: <debug> [1593098064.195217] [modem1] couldn't connect bearer: Serial command timed out
....
ModemManager[26829]: <error> [1593098091.167987] [modem1] port ttyACM0 timed out 10 consecutive times, marking modem as invalid
Extended the ModemManager Signal interface to include 5G signal
information for RSRP, RSRQ and SINR via libqmi. Also extended mmci
to print 5G signal info.
We can safely cast the data in a GArray to gpointer first, and then
to the pointer type we require.
cinterion/tests/test-modem-helpers-cinterion.c: In function 'common_test_scfg':
cinterion/tests/test-modem-helpers-cinterion.c:56:56: error: cast increases required alignment of target type [-Werror=cast-align]
expected_bands_str = mm_common_build_bands_string ((const MMModemBand *)expected_bands->data,
^
cinterion/tests/test-modem-helpers-cinterion.c:58:47: error: cast increases required alignment of target type [-Werror=cast-align]
bands_str = mm_common_build_bands_string ((const MMModemBand *)bands->data,
^
cinterion/tests/test-modem-helpers-cinterion.c: In function 'common_test_scfg_response':
cinterion/tests/test-modem-helpers-cinterion.c:209:56: error: cast increases required alignment of target type [-Werror=cast-align]
expected_bands_str = mm_common_build_bands_string ((const MMModemBand *)expected_bands->data,
^
cinterion/tests/test-modem-helpers-cinterion.c:211:47: error: cast increases required alignment of target type [-Werror=cast-align]
bands_str = mm_common_build_bands_string ((const MMModemBand *)bands->data,
^
We can safely cast the data in a GArray to gpointer first, and then
to the pointer type we require.
cinterion/mm-modem-helpers-cinterion.c: In function 'mm_cinterion_build_band':
cinterion/mm-modem-helpers-cinterion.c:409:54: error: cast increases required alignment of target type [-Werror=cast-align]
bands_string = mm_common_build_bands_string ((MMModemBand *)bands->data, bands->len);
^
Not all Cinterion modems support AT+CESQ.
However a much larger group of them support AT^SMONI
This commit uses the latter instead of the default former.
cinterion/mm-broadband-bearer-cinterion.c: In function ‘dial_3gpp_context_step’:
cinterion/mm-broadband-bearer-cinterion.c:393:18: error: this statement may fall through [-Werror=implicit-fallthrough=]
393 | ctx->step++;
| ~~~~~~~~~^~
cinterion/mm-broadband-bearer-cinterion.c:396:5: note: here
396 | case DIAL_3GPP_CONTEXT_STEP_AUTH: {
| ^~~~
cinterion/mm-broadband-bearer-cinterion.c:419:18: error: this statement may fall through [-Werror=implicit-fallthrough=]
419 | ctx->step++;
| ~~~~~~~~~^~
cinterion/mm-broadband-bearer-cinterion.c:422:5: note: here
422 | case DIAL_3GPP_CONTEXT_STEP_START_SWWAN: {
| ^~~~
cinterion/mm-broadband-bearer-cinterion.c: In function ‘disconnect_3gpp_context_step’:
cinterion/mm-broadband-bearer-cinterion.c:613:18: error: this statement may fall through [-Werror=implicit-fallthrough=]
613 | ctx->step++;
| ~~~~~~~~~^~
cinterion/mm-broadband-bearer-cinterion.c:615:5: note: here
615 | case DISCONNECT_3GPP_CONTEXT_STEP_STOP_SWWAN: {
| ^~~~
cinterion/mm-broadband-modem-cinterion.c: In function ‘common_create_bearer’:
cinterion/mm-broadband-modem-cinterion.c:1699:5: error: enumeration value ‘FEATURE_SUPPORT_UNKNOWN’ not handled in switch [-Werror=switch-enum]
1699 | switch (self->priv->swwan_support) {
| ^~~~~~
...
cinterion/mm-shared-cinterion.c: In function ‘disable_location_gathering_context_gps_step’:
cinterion/mm-shared-cinterion.c:414:22: error: this statement may fall through [-Werror=implicit-fallthrough=]
414 | ctx->gps_step++;
| ~~~~~~~~~~~~~^~
cinterion/mm-shared-cinterion.c:417:5: note: here
417 | case DISABLE_LOCATION_GATHERING_GPS_STEP_SGPSS:
| ^~~~
If the modem requires +COPS re-registration after setting modes,
use the common logic provided by the 3GPP interface, which
already knows e.g. whether the registration was automatic or the
actual requested operator id in case of being manual.