Commit Graph

5806 Commits

Author SHA1 Message Date
Thomas Haller
8bde29c9e2 libmm-glib: use helper function to convert enum/flags from string 2018-10-04 09:43:15 +02:00
Thomas Haller
d83f50794d libmm-glib, modem-helpers: unref enum/flags GType classes in enum getters 2018-10-04 09:43:05 +02:00
Ben Chan
a68bbbc1b9 port-serial: port mm_port_serial_flash to use GTask 2018-10-04 09:13:24 +02:00
Ben Chan
f3e1e699cf port-serial: port mm_port_serial_reopen to use GTask 2018-10-04 09:09:51 +02:00
Aleksander Morgado
2a1a0b88fb udev: define all generic tags as symbols
This prevents errors due to nasty typos in the strings.

We define all symbols in a single header file that is NOT considered
part of the API, as there is no need for MM clients to know about
these tags code-wise. These tags are only meaningful when associated
to devices in udev.

Information of each tag is included in the general API documentation.

https://gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/88
2018-09-25 17:55:53 +00:00
Aleksander Morgado
a2705abb24 iface-modem-messaging: if only one storage supported, select it right away
Some plugins or implementations (e.g. notably MBIM) may report a
single storage as supported and no way to update the current default
storage. In this specific case, we will initialize the default storage
to that single one supported right away, regardless of whether
selecting others is implemented or not.
2018-09-25 17:51:38 +00:00
Aleksander Morgado
0ca95254ae libmm-glib,location-3gpp: don't ignore location updates when MNC is 0
E.g. China Mobile (MCC 460, MNC 0).

    $ mmcli -m toby --location-get

    /org/freedesktop/ModemManager1/Modem/0
      -------------------------
      3GPP location   | Mobile country code: '460'
                      | Mobile network code: '0'
                      |  Location area code: '6188'
                      |             Cell ID: '40955'
      -------------------------
      GPS NMEA traces | Not available
      -------------------------
      Raw GPS         | Not available
      -------------------------
      CDMA BS         | Not available
2018-09-25 19:21:00 +02:00
Ulrich Ölmann
4d16eec5fb mmcli,location: fix doubled variable declaration
Remove the redundant declaration of which slipped into the code in commit
091bf4dbd8 ("api: support location assistance data").

Signed-off-by: Ulrich Ölmann <u.oelmann@pengutronix.de>
2018-09-21 15:15:54 +02:00
Aleksander Morgado
8ef6d397c7 cli,signal: add generic fields in its own group
This is just to consolidate the output w.r.t. similar fields in
e.g. the Messaging or Location interfaces.
2018-09-21 15:02:07 +02:00
Aleksander Morgado
77387cf604 xmm: increase AT command timeout when updating bands/modes
Looks like sometimes it may take a bit more than 3s.
2018-09-13 15:17:54 +02:00
Aleksander Morgado
e75063d80a po: minor updates in fr and it translation files 2018-09-13 09:35:42 +02:00
Milo Casagrande
45a8fccb03 [l10n] Add Italian translation
Signed-off-by: Milo Casagrande <milo@milo.name>
2018-09-13 09:32:23 +02:00
Aleksander Morgado
2f14012399 xmm: minor alignment fixes 2018-09-13 09:30:02 +02:00
Aleksander Morgado
823aa46a14 xmm: ensure outputs in load_values_finish() are always set if success 2018-09-13 09:26:19 +02:00
Paul Bartell
6b30f552a9 xmm: implement signal interface with +XCESQ polling 2018-09-13 07:17:51 +00:00
Paul Bartell
73045e931b xmm: add +XCESQ parser 2018-09-13 07:17:51 +00:00
Paul Bartell
3dc4106f0d broadband-modem: Call signal shutdown function when modem is disabled 2018-09-13 07:17:51 +00:00
Paul Bartell
fe3665b18e iface-modem-signal: Tear down refresh context upon shutdown. 2018-09-13 07:17:51 +00:00
Paul Bartell
04bf69c276 modem-helpers: Make 3gpp signal quality functions public 2018-09-13 07:17:51 +00:00
Aleksander Morgado
6e5ea39cba dell: implement Unmanaged GPS support for the DW5821e
The DW5821E module is managed in MBIM mode by default, and exposes a
NMEA capable tty in USB interface #4.

Enabling/disabling the NMEA output via the TTY is done with AT
commands, so this implementation requires also a valid AT port in the
system.

Given that the AT commands used to enable/disable this feature are
based on modifying non-volatile memory through AT^NV, this
implementation is very specific to the DW5821E. If we're able to do
the same on other Dell modules in the future, we'll just rename the
new object to a more generic one.
2018-09-12 18:48:41 +00:00
Aleksander Morgado
02f9b5b085 dell: port type hints for the Dell DW5821e
Include port type hints to make probing quicker, and ignore the
secondary AT port as it may not be fully functional.
2018-09-12 18:48:41 +00:00
Aleksander Morgado
d1744c7663 shared-qmi: reuse band management logic in MBIM whenever possible 2018-09-12 17:25:19 +00:00
Aleksander Morgado
7f18a9370a broadband-modem-mbim: use QMI-based mode/capability switching if supported
The implementation available in the shared QMI logic can be used
as-is, with one important note: if the QMI-based mode/capability
switching is used, we MUST also use QMI-based "3GPP network
registration" logic. This is needed because the MBIM command used to
select which 3GPP network to connect to allows specifying the mask of
access technologies desired, and that would overwrite whatever we had
previously set with QMI-based mode/capability switching commands.
2018-09-12 17:25:19 +00:00
Aleksander Morgado
ac69466c9d shared-qmi: implement 3GPP network registration logic
Ported from the broadband modem QMI implementation, keeping the logic
in place. We will need this to integrate mode/capability switching in
MBIM devices, for nothing else really (as MBIM already supports this
operation).
2018-09-12 17:25:19 +00:00
Aleksander Morgado
692d076ba6 shared-qmi: implement reworked mode and capabilities management
This commit introduces several improvements and changes in the way
modes and capabilities are managed in QMI capable devices. It is
organized into a single commit, as all changes in all 6 operations
(load current capabilities, load supported capabilities, set current
capabilities, load supported modes, load current modes, set current
modes) are related one to the other (given that the same QMI commands
are used for both capabilities and mode management).

The primary change is related to which capabilities are reported as
supported for a given device. In the previous implementation we
allowed switching between every combination possible for GSM/UMTS+LTE,
CDMA/EVDO+LTE or GSM/UMTS+CDMA/EVDO+LTE devices. E.g. we would allow
"LTE only" and "GSM/UMTS only" capabilities for GSM/UMTS+LTE devices,
even if they would both be managed in exactly the same way. That setup
wasn't ideal, because it meant that switching to a "LTE only"
configuration would require a power cycle, as capability switching
requires a power cycle, even if no change was expected in the exposed
DBus interfaces (which is why we require the power cycle). So, instead
of allowing every possible capability combination, we use capability
switching logic exclusively for configuring GSM/UMTS+CDMA/EVDO devices
(regardless of whether it has LTE or not) to add or remove the
GSM/UMTS and CDMA/EVDO capabilities. E.g. for a GSM/UMTS+CDMA/EVDO+LTE
device we would allow 3 combinatios: "GSM/UMTS+LTE", "CDMA/EVDO+LTE"
and "GSM/UMTS+CDMA/EVDO+LTE".

The "GSM/UMTS+CDMA/EVDO+LTE" is a special case because for this one we
allow switching to "LTE only" capabilities while we forbid switching
to "4G only" mode. As the same commands are used for mode and
capability switching, if we didn't have "LTE only" and we allowed "4G
only" mode instead and rebooted the device, we would end up not being
able to know which other capabilities (GSM/UMTS or CDMA/EVDO or both)
were also enabled.

Now that we have capability switching confined to a very subset of
combinations, we can use the mode switching logic to e.g. allow "4G
only" configurations in all non multimode devices, as well as masks of
allowed modes with one being preferred, which we didn't allow before.
In the previous implementation all mode switching logic was disabled
for LTE capable QMI devices. In the new implementation, we use the
"Acquisition Order Preference" TLV in NAS Set System Selection
Preference to define the full list of mode preferences for all
supported modes.

We also no longer just assume that NAS Technology Preference is always
available and NAS System Selection Preference only after NAS >= 1.1.
This logic is flawed, instead we're going to probe for those features
once when loading current capabilities, and we then just implement the
capabilities/mode switching logic based on that.
2018-09-12 17:25:19 +00:00
Aleksander Morgado
6026c99f2e shared-qmi: reuse device factory reset logic in MBIM whenever possible 2018-09-12 17:25:19 +00:00
Aleksander Morgado
9dc26cc44d shared-qmi: reuse device reset logic in MBIM whenever possible 2018-09-12 17:25:19 +00:00
Aleksander Morgado
32aa8333c6 helpers,tests: update ICCID related unit tests
Fix the test for invalid characters, because now I allow hex chars in
the account number.

And add new tests with real China Mobile ICCIDs that contain hex chars
in the account number.
2018-09-12 17:17:36 +00:00
Aleksander Morgado
099d54a4bc helpers: allow [A-F] range in operator-specific ICCID account number
There are operators (e.g. the Chinese CMCC operator) that abuse the
fact that 4 bits are used to store the BCD encoded numbers, and also
use the [A-F] range as valid characters for the ICCID in the operator
specific account number part. Haven't seen any documentation where
this format with [A-F] characters is explicitly allowed, but I have
seen multiple real cases where it happens. E.g.:

  898602F9091830030220
  898602C0123456789012

This patch also removes the 'last F' validation, used when reading
19-digit ICCIDs with +CRSM, as it no longer applies.
2018-09-12 17:17:36 +00:00
Aleksander Morgado
eb01914bd0 ublox: implement custom ICCID loading
Use AT+CCID to query the SIM ICCID, and fallback to parent's +CRSM
based method otherwise.
2018-09-12 17:17:36 +00:00
Aleksander Morgado
0282123287 helpers: allow 19-digit reported ICCIDs
The mm_3gpp_parse_iccid() method does validation of the ICCID string
and was originally implemented to handle +CRSM reported values. The
implementation was looking for 20-digit strings, even for 19-digit
ICCIDs (those finished with a trailing 'F').

We now extend the logic to also validate ICCID strings reported as
19-digit values directly, and when that happens we won't allow
swapping of the digits (a +CRSM specific requirement) or trailing 'F'
characters (as that is only required when reporting 19-digit ICCIDs
with 20-digit strings).

This change allows us to e.g. use the u-blox specific AT+CCID command
and validate the returned ICCID with the same helper method, which
currently fails:

  (ttyACM2): --> 'AT+CCID<CR>'
  (ttyACM2): <-- '<CR><LF>+CCID: 8934077700015848638<CR><LF><CR><LF>OK<CR><LF>'
  couldn't load SIM identifier: 'Invalid ICCID response size (was 19, expected 20)'
2018-09-12 17:17:36 +00:00
Aleksander Morgado
4c669d3bf4 modem-helpers: reuse nicknames for the flow control tags
And check that the string given in the tag is actually a valid one.
2018-09-12 17:15:46 +00:00
Aleksander Morgado
fc1beefe92 port-serial: improve logging in mm_port_serial_set_flow_control() 2018-09-12 17:15:46 +00:00
Aleksander Morgado
727567cf58 broadband-bearer: no need for explicit flow control cleanup on disconnect
We're already configuring the flow control we expect when running
mm_port_serial_reopen(), which will keep the udev-selected flow
control or will otherwise reset to no flow control when the TTY is in
command mode.
2018-09-12 17:15:46 +00:00
Aleksander Morgado
a19be8952f cinterion: report selected RTS/CTS flow control to modem 2018-09-12 17:15:46 +00:00
Aleksander Morgado
5f3c415722 iridium: report selected RTS/CTS flow control to modem 2018-09-12 17:15:46 +00:00
Aleksander Morgado
cd762addfd broadband-modem: allow subclasses to modify the flow control settings
If a subclass implements a custom setup_flow_control() logic, e.g. to
select a very specific setting explicitly, let it also configure the
flow control settings modem-wide via the modem object property, so
that bearer objects can later on use the same settings when preparing
for a new connection.
2018-09-12 17:15:46 +00:00
Aleksander Morgado
a9f871805b broadband-modem: rework flow control selection logic
Try to simplify a bit the logic that selects the flow control to be
used during connectivity:

 * We detect early if the requested flow control (via udev tags) is
   actually supported by the modem (as eported by AT+IFC=?), and if it
   isn't, we error out directly.

 * We try to set in a single place the AT commands to be used to setup
   the flow control, once we have decided which one we're going to
   use.

 * Use the string builder helpers to log the flow control values.
2018-09-12 17:15:46 +00:00
Aleksander Morgado
b773e610eb port-serial,broadband-modem: minor coding style fixes 2018-09-12 17:15:46 +00:00
Aleksander Morgado
f253c15c1f port-serial: improve logging of device-level flow control settings 2018-09-12 17:15:46 +00:00
Aleksander Morgado
48d2fa399a port-serial: Flow Control property is flags, not enum
MMFlowControl is a flags enumeration, so change the property type to
match that, or we'll end up with nasty criticals during runtime.

    (ModemManager:30758): GLib-GObject-CRITICAL **: 10:54:26.435: g_param_spec_enum: assertion 'G_TYPE_IS_ENUM (enum_type)' failed

    Thread 1 "ModemManager" received signal SIGTRAP, Trace/breakpoint trap.
    0x00007ffff71f2a96 in ?? () from /usr/lib/libglib-2.0.so.0
    (gdb) bt
    #0  0x00007ffff71f2a96 in  () at /usr/lib/libglib-2.0.so.0
    #1  0x00007ffff71f3def in g_logv () at /usr/lib/libglib-2.0.so.0
    #2  0x00007ffff71f3fe0 in g_log () at /usr/lib/libglib-2.0.so.0
    #3  0x00007ffff72d90ac in g_param_spec_enum () at /usr/lib/libgobject-2.0.so.0
    #4  0x000055555564caf2 in mm_port_serial_class_init (klass=0x5555557607c0) at mm-port-serial.c:2101
    #5  0x000055555564759a in mm_port_serial_class_intern_init (klass=0x5555557607c0) at mm-port-serial.c:49
    #6  0x00007ffff72ea9b4 in g_type_class_ref () at /usr/lib/libgobject-2.0.so.0
    #7  0x00007ffff72eab5a in g_type_class_ref () at /usr/lib/libgobject-2.0.so.0
    #8  0x00007ffff72d0f53 in g_object_new_valist () at /usr/lib/libgobject-2.0.so.0
    #9  0x00007ffff72d103a in g_object_new () at /usr/lib/libgobject-2.0.so.0
    #10 0x000055555564e187 in mm_port_serial_at_new (name=0x55555576e280 "ttyUSB4", subsys=MM_PORT_SUBSYS_TTY) at mm-port-serial-at.c:533
    #11 0x0000555555602512 in serial_open_at (self=0x555555715390) at mm-port-probe.c:1285
    #12 0x00007ffff71ecb49 in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0
    #13 0x00007ffff71ecf59 in  () at /usr/lib/libglib-2.0.so.0
    #14 0x00007ffff71ed272 in g_main_loop_run () at /usr/lib/libglib-2.0.so.0
    #15 0x00005555555957e0 in main (argc=3, argv=0x7fffffffe458) at
    main.c:181

Also, rename the property to match the naming convention of other
properties in the same object.
2018-09-12 17:15:46 +00:00
Alfonso Sánchez-Beato
e3c2f0e9cc broadband-modem: set flow control from port
Set the flow control used in the data connection from the one
set in the port.
2018-09-12 17:15:46 +00:00
Alfonso Sánchez-Beato
94879ce1ce base-modem,port-probe: set serial port flow control from udev tag
Set the serial port flow control from the udev tag
ID_MM_TTY_FLOW_CONTROL before accessing the port.
2018-09-12 17:15:46 +00:00
Alfonso Sánchez-Beato
4e69c10c2d port-serial: add flow control property
Add flow control property to the MMPortSerial class, and use it when
setting the port flow control.
2018-09-12 17:15:46 +00:00
Alfonso Sánchez-Beato
a1c27bf89d modem-helpers: add flow control udev tag parser
Add function for parsing the content of the udev tag
ID_MM_TTY_FLOW_CONTROL.
2018-09-12 17:15:46 +00:00
Aleksander Morgado
bc407a38d6 mmcli,location: print LAC/TAC/CID in hex
All these values are usually specified in hex, not in dec.
2018-09-12 17:15:13 +00:00
Aleksander Morgado
6e84f3d459 iface-modem-location: validate SUPL server address
Devices will expect SUPL server given as either IP:PORT or FQDN:PORT,
so just avoid saying we require a 'URL' because it's not true.

We will use a new helper method to parse and validate user-provided
SUPL server address.
2018-09-12 17:14:36 +00:00
Aleksander Morgado
47ed19d5be broadband-bearer: don't do connection checks on CDMA
On CDMA-only connections we won't have a CID defined, so instead of
getting in a loop of warnings reporting "cid not defined", early error
out with an UNSUPPORTED error so that the connection check isn't tried
any more.

https://gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/83
2018-09-08 10:04:58 +02:00
Ben Chan
21420e450d broadband-modem: port modem_cdma_register_in_network to use GTask 2018-09-07 08:35:44 -07:00
Ben Chan
fcec3b3355 broadband-modem: port modem_cdma_setup_registration_checks to use GTask 2018-09-07 08:35:44 -07:00