Commit Graph
143 Commits
Author SHA1 Message Date
Aleksander Morgado f9d2168c52 telit: disable +CPOL based features in the LN930
Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/414
2021-08-01 16:32:28 +02:00
Aleksander Morgado 3e037dc158 plugins: AT/QCDM/GPS port type hints only applicable to TTY ports
There are modems out there, that reuse the same vid:pid for multiple
USB layouts, so there may be port type hints that are not really
applicable in all layouts.

E.g. the EM7565 in MBIM layout uses interface #0 for the MBIM port,
while in QMI layout it uses interface #0 for the QCDM port (which is
what the port type hint included in MM states). With these rules, if
we don't bind the port type hint to TTY ports only, we would be
wrongly flagging the MBIM port as possible QCDM port:

    <debug> [plugin/sierra] probes required for port cdc-wdm0: 'mbim'
    <debug> [cdc-wdm0/probe] no AT/QMI/MBIM probing in possible QCDM port
    <debug> [cdc-wdm0/probe] port is not AT-capable
    <debug> [cdc-wdm0/probe] port is not QMI-capable
    <debug> [cdc-wdm0/probe] port is not MBIM-capable
    <debug> [cdc-wdm0/probe] port probing finished: no more probings needed

Avoid this, by making sure all port type hints are added exclusively
to TTY ports. It's not a perfect solution, but it's enough for the
known cases.
2021-07-13 10:56:11 +02:00
Aleksander Morgado 4cf12bb8bc helpers: skip g_warning() in mm_3gpp_parse_ws46_test_response()
Use mm_obj_warn() instead.
2021-06-16 11:59:51 +02:00
Aleksander Morgado 5d176a1e61 base-modem: explicitly say if NET or TTY data ports are supported
A modem that creates exclusively bearer objects that work with NET
ports (e.g. all QMI or MBIM modems) must not add any TTY port in the
list of data ports.

A modem that creates exclusively bearer objects that work with TTY
ports (e.g. the generic modem) must not add any NET port in the
list of data ports.

A modem that may use both TTY and NET ports should add all in the list
of data ports.

Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/324
Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/329
2021-03-04 18:03:28 +01:00
Aleksander Morgado 1b35d74c15 kernel-device: add get_interface_number() method
We already have methods to query for interface specific attributes
like class/subclass/protocol, so add a new one for the interface
number, and make sure we use ATTRS{bInterfaceNumber} to load it
always, instead of assuming the ID_USB_INTERFACE_NUM property is set.
2021-02-24 20:47:57 +01:00
Aleksander Morgado 102de14c15 telit: plug GPS data port leak
The _get_port_gps() returns a full reference, use _peek_port_gps()
instead.

See https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/302
2021-01-11 14:13:28 +01:00
Aleksander Morgado 950abbf8ee core: stop monitoring the 'usb' subsystem
Back in Linux < 3.6 days, the cdc-wdm ports exposed by the QMI driver
were flagged as owned by the 'usb' subsystem. That changed in 3.6 when
the subsystem was renamed to 'usbmisc':

  https://mail.gnome.org/archives/networkmanager-list/2012-June/msg00125.html

This patch removes all monitoring of the 'usb' subsystem completely,
which is anyway a valid subsystem but for which we shouldn't need any
special handling. Right now, with newer kernels, we were using that
monitoring exclusively to get notified of full USB device remove
events, which is really not required as we already process the port
removals one by one.

We simplify the logic everywhere that attempted to match either the
'usb' or 'usbmisc' subsystems, and we no longer require the explicit
checks for the port name being named 'cdc-wdm[0-9]*' in the code, as
that is already taken care of by the ID_MM_CANDIDATE udev tag rule.
2020-11-13 08:57:06 +00:00
Daniele Palmas dcf188d2ef telit: add tag ID_MM_TELIT_PORT_DELAY for initial delay mechanism 2020-10-05 21:49:44 +02:00
Daniele Palmas f6c4e3369a telit: add initial delay for AT ports to become responsive
Add a polling mechanism for port responsiveness, since some modem
families require some time before being usable after the serial
ports have been exposed by the kernel.
2020-10-05 21:49:44 +02:00
Daniele Palmas 71cd727425 telit: add FN980 and LM9x0 MBIM compositions rules 2020-10-05 21:49:44 +02:00
Daniele Palmas ed8cf8d04c telit: fix LM9x0 udev rules 2020-10-05 21:49:44 +02:00
Aleksander Morgado 74dd28c4e3 broadband-modem: minor method rename 2020-08-01 10:02:02 +02:00
Daniele Palmas fff47478cc telit: added port type hints for default MEx10G1 composition
While at this change also the previous generic reference to ME910
in order to differentiate between ME910C1 (based on MDM9206) and
MEx10G1 (based on MDM9205).
2020-07-02 13:09:19 +02:00
Aleksander Morgado 4b37b7d3cf base-modem,at: response processors return a more specific enum
Instead of using the FALSE return of the method to indicate either a
fatal error (if result_error was set) or the continuation request (if
result_error wasn't set), provide a enum that has explicit states for
all three possible values (failure, success or continue).
2020-06-28 15:07:34 +02:00
Aleksander Morgado b0be4e895c telit,helpers: avoid cast-align errors
We can safely cast the data in a GArray to gpointer first, and then
to the pointer type we require.

  telit/mm-modem-helpers-telit.c: In function 'mm_telit_build_bnd_request':
  telit/mm-modem-helpers-telit.c:256:55: error: cast increases required alignment of target type [-Werror=cast-align]
               bands_str = mm_common_build_bands_string ((const MMModemBand *)(bands_array->data), bands_array->len);
                                                         ^
  telit/mm-modem-helpers-telit.c:275:55: error: cast increases required alignment of target type [-Werror=cast-align]
               bands_str = mm_common_build_bands_string ((const MMModemBand *)(bands_array->data), bands_array->len);
                                                         ^
2020-05-19 13:44:23 +02:00
Aleksander Morgado 8b7bdea7e0 telit: flag GPS port in the LE910C1 2020-05-14 15:34:47 +00:00
David Khouya 9c77fb8834 telit: add LE910C1 udev rule 2020-05-14 15:34:47 +00:00
Aleksander Morgado 8722215f7e plugins: use logging module name as plugin name 2020-04-08 17:53:42 +02:00
Aleksander Morgado e956bac47b log: common logging method definition for all testers and helpers 2020-04-08 17:53:42 +02:00
Aleksander Morgado 078c638165 telit: port to use object logging 2020-04-08 16:35:10 +02:00
Aleksander Morgado 0f708daf0b modem-helpers: port supported modes filtering to use object logging 2020-04-08 16:35:09 +02:00
Aleksander Morgado 9bcadea172 log: new object logging support
So that we can provide the specific object id in every log associated
to a given object.
2020-04-08 16:35:08 +02:00
Aleksander Morgado accd1a5841 base-modem: define new helper MMBaseModemAtCommandAlloc
It has the same exact format as MMBaseModemAtCommand, but its contents
are assumed heap allocated.

The only real purpose of this type is to allow defining static
constant MMBaseModemAtCommand variables without warnings when using
-Wdiscarded-qualifiers.
2020-01-31 15:18:35 +01:00
Aleksander Morgado 35649aa110 telit,tests: different errors for invalid vs unmatched band combinations 2020-01-31 15:18:35 +01:00
Aleksander Morgado 5ba6a684af telit: fix warnings with -Wimplicit-fallthrough
telit/mm-broadband-modem-telit.c: In function ‘qss_setup_step’:
  telit/mm-broadband-modem-telit.c:619:22: error: this statement may fall through [-Werror=implicit-fallthrough=]
    619 |             ctx->step++;
        |             ~~~~~~~~~^~
  telit/mm-broadband-modem-telit.c:620:9: note: here
    620 |         case QSS_SETUP_STEP_QUERY:
        |         ^~~~
  telit/mm-broadband-modem-telit.c:653:22: error: this statement may fall through [-Werror=implicit-fallthrough=]
    653 |             ctx->step++;
        |             ~~~~~~~~~^~
  telit/mm-broadband-modem-telit.c:654:9: note: here
    654 |         case QSS_SETUP_STEP_LAST:
        |         ^~~~
  telit/mm-broadband-modem-telit.c: In function ‘load_unlock_retries_step’:
  telit/mm-broadband-modem-telit.c:906:22: error: this statement may fall through [-Werror=implicit-fallthrough=]
    906 |             ctx->step++;
        |             ~~~~~~~~~^~
  telit/mm-broadband-modem-telit.c:907:9: note: here
    907 |         case LOAD_UNLOCK_RETRIES_STEP_LOCK:
        |         ^~~~
2020-01-31 14:52:50 +01:00
Aleksander Morgado 7e19ed0a79 telit: fix warnings with -Wdiscarded-qualifiers
telit/mm-broadband-modem-telit.c: At top level:
  telit/mm-broadband-modem-telit.c:1184:7: error: initialization discards ‘const’ qualifier from pointer target type [-Werror=discarded-qualifiers]
   1184 |     { "#PSNT?",    3, FALSE, response_processor_psnt_ignore_at_errors },
        |       ^~~~~~~~
  telit/mm-broadband-modem-telit.c:1185:7: error: initialization discards ‘const’ qualifier from pointer target type [-Werror=discarded-qualifiers]
   1185 |     { "+SERVICE?", 3, FALSE, response_processor_service_ignore_at_errors },
        |       ^~~~~~~~~~~
2020-01-31 14:52:50 +01:00
Aleksander Morgado 26e565f6a3 telit: fix warnings with -Wswitch-default
telit/mm-broadband-modem-telit.c: In function ‘qss_setup_step’:
  telit/mm-broadband-modem-telit.c:616:5: error: switch missing default case [-Werror=switch-default]
    616 |     switch (ctx->step) {
        |     ^~~~~~
2020-01-31 14:52:50 +01:00
Aleksander Morgado cfd5cad882 telit: fix warnings with -Wsign-compare
telit/mm-broadband-modem-telit.c: In function ‘gps_enabled_ready’:
  telit/mm-broadband-modem-telit.c:191:30: error: comparison of integer expressions of different signedness: ‘gint’ {aka ‘int’} and ‘long unsigned int’ [-Werror=sign-compare]
    191 |     if (ctx->gps_enable_step < G_N_ELEMENTS (gps_enable)) {
        |                              ^
  telit/mm-broadband-modem-telit.c: In function ‘parent_enable_location_gathering_ready’:
  telit/mm-broadband-modem-telit.c:254:43: error: comparison of integer expressions of different signedness: ‘gint’ {aka ‘int’} and ‘long unsigned int’ [-Werror=sign-compare]
    254 |     if (start_gps && ctx->gps_enable_step < G_N_ELEMENTS (gps_enable)) {
        |                                           ^
2020-01-31 14:52:50 +01:00
Aleksander Morgado 10c9ac18f7 telit: use integers to compare interface numbers 2020-01-31 14:52:50 +01:00
Aleksander Morgado 759ab6d94d telit,helpers: fix format of flags built during #BND request generation
We explicitly need 64bit values for 3G flags and 4G flags.
2020-01-31 14:52:49 +01:00
Aleksander Morgado ee8e81e55c telit,helpers: use correct flag to check caps when building #BND request 2020-01-31 14:52:49 +01:00
Aleksander Morgado 7655f3b35c telit: fix warnings with -Wdiscarded-qualifiers
telit/tests/test-mm-modem-helpers-telit.c:48:9: error: initialization discards ‘const’ qualifier from pointer target type [-Werror=discarded-qualifiers]
     48 |         "#BND: (0-3)", TRUE, FALSE, FALSE, FALSE, 4,
        |         ^~~~~~~~~~~~~
  ...
2020-01-31 14:52:49 +01:00
Aleksander Morgado 1d1f597b55 telit: setup as loadable 'shared' utils 2019-11-27 10:11:43 +00:00
Daniele Palmas c9e603a388 telit: add AT$GPSNMUN description 2019-11-05 15:52:31 +01:00
Krzysztof Drobinski 4a2e907e30 telit: minor coding style fix 2019-11-02 17:34:13 +01:00
Eric Caruso c79d945073 mm-modem-helpers-telit: fix undefined bitshifts
Since this plugin uses a bitmask to represent bands, we have
to be wary of shifting outside the precision of the bitmask
storage type. In this case, it was possible to generate 1 << 31
in a signed integer type as an intermediate step of B3G_FLAG,
which is undefined behavior (and usually results in INT_MIN,
breaking comparisons with the value).

Bug was reported to the chromium tracker at crbug.com/1019301

Original patch updated by Aleksander Morgado to leave
MM_MODEM_BAND_TELIT_3G_LAST as MM_MODEM_BAND_UTRAN_19, as that is the
highest 3G band supported by the current implementation. Worth noting
that this was not a real bug as the maximum flag we would have been
setting was (1 << 19) anyway.
2019-10-31 15:36:50 +01:00
Aleksander Morgado e0f0d62369 telit: fix crash if AT$GPSP=? is supported but no GPS data port
We would have been de-referencing a NULL GError.
2019-10-31 15:14:27 +01:00
Aleksander Morgado 5def58d327 telit: minor coding style fixes 2019-10-31 15:12:54 +01:00
Krzysztof Drobinski eb3f17ddcc telit: Allow enabling GNSS events if NMEA port was detected 2019-10-30 17:53:22 +01:00
Krzysztof Drobinski ef30dd800c telit: increase timeout for AT#REBOOT
It was observed that sporadically it may take more than 5 seconds for modem to
respond to AT#REBOOT. Increase the timeout on AT command to not report
unnecessary errors to the user.
2019-10-21 11:40:39 +02:00
Aleksander Morgado d5d0ed0b24 tests: print MM logs only on verbose test mode
Therefore, avoid needing ENABLE_TEST_MESSAGE_TRACES build symbol.
2019-10-14 15:30:27 +02:00
Aleksander Morgado be4fa661c1 plugins,telit: refactor #BND command support
And added support for several new things, including:
 * Setting "any" band now attempts to set all supported bands.
 * Added new 2G band value '5' (egsm+dcs+pcs+g850).
 * Setup support for two different 3G band combinations, a default one
   plus an alternate one applicable to the LM940/960 models only. The
   alternate combination is selected via udev tags.

During the refactor, the following Telit-specific helpers were also
removed and exchanged with more generic counterparts.
 * mm_telit_bands_contains() -> mm_common_bands_garray_lookup()
 * mm_telit_get_band_flags_from_string() -> mm_parse_uint_list()
2019-09-17 10:52:42 +02:00
Aleksander Morgado 2ecb96b6ad telit: add LE922 port type hints
P:  Vendor=1bc7 ProdID=1040 Rev=03.10
  S:  Manufacturer=Android
  S:  Product=Android
  S:  SerialNumber=2d9e48a4
  C:  #Ifs= 7 Cfg#= 1 Atr=80 MxPwr=500mA
  I:  If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
  I:  If#=0x1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
  I:  If#=0x2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan
  I:  If#=0x3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
  I:  If#=0x4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
  I:  If#=0x5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
  I:  If#=0x6 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
2019-09-13 17:30:39 +02:00
Aleksander Morgado edac8c37e8 telit: add port type hints for the ME910 using the correct PID 2019-09-09 12:21:11 +02:00
Aleksander Morgado e6932c9336 Revert "telit: additional port type hints for the ME910"
This reverts commit ef89dd154b.

The PID of the ME910 is 1101, not 1011... :D
2019-09-09 12:21:11 +02:00
Aleksander Morgado ef89dd154b telit: additional port type hints for the ME910 2019-07-13 23:21:55 +02:00
Aleksander Morgado 254da81ebd telit: loading access tech should never use cached replies 2019-05-18 16:00:19 +02:00
Daniele Palmas c7be4af542 telit: add Telit MBIM broadband modem
Modes and band support are added through AT commands.
2019-02-28 16:09:10 +01:00
Daniele Palmas 3921c120b3 telit: move shared functions to mm-shared-telit 2019-02-28 15:42:28 +01:00
Aleksander Morgado 7d9c7e0bf4 telit: avoid using deprecated band symbols 2018-12-16 09:20:25 +01:00