simtech/mm-broadband-modem-simtech.c: In function ‘enable_unsolicited_events_context_step’:
simtech/mm-broadband-modem-simtech.c:442:18: error: this statement may fall through [-Werror=implicit-fallthrough=]
442 | ctx->step++;
| ~~~~~~~~~^~
simtech/mm-broadband-modem-simtech.c:444:5: note: here
444 | case ENABLE_UNSOLICITED_EVENTS_STEP_LAST:
| ^~~~
Useful when clamping a unsigned integer with low threshold set to 0,
which would give us compiler warnings with -Wtype-limits when using
CLAMP(), e.g.:
via/mm-broadband-modem-via.c: In function ‘handle_evdo_quality_change’:
/usr/include/glib-2.0/glib/gmacros.h:811:63: error: comparison of unsigned expression < 0 is always false [-Werror=type-limits]
811 | #define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
| ^
via/mm-broadband-modem-via.c:284:19: note: in expansion of macro ‘CLAMP’
284 | quality = CLAMP (quality, 0, 100);
| ^~~~~
We will explicitly query for +AUTOCSQ and +CNSMOD support before
trying to enable them.
If +AUTOCSQ is supported and correctly enabled, we'll request signal
quality polling to be disabled.
If +CNSMOD is supported and correctly enabled, we'll request access
technology polling to be disabled.
The +AUTOCSQ setup enables automatic signal quality reporting via +CSQ
URCs, which unfortunately have the same format as the +CSQ command
responses.
Therefore, we need to subclass load_signal_quality() explicitly in
order to ignore those cases where the response to the +CSQ command is
received empty (already processed as a URC).
The logic to setup the generic +CIND indications in the SIM7600E seems
to end up breaking connectivity when in TTY+PPP mode. If we issue the
AT+CMER=3,0,0,1 command, this will end up in the modem not replying a
correct CONNECT response to the ATD command.
Let's disable these +CIND indications completely in the simtech
plugin, as there is even no AT command reference saying those are
supported.
Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/144
From 5s to 20s, as it seems it could take much more to complete and
get a response, as seen in the logs below.
<debug> [1568553228.546862] (ttyUSB3): --> 'AT+CNSMOD=1<CR>'
<debug> [1568553233.799470] (ttyUSB3): --> 'AT+AUTOCSQ=1,1<CR>'
<debug> [1568553238.798866] (ttyUSB3) setting up 3GPP unsolicited registration messages handlers
<debug> [1568553238.798932] (ttyUSB2) setting up 3GPP unsolicited registration messages handlers
<debug> [1568553238.798990] (ttyUSB3) device open count is 1 (close)
<warn> [1568553238.799029] (tty/ttyUSB3) at port timed out 2 consecutive times
<debug> [1568553238.799094] (ttyUSB3) device open count is 2 (open)
<debug> [1568553238.799148] (ttyUSB3): --> 'AT+CREG=2<CR>'
<warn> [1568553241.798727] (tty/ttyUSB3) at port timed out 3 consecutive times
<debug> [1568553241.798799] (ttyUSB3): --> 'AT+CREG=1<CR>'
<debug> [1568553244.795389] Enabling unsolicited registration events in primary port failed: 'AT sequence failed'
<debug> [1568553244.795462] (ttyUSB2) device open count is 2 (open)
<debug> [1568553244.795507] (ttyUSB3) device open count is 1 (close)
<warn> [1568553244.795545] (tty/ttyUSB3) at port timed out 4 consecutive times
<debug> [1568553244.795588] (ttyUSB2): --> 'AT+CREG=2<CR>'
<debug> [1568553244.800815] (ttyUSB3): <-- '<CR><LF>OK<CR><LF><CR><LF>OK<CR><LF>'
<debug> [1568553244.801624] (ttyUSB3): <-- '<CR><LF>OK<CR><LF><CR><LF>OK<CR><LF>'
<debug> [1568553244.808710] (ttyUSB2): <-- '<CR><LF>OK<CR><LF>'
We now have a single 'CurrentModes' property which contains both values in a
tuple with signature "(uu)".
Also, rename 'SetAllowedModes()' to 'SetCurrentModes()', and update the list of
arguments expected to have a single "(uu)" tuple.
Both the ModemManager daemon and the mmcli will now include `libmm-glib.h' only.
We also handle two new special `_LIBMM_INSIDE_MM' and `LIBMM_INSIDE_MMCLI'
symbols, which if included before the `libmm-glib.h' library allow us to:
* Don't include the libmm-glib high level API in the ModemManager daemon, as
the object names would clash with those in the core.
* Define some of the methods of helper objects to be included only if compiling
ModemManager daemon or the mmcli.
Different ports of the same modem may get handled by different drivers. We
therefore need to provide a list of drivers (new `Modem.Drivers' property with
signature 'as') instead of just one (removed `Modem.Driver' property with
signature 's').
$ sudo mmcli -m 0 | grep drivers
| drivers: 'qcserial, qmi_wwan'