Commit Graph
5174 Commits
Author SHA1 Message Date
Dan Williams 89466b583b port-probe: ensure port is open for all plugin AT probes
If multiple plugins are selected for probing a modem with AT probes,
earlier plugins may only request some probes but not all.  When
those probes complete successfully, subsequent plugins won't re-do
the probes that were already completed, but jump to ones that
haven't yet been done.

For example, plugin A may request only AT probes but plugin B
may request AT, AT_PRODUCT, and AT_VENDOR. Plugin B will start
with AT_PRODUCT probes because plugin A already completed the AT
probe.

The code in probe_step() only opened the serial port for the
AT probe, I guess assuming that all AT-type probes would be
done in sequence. But in the above scenario they are not.

Instead, make sure the port is opened for all AT style probes
that have not yet been executed.

Fixes: 7937a89a37 port-probe: rework and consolidate port probe flow for AT/QCDM/QMI/MBIM

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2025-03-09 14:44:23 +00:00
Dan Williams f014f3843e broadband-modem,cli: slightly bump 3GPP scan timeout; add some cli dbus timeout slack
Add some mmcli D-Bus timeout slack, making them slightly higher than the
ModemManager internal timeout, to ensure the cli doesn't time out the
D-Bus call when MM succeeds.

For 3GPP scan, some modems appear to have internal 5 minute timeouts,
so ensure MM doesn't time out right before the modem returns results:

ModemManager[282578]: <dbg> [1741054422.321400] [ttyUSB2/at] --> 'AT+COPS=?<CR>'
ModemManager[282578]: <wrn> [1741054722.247806] [modem1] failed scanning networks: Serial command timed out
ModemManager[282578]: <dbg> [1741054724.119770] [ttyUSB2/at] <-- '<CR><LF>+COPS: (1,"T-Mobile","T-Mobile","310260",0),,(0,1,2,3,4),(0,1,2)<CR><LF><CR><LF>OK<CR><LF>'

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2025-03-06 04:52:50 +00:00
Guido Günther 54dcc25d8b treewide: Fix some spelling errors
All in debug messages or code comments so not user / client visible.

Signed-off-by: Guido Günther <agx@sigxcpu.org>
2025-03-05 16:53:26 +00:00
Guido Günther db37e063f8 mbim: Fix typo in error message
Signed-off-by: Guido Günther <agx@sigxcpu.org>
2025-03-05 16:53:26 +00:00
Robert Marko f72dd493e8 broadband-modem-qmi: implement UE mode get/set
Instead of relying on getting/setting the UE mode via AT +CEMODE command
which on Quectel RM520N (And I assume other QMI based modems) only allows
getting the value and not setting one it has special AT commands for CS/PS
and voice/data centric values.

So lets instead use the QMI Get/Set System Selection Preference TLV which
offers service domain and usage domain preference info so we can use those
to get/set the 3GPP TS 24.301 UE mode values.

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
2025-03-03 10:46:13 +01:00
Akula Susmitha bf5245bb27 messaging: load default storage from modem during initialization
Signed-off-by: Akula Susmitha <quic_asusmith@quicinc.com>
2025-02-27 15:04:59 +00:00
Sushrut Shree Trivedi 9c63f0acb0 iface-modem-firmware: report new ID's based on PCI SSVID/SSPID
Add new device ID based on PCI SSVID/SSPID to enable
FW download based on the same.

Signed-off-by: Sushrut Shree Trivedi <quic_sushruts@quicinc.com>
2025-02-25 18:43:47 +00:00
Michał Sułek 3966e1c019 Fixed code formatting 2025-02-24 17:35:47 +01:00
Michał Sułek 602808c0eb Setup variable declared after function call, fixed. 2025-02-24 16:18:55 +00:00
Michał Sułek 60bc733004 Was not compiling due to setup being undefined in call_audio_channel_set 2025-02-24 16:18:55 +00:00
Michał Sułek 9477469db4 Dan Williams changed g_usleep to g_timeout_add 2025-02-24 16:18:55 +00:00
Michał Sułek 31e486d672 Fixed the bug regarding SIM7600 modem family that made USB audio to not turn on.
Added the support for 16kHz sample rate for simtech modems and set it as default if available.
2025-02-24 16:18:55 +00:00
Akula Susmitha 0d6c9279d3 iface-modem-messaging: Validate supported storages
Check for supported storages before setting default storage.

Signed-off-by: Akula Susmitha <quic_asusmith@quicinc.com>
2025-02-24 14:02:02 +00:00
Aleksander Morgado 781428ddcd iface-modem-firmware: common logic to check for sahara/firehose tags
The logic will exclusively look for the udev tags reporting
sahara/firehose support in the primary control port of each modem
type.
2025-02-21 14:08:50 +00:00
Aleksander Morgado 93da5e0b93 fibocom: add Sahara/Firehose support for NL668-EAU
Signed-off-by: default avatarLukas Voegl <lvoegl@tdt.de>
2025-02-21 14:08:50 +00:00
Lukas Voegl 155893ea38 broadband-modem: generic Firehose and Sahara support
Allows setting the renamed `ID_MM_QUALCOMM_FIREHOSE` and
`ID_MM_QUALCOMM_SAHARA` environment variables for all devices.

Signed-off-by: Lukas Voegl <lvoegl@tdt.de>
2025-02-21 14:08:50 +00:00
Sushrut Shree Trivedi 092439369b base-modem: add subsystem device ID property
Subsystem device ID can be used for identifying PCI modems,
so expose the property.

Signed-off-by: Sushrut Shree Trivedi <quic_sushruts@quicinc.com>
2025-02-21 10:39:29 +05:30
Sushrut Shree Trivedi 894b517dae kernel-device, generic: add subsystem device ID support
Add subsystem device ID support, that can be used in pci devices
instead of vendor/device ID customization.

Signed-off-by: Sushrut Shree Trivedi <quic_sushruts@quicinc.com>
2025-02-21 10:39:03 +05:30
Kévin L'hôpital b1e58e0f6e src: plugins: quectel: add DTMF dbus notification support
The quectel modems that are not using QMI could receive DTMF events but
no dbus notification was sent to the user space. This patch adds the
DTMF notification support to the quectel plugin.

Signed-off-by: Kévin L'hôpital <kevin.lhopital@savoirfairelinux.com>
2025-02-19 09:47:28 +01:00
Dan Williams 0a94b0138d netlink: add RTM_GETLINK support to read MAC address
Since we're also now reading responses we need to check sender
credentials to make sure we're talking to the kernel, and not
some other process spoofing netlink.

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2025-02-18 21:06:19 +00:00
Aleksander Morgado ef5fe9b8d5 broadband-modem: prefer explicit return to break
Just to make it explicit that there is no more logic running
afterwards.
2025-02-03 10:21:32 +00:00
Aleksander Morgado 4ce23a9ebd broadband-modem: exit with error if enable() while in unknown state
We should not assert if the modem is flagged as invalid but an
outstanding enabling request is processed. Let's exit gracefully and
let the object get properly disposed afterwards.

   (libc.so.6 - pthread_kill.c: 44)         __pthread_kill_implementation
   (libc.so.6 - raise.c: 26)    raise
   (libc.so.6 - abort.c: 79)    abort
   (libglib-2.0.so.0 - gtestutils.c: 3450)  g_assertion_message
   (libglib-2.0.so.0 - gtestutils.c: 3476)  g_assertion_message_expr
   (ModemManager - mm-broadband-modem.c)    enable
   (ModemManager - mm-iface-modem.c: 2340)  handle_enable_auth_ready
   (libgio-2.0.so.0 - gtask.c: 1309)        g_task_return_now
   (libgio-2.0.so.0 - gtask.c: 1378)        g_task_return
   (ModemManager - mm-base-modem.c: 2011)   lock_after_authorize_ready
   (libgio-2.0.so.0 - gtask.c: 1309)        g_task_return_now
   (libgio-2.0.so.0 - gtask.c: 1378)        g_task_return
   (ModemManager - mm-base-modem.c: 1841)   base_modem_operation_run
   (ModemManager - mm-base-modem.c: 764)    state_operation_ready
   (libgio-2.0.so.0 - gtask.c: 1309)        g_task_return_now
   (libgio-2.0.so.0 - gtask.c: 1323)        complete_in_idle_cb
   (libglib-2.0.so.0 - gmain.c: 3460)       g_main_dispatch
   (libglib-2.0.so.0 - gmain.c: 4200)       g_main_context_dispatch
   (libglib-2.0.so.0 - gmain.c: 4276)       g_main_context_iterate
   (libglib-2.0.so.0 - gmain.c: 4479)       g_main_loop_run
   (ModemManager - main.c: 236) main
   (libc.so.6 - libc_start_call_main.h: 58) __libc_start_call_main
   (libc.so.6 - libc-start.c: 360)          __libc_start_main_impl
   (ModemManager + 0x000b8850)              _start
2025-02-03 10:18:19 +00:00
Daniele Palmas f6c0917a65 shared-telit: fix missing error initialization in load_revision_ready
Closes #953
2025-01-31 16:37:53 +01:00
Valentin Blot 59d7be3658 broadband-modem-qmi: separate "system info" and "serving system" indications registration
Some modems succeed on enabling "system info" and disabling "serving system" in one
transaction, even though they don't support "system info". This commit separates the
two: first, try to enable "system info", and if it succeeds then disable "serving system".
2025-01-23 02:54:36 +00:00
Arnav Singh 5eb8203f8e suspend: support logind not sending PrepareForSleep(true)
elogind sends PrepareForSleep(false) when resuming but doesn't necessarily
send PrepareForSleep(true) when sleeping. This means we didn't necessarily
drop our previous inhibitor when it's time to take a new one. So instead of
asserting that we dropped our previous inhibitor, just reuse it.
2025-01-22 08:42:02 -08:00
Lukas Voegl 42262a5827 modem-helpers: fix gsize format 2025-01-17 14:50:28 +01:00
Dan Williams 60de5751b4 port-probe: add some QCDM/DIAG response bytes to non-AT responses
Seen on a Qualcomm-based Quectel EG915Q on the diag port:

ModemManager[34547]: <dbg> [1732077670.330527] [ttyUSB0/at] <-- ' \0\0\0\8\0\0\0\2\0\0\0\0`%\160$"\6\169\128\200\1\30\197\142\0G\184\225\128\0\1+\127\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254'

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2024-12-27 23:42:09 -06:00
Aleksander Morgado 377a124865 port-probe: explicit close port steps
If by any chance the same ports needs to go through AT and
QMI/MBIM probing, make sure the serial port created during
AT probing is closed before starting the QMI/MBIM probing.
2024-12-27 15:24:01 +00:00
Aleksander Morgado e2633b46f0 port-probe: only run custom init on ports that will go through AT probing 2024-12-27 15:24:01 +00:00
Aleksander Morgado 0744ebd1c0 port-probe: rename serial_probe->probe 2024-12-27 15:24:01 +00:00
Dan Williams 72e8ac2e80 port-serial: clean up whitespace formatting
Remove stray tabs.

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2024-12-23 01:06:53 -06:00
Michal Mazur 66aa3d16e5 device,plugin: reset MMDevice's hotplugged after creating the modem
The hotplugged flag was added to simplify modem probe on first time it
is created. Before the re-probe it must be set to FALSE to destroy all
existing netlink interfaces and force full reconfiguration.
2024-12-19 09:42:26 +00:00
Mank Wang 1e865d76a8 Netprisma:Add support for more USB devices 2024-12-09 09:28:57 +08:00
Guido Günther 60357247eb broadband-modem: Add Cell Broadcast implementation
The CBMs are read via unsolicted events for which we register
an event handler.

We don't enable unsolicted events explicitly as this already happens
via the `+CNMI=*,*,2,*,*` whens setting up unsolicted events in
`modem_messaging_enable_unsolicited_events` (ETSI TS 127 005).
2024-12-01 21:41:10 +00:00
Guido Günther 62f7b76e8e cbm: Add CellBroadcast interface
This adds support for the Cell Broadcast interface allowing to
receive, list, read and delete Cell Broadcast messages via the
org.freedesktop.ModemManager1.Modem.CellBroadcast and
org.freedesktop.ModemManager1.Cbm interfaces.

Signed-off-by: Guido Günther <agx@sigxcpu.org>
2024-12-01 21:41:10 +00:00
Guido Günther eedf78d662 part: fix indent 2024-12-01 21:41:10 +00:00
Guido Günther c69a64c0cb cbm: Add parsing bits for cell broadcast messages
This allows to parse the CBMs parameters like channel, part number and
message text. We parse uncompressed GSM7 and UCS2 encodings as
described in 3GPP TS 23.038.

Signed-off-by: Guido Günther <agx@sigxcpu.org>
2024-12-01 21:41:10 +00:00
Guido Günther 8cb68e87d8 modem-helpers: Add regex to parse CBM out of the serial stream
This will allow us to fetch cell broadcast messages.

Signed-off-by: Guido Günther <agx@sigxcpu.org>
2024-12-01 21:41:10 +00:00
Guido Günther a8c10c676e sms: Make sms_decode_text public
This can be used for cell broadcast messages as well

Signed-off-by: Guido Günther <agx@sigxcpu.org>
2024-12-01 21:41:10 +00:00
Lukas Voegl 68e725d45e broadband-modem-cinterion: implement load_current_modes
Signed-off-by: Lukas Voegl <lvoegl@tdt.de>
2024-11-20 12:07:20 +00:00
Lukas Voegl 32435b430f broadband-modem-cinterion: never discard operator or mode
When setting an operator, AT+COPS overwrites the currently set allowed mode. Equally, the other way around, when setting the current mode, the configured operator is overwritten.

Signed-off-by: Lukas Voegl <lvoegl@tdt.de>
2024-11-20 12:07:20 +00:00
Aleksander Morgado 3de6cca46d broadband-modem-qmi: don't build operator id in network reject indication if it's unknown 2024-11-20 12:56:57 +01:00
Aleksander Morgado b2d52001e4 broadband-modem-qmi: avoid conditional jump due to uninitialized variable in network reject indications
==3851== Conditional jump or move depends on uninitialised value(s)
==3851==    at 0x23CF65: network_reject_indication_cb (mm-broadband-modem-qmi.c:5434)
==3851==    by 0x4D00865: g_cclosure_marshal_VOID__BOXEDv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.7200.4)
==3851==    by 0x4D196FF: g_signal_emit_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.7200.4)
==3851==    by 0x4D19862: g_signal_emit (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.7200.4)
==3851==    by 0x4F7C250: process_indication (qmi-nas.c:70290)
==3851==    by 0x4DFA6C4: __qmi_client_process_indication (qmi-client.c:172)
==3851==    by 0x4DFEE2D: process_indication_idle (qmi-device.c:1697)
==3851==    by 0x4A26C43: g_main_context_dispatch (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4)
==3851==    by 0x4A7C2B7: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4)
==3851==    by 0x4A262B2: g_main_loop_run (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4)
==3851==    by 0x178042: main (main.c:236)

Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/931
2024-11-20 12:56:48 +01:00
Dan Williams ed13e053cd port-probe: fix custom init probing not having open AT port
Referenced commit broke custom init flows because the AT port
was not opened when custom inits were run, which was the case
before the commit landed.

Rework probing flow to follow a step model like much of our
other code, and ensure that the AT port is opened as part
of the custom init flow.

Fixes: 7937a89a37 port-probe: rework and consolidate port probe flow for AT/QCDM/QMI/MBIM

Signed-off-by: Dan Williams <dan@ioncontrol.co>
2024-11-20 11:50:43 +00:00
Bolan Wang 1d43bb0dac plugin,mtk: workaround for invalid rssi threshold on FM350.
FM350 modems report an invalid rssi threshold (always 0) in the signal-state response message.
It results in signal quality not being updated. We can use this patch to workaround this bug.
2024-11-20 10:38:23 +00:00
Aleksander Morgado 87e1e8b2d4 shared-qmi: don't assume LOC assistance data servers is initialized once
0x00007bcb78abf8b4	(libglib-2.0.so.0 -gtestutils.c:3450)		??g_assertion_message
  0x00007bcb78abf928	(libglib-2.0.so.0 -gtestutils.c:3476)		??g_assertion_message_expr
  0x00005594f143b221	(ModemManager -mm-shared-qmi.c:6651)		loc_location_get_predicted_orbits_data_source_indication_cb
  0x00007bcb78866043	(libgobject-2.0.so.0 -gmarshal.c:1686)		??g_cclosure_marshal_VOID__BOXEDv
  0x00007bcb7886338b	(libgobject-2.0.so.0 -gclosure.c:895)		_g_closure_invoke_va
  0x00007bcb78878a10	(libgobject-2.0.so.0 -gsignal.c:3472)		??g_signal_emit_valist
  0x00007bcb78879486	(libgobject-2.0.so.0 -gsignal.c:3622)		??g_signal_emit
  0x00007bcb785acc70	(libqmi-glib.so.5 -qmi-loc.c:16976)		process_indication
  0x00007bcb78520ede	(libqmi-glib.so.5 -qmi-device.c:1697)		process_indication_idle
  0x00007bcb78a9b75c	(libglib-2.0.so.0 -gmain.c:3460)		??g_main_dispatch
  0x00007bcb78a9b75c	(libglib-2.0.so.0 -gmain.c:4200)		??g_main_context_dispatch
  0x00007bcb78a9ba81	(libglib-2.0.so.0 -gmain.c:4276)		g_main_context_iterate
  0x00007bcb78a9bcff	(libglib-2.0.so.0 -gmain.c:4479)		??g_main_loop_run
  0x00005594f13a7463	(ModemManager -main.c:236)		??main
  0x00007bcb7825c705	(libc.so.6 -libc_start_call_main.h:58)		??__libc_start_call_main
  0x00007bcb7825c7c1	(libc.so.6 -libc-start.c:360)		??__libc_start_main_impl
  0x00005594f13a6da0	(ModemManager + 0x000b5da0)		??_start
2024-11-12 18:21:25 +00:00
Daniele Palmas 3457df7df0 broadband-modem-telit: fix endless loop when enabling events in secondary port 2024-11-09 02:45:51 +00:00
Florian Eckert 33107894ee fibocom: add NL668-EAU to rules file
The NL668-EAU is a 4G, 3G, 2G CAT4 modem from fibocom.
https://www.fibocom.com/en/products/LTECat-NL668-EAU.html

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
2024-11-08 09:05:09 +01:00
Florian Eckert cf2fd4d2e1 fibocom: add additional USB_VID for NL668-EAU
The NL668-EAU 4G, 3G, 2G CAT4 is a modem from fibocom and is using a diffrent
USB_VID for this modem. By adding the new USB_VID, the 'fibocom' plugin is
now responsible and not the 'generic' plugin.

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
2024-11-08 09:04:38 +01:00
Aleksander Morgado 9a76a00095 broadband-modem: don't assert Modem interface skeleton during enabling
There is no guarantee that during an enabling operation the skeleton
for the Modem interface unconditionally exists, e.g. the modem may
have been flagged as invalid and untracked from DBus during the
operation.

Just remove the assertion, because mm_iface_modem_enable() will
already cleanly fail if the skeleton object is not found.

   Thread 0 (crashed),
    0  libc.so.6!__pthread_kill_implementation [pthread_kill.c : 44 + 0x0],
    1  libc.so.6!raise [raise.c : 26 + 0xb],
    2  libc.so.6!abort [abort.c : 79 + 0xa],
    3  libglib-2.0.so.0!g_assertion_message [gtestutils.c : 3450 + 0x5],
    4  libglib-2.0.so.0!g_assertion_message_expr [gtestutils.c : 3476 + 0x14],
    5  ModemManager!enabling_step [mm-broadband-modem.c : 0 + 0x7],
    6  libgio-2.0.so.0!g_task_return_now [gtask.c : 1309 + 0x5],
    7  libgio-2.0.so.0!g_task_return [gtask.c : 1378 + 0x8],
    8  ModemManager!parent_enabling_started_ready [mm-broadband-modem-mbim.c : 3239 + 0xd],
    9  libgio-2.0.so.0!g_task_return_now [gtask.c : 1309 + 0x5],
   10  libgio-2.0.so.0!complete_in_idle_cb [gtask.c : 1323 + 0x5],
   11  libglib-2.0.so.0!g_main_dispatch [gmain.c : 3460 + 0x2],
2024-10-29 18:16:27 +00:00