Commit Graph

5661 Commits

Author SHA1 Message Date
Ben Chan
b6de1ad22e broadband-modem-qmi: port modem_3gpp_register_in_network to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
a3123cadd8 broadband-modem-qmi: port modem_3gpp_scan_networks to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
f3b2deadda broadband-modem-qmi: port modem_3gpp_load_enabled_facility_locks to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
8ad01d31ac broadband-modem-qmi: port common_setup_cleanup_unsolicited_registration_events to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
df0d2f9552 broadband-modem-qmi: port common_setup_cleanup_messaging_unsolicited_events to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
85eb5bdcbd broadband-modem-qmi: port common_setup_cleanup_unsolicited_events to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
baefe53ab9 broadband-modem-qmi: port common_enable_disable_unsolicited_events to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
c0669e98ae broadband-modem-qmi: port set_current_capabilities to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
bdc3729cba broadband-modem-qmi: port set_current_bands to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
4a53e7cc39 broadband-modem-qmi: port set_current_modes to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
7d8f0600e6 broadband-modem-qmi: port signal_load_values to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
8047f54083 broadband-modem-qmi: port load_power_state to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
0502fe042b broadband-modem-qmi: port load_signal_quality to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
77a875a1b0 broadband-modem-qmi: port load_current_modes to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
51ede979bf broadband-modem-qmi: port modem_load_equipment_identifier to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
6b14a1cf1b broadband-modem-qmi: port modem_load_current_bands to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
834674b21c broadband-modem-qmi: port modem_load_supported_bands to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
59c8ba8642 broadband-modem-qmi: port modem_load_own_numbers to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
4dc5652520 broadband-modem-qmi: port modem_load_hardware_revision to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
2f8a041122 broadband-modem-qmi: port modem_load_revision to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
3c17065636 broadband-modem-qmi: port modem_load_model to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
0bf2800d05 broadband-modem-qmi: port modem_load_manufacturer to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
dba8702952 broadband-modem-qmi: port modem_load_supported_capabilities to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
3e374e228a broadband-modem-qmi: port modem_load_current_capabilities to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
31c0da2825 broadband-modem-qmi: port common_power_up_down_off to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
71d21cba02 broadband-modem-qmi: port power_cycle to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
f52264d78a broadband-modem-qmi: port modem_reset to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
15ffa69d72 broadband-modem-qmi: port modem_factory_reset to use GTask 2018-06-02 17:56:59 +02:00
Ben Chan
641e1b8a43 broadband-modem-qmi: add a temporary assure_qmi_client() helper
ensure_qmi_client() uses g_simple_async_report_take_gerror_in_idle(),
which can't be mixed with GTask. To allow migrating remaining
MMBroadbandModemQmi code to use GTask in a series of smaller patches,
this patch adds a temporary assure_qmi_client() helper, which mimics
ensure_qmi_client() but uses g_task_report_new_error(). Once all the
MMBroadbandModemQmi code is migrated to use GTask, we will drop the old
ensure_qmi_client() and renames assure_qmi_client() back to
ensure_qmi_client().
2018-06-02 17:56:59 +02:00
Aleksander Morgado
0e770b13f8 base-modem: setup a maximum number of timeouts also for USB modems
We have a maximum number of timeouts that could be enabled for TTY
modems, e.g. to detect whether the modem is available in the RS232
port or has been unplugged. This was required because RS232 modems
aren't notified via udev, so there was no other way to check presence
of the modem.

But, the same kind of checks may be used in order to detect failed
broken modems. If we have a modem that gets into an unstable state
where no AT port command goes through and all get timed out, we can
definitely flag the modem as invalid and get rid of it. If we don't do
this, we would end up leaving the modem exposed and available for
users of the API, but in a non-working state.

    ....
    <info>  Modem /org/freedesktop/ModemManager1/Modem/0: state changed (registered -> connecting)
    <debug> Launching 3GPP connection attempt with APN 'telefonica.es'
    <debug> Looking for best CID...
    <debug> (ttyACM2) device open count is 2 (open)
    <debug> (ttyACM2): --> 'AT+CGDCONT?<CR>'
    <debug> Unexpected +CGDCONT? error: 'Serial command timed out'
    <warn>  (tty/ttyACM2) at port timed out 9 consecutive times
    <debug> Using empty CID 1 with PDP type 'ipv4'
    <debug> (ttyACM2) device open count is 3 (open)
    <debug> (ttyACM2) device open count is 2 (close)
    <debug> (ttyACM2): --> 'AT+CGDCONT=1,"IP","telefonica.es"<CR>'
    <warn>  Couldn't initialize PDP context with our APN: 'Serial command timed out'
    <debug> Couldn't connect bearer '/org/freedesktop/ModemManager1/Bearer/0': 'Serial command timed out'
    <info>  Modem /org/freedesktop/ModemManager1/Modem/0: state changed (connecting -> registered)
    <debug> Couldn't connect bearer: 'Serial command timed out'
    <debug> (ttyACM2) device open count is 1 (close)
    <error> (tty/ttyACM2) at port timed out 10 consecutive times, marking modem '/org/freedesktop/ModemManager1/Modem/0' as invalid
    <debug> Removing from DBus bearer at '/org/freedesktop/ModemManager1/Bearer/0'
    <debug> [device /sys/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.5] unexported modem from path '/org/freedesktop/ModemManager1/Modem/0'
    <debug> Periodic signal checks disabled
    <debug> (ttyACM2) device open count is 0 (close)
    <debug> (ttyACM2) closing serial port...
    <debug> (ttyACM2) serial port closed
    <debug> (ttyACM2) forced to close port
    <debug> Modem (u-blox) '/sys/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.5' completely disposed
2018-06-02 17:54:54 +02:00
Aleksander Morgado
b4748ba674 build: post release version bump to 1.9.0 2018-06-02 17:46:48 +02:00
Aleksander Morgado
c187c5fef5 release: bump version to 1.8.0 2018-06-02 17:33:53 +02:00
Aleksander Morgado
01a5d8a294 NEWS: update for 1.8 2018-06-02 17:33:53 +02:00
Aleksander Morgado
c07382a486 udev: add tags also on bind action
When a new USB device is hotplugged, e.g. a USB<->RS232 converter that
exposes a single ttyUSB0, these udev events happen:

  add  /devices/pci0000:00/0000:00:14.0/usb2/2-1 (usb/usb-device)
  add  /devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1:1.0 (usb/usb-interface)
  add  /devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1:1.0/ttyUSB0 (usb-serial)
  add  /devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1:1.0/ttyUSB0/tty/ttyUSB0 (tty)
  bind /devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1:1.0/ttyUSB0 (usb-serial)
  bind /devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1:1.0 (usb/usb-interface)
  bind /devices/pci0000:00/0000:00:14.0/usb2/2-1 (usb/usb-device)

Our udev rules in MM only added tags in the 'add' events, and it looks
like the only ones 'persistent' after this sequence are those of the
last event happening on the specific path.

This meant that all TTY subsystem rules (e.g. ID_MM_CANDIDATE) would
be stored for later check (e.g. if ModemManager is started after these
rules have been applied), which was ok. "udevadm info -p ..." would
show these tags correctly always.

But this also meant that the 'bind' udev event happening for the USB
device didn't get any of our device-specific tags, and so we would be
missing them (e.g. ID_MM_DEVICE_MANUAL_SCAN_ONLY) if MM is started
after the last event has happened. "udevadm info -p ..." would
not show these tags.

Modify all our rules to also run at the 'bind' events.

See, for context:
  https://github.com/systemd/systemd/issues/8221
2018-06-02 16:54:37 +02:00
Aleksander Morgado
4bc7d6862d u-blox: wait 20s before probing TOBY-L200 ports
https://bugs.freedesktop.org/show_bug.cgi?id=106623
2018-06-02 16:51:07 +02:00
Aleksander Morgado
6c37488d4e broadband-modem-mbim: minor function renames for SMS read logic
There are two ways to report new received SMS messages:
  * For class 0 (flash) messages, MBIM_CID_SMS_READ are sent. The SMS
  comes in the MBIM indication itself.
  * For non-class 0 (standard) messages, a
  MBIM_CID_SMS_MESSAGE_STORE_STATUS notifications are sent, the SMS is
  stored and must be read with an additional MBIM request specifying
  storage index.

The names of the functions we had implied the opposite, we were
assuming flash/alert messages were reported via
MBIM_CID_SMS_MESSAGE_STORE_STATUS, not via MBIM_CID_SMS_READ.
2018-05-27 11:23:56 +02:00
Aleksander Morgado
fd3a4d8d8b filter: pci and sdio ports under the platform driver filter
Do not automatically probe serial ports under the 'pci' or 'sdio'
platform drivers unless explicitly tagged with
ID_MM_PLATFORM_DRIVER_PROBE.

  $ realpath /sys/class/tty/ttyS0/
  /sys/devices/pci0000:00/0000:00:16.3/tty/ttyS0
  $ basename $(realpath /sys/devices/pci0000:00/0000:00:16.3/subsystem)
  pci
2018-05-27 11:06:00 +02:00
Aleksander Morgado
38f9510a98 iface-modem-time: don't hold a ref while waiting to be registered
The logic implementing the network timezone loading was holding a
strong reference to the modem (inside the GTask) while waiting to
be registered.

This was triggering some possible memory leaks as the modem object
could have been left around even after the modem was disconnected.
E.g. if the modem booted without antennas plugged in, it was never
getting registered, and if we unplugged it right away in that state,
the network timezone logic would have left a modem reference around
without disposing it.

This issue, combined with e.g. other interfaces relying on disposing
its own logic with the last object reference (e.g. Signal interface
sets up its logic in a context bound to the lifetime of the object)
would mean that a lot of different logic blocks were kept running even
after the modem device was unplugged from the system.

We avoid this issue by making sure that no new additional reference is
taken by the logic in charge of updating the network timezone. We just
make the timezone update context be bound to the lifetime of the
object, as other interfaces do.

While doing this, we also remove the logic in charge of "cancelling"
the context, as it isn't needed. If the logic needs to be cancelled,
we would just remove any configured timeout, which is enough.

As part of the changes, the logic has also been improved so that the
network timezone isn't only updated the first time the modem gets
registered. If the modem gets unregistered and re-registered, we would
reload the network timezone information.
2018-05-27 11:01:42 +02:00
Dan Williams
67ecad51e1 filter: add 'nozomi' and 'qcaux' drivers to MM_FILTER_RULE_TTY_DRIVER
nozomi and qcaux only drive modems and thus should be included
in this filter rule.  Allows nozomi/qcaux devices to work
automatically with strict filter mode.
2018-05-24 10:00:10 -05:00
Dan Williams
aecc3e99a0 include: fix up whitespace 2018-05-24 10:00:10 -05:00
Dan Williams
b074a2b4a4 include: add more 3GPP errors
From 3GPP TS 27.007 version 11.6.0 Release 11, sections 9.2.1,
9.2.2.1, 9.2.2.2, and 9.2.2.3.
2018-05-22 12:03:28 -05:00
Matthew Stanger
ac5d068e37 broadband-modem: increase signal_quality_cind() poll CIND timeout
Gemalto's PLS8 may timeout on 3 second CIND query. Debug log shows
5 seconds should suffice.
2018-05-20 08:44:09 +02:00
Ben Chan
051b15cca8 iface-modem-3gpp: ignore initial registration check result when enabling
This patch extends commit c9e85b671 ("iface-modem-3gpp: ignore initial
registration check result when appropriate") to handle the situation
where a registration check update may prematurely transition the modem
to the 'enabled' state while the modem is still being enabled.

The issue is identified by Dan Williams <dcbw@redhat.com>. More details
can be found in https://bugs.freedesktop.org/show_bug.cgi?id=106468
2018-05-18 22:10:34 +02:00
Aleksander Morgado
3e469e7b80 u-blox: don't run quick AT procedure if READY_DELAY not configured
The quick AT probe procedure is only meaningful to avoid waiting the
+READY URC delay. If there is no such delay configured, we shouldn't
run the quick AT probe (as a failure in the AT probe may also
trigger a +READY URC delay).

Just read the udev tag value early and complete the task if the delay
is not configured.
2018-05-08 09:51:19 +02:00
Matthew Starr
1a56b97061 ublox: use ID_MM_UBLOX_PORT_READY_DELAY udev flag as init delay
Added reading the ID_MM_UBLOX_PORT_READY_DELAY udev flag value and using
it as an init delay when a value is set.

The 20 second delay for the TOBY-L4 +READ URC has been reimplemented
using the new ID_MM_UBLOX_PORT_READY_DELAY udev value.
2018-05-08 09:43:15 +02:00
Aleksander Morgado
6be6aa474f filter: fix option1 driver name
This was preventing TTY-only ZTE and Huawei modules from being grabbed
in STRICT mode.

https://bugs.freedesktop.org/show_bug.cgi?id=106253
https://bugs.freedesktop.org/show_bug.cgi?id=106234
2018-05-07 18:27:26 +02:00
Matthew Starr
4895577597 u-blox: ignore non-AT ttyACM interfaces
For the TOBY-R2, LISA-R2, and LARA-R2, the only valid AT ports are
ttyACM0, ttyACM1, and ttyACM2.  All other ttyACM ports cause MM to
wait 20-30 seconds probing the port on startup.

Ignoring the non-AT ttyACM ports allows MM to not wait 20-30 seconds
probing and therefore startup much faster with these modems.
2018-04-30 18:29:39 +02:00
Aleksander Morgado
e17d5a51a2 broadband-bearer: allow matching empty APN when looking for PDP CID
The PDP contexts that are found with an empty APN configured are right
now used as placeholders that can be overwritten with the user
provided APN if no direct match is found.

We want to keep that logic in place, but for the case where we do get
an empty APN requested by the user, we need to perform the full
context match, so that the first PDP context matching the empty APN is
used.

Right now we're overwriting with the empty APN again the last PDP
context found with an empty APN, which doesn't make much sense:

    Apr 27 08:15:21 ModemManager[4251]: <debug> Found '3' PDP contexts
    Apr 27 08:15:21 ModemManager[4251]: <debug>   PDP context [cid=1] [type='ipv4'] [apn='']
    Apr 27 08:15:21 ModemManager[4251]: <debug>   PDP context [cid=2] [type='ipv4'] [apn='broadband']
    Apr 27 08:15:21 ModemManager[4251]: <debug>   PDP context [cid=15] [type='ipv4'] [apn='']
    Apr 27 08:15:21 ModemManager[4251]: <debug> Found PDP context with CID 1 and no APN
    Apr 27 08:15:21 ModemManager[4251]: <debug> Found PDP context with CID 15 and no APN
    Apr 27 08:15:21 ModemManager[4251]: <debug> (ttyUSB3) device open count is 3 (open)
    Apr 27 08:15:21 ModemManager[4251]: <debug> (ttyUSB3) device open count is 2 (close)
    Apr 27 08:15:21 ModemManager[4251]: <debug> (ttyUSB3): --> 'AT+CGDCONT=15,"IP",""<CR>'
    Apr 27 08:15:21 ModemManager[4251]: <debug> (ttyUSB3): <-- '<CR><LF>OK<CR><LF>'
2018-04-30 18:25:49 +02:00
Aleksander Morgado
43d0bd0f91 base-modem: improve broken modem detection logic
If the serial port timeout detection logic is enabled, warn whenever
more than one consecutive command timeout happens, not just when the
limit is reached.
2018-04-30 18:23:39 +02:00
Ben Chan
21c9a239ec broadband-modem-qmi: fix memory leak in dms_set_operating_mode_ready 2018-04-30 09:44:58 +02:00