Commit Graph

5929 Commits

Author SHA1 Message Date
Aleksander Morgado
09c5ac061b mmcli,modem: new --inhibit action on the modem object
Modem device inhibition is really a manager action for which we
provide the full modem device 'uid'.

This new operation allows to perform device inhibition using the modem
object as reference, which is more handy than first looking at the
device 'uid' and then running the manager action.

    $ sudo mmcli -m 0 --inhibit
    successfully inhibited device with uid '/sys/devices/pci0000:00/0000:00:14.0/usb1/1-12/1-12.2'
    type Ctrl+C to abort this program and remove the inhibition
    ^C cancelling the operation...
    successfully uninhibited device with uid '/sys/devices/pci0000:00/0000:00:14.0/usb1/1-12/1-12.2'
2019-01-03 21:05:58 +01:00
Aleksander Morgado
2212d3e054 api,manager: new InhibitDevice() method
This new method allows users of the ModemManager API to take full
control of a given device.

Unlike other operations in the API, the inhibition is maintained as
long as the caller exists in the bus, or until the same caller
uninhibits the device.

https://gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/98
2019-01-03 21:05:58 +01:00
Aleksander Morgado
e3766aef5d dell,dw5821e: also report QMI PDC based update available 2019-01-03 18:53:52 +00:00
Aleksander Morgado
87712c27f5 api,firmware: MMModemFirmwareUpdateMethod as flags, not enum
Devices may require/support more than one update method, so instead of
reporting the method as a single enum value, use a set of flags
instead.
2019-01-03 18:53:52 +00:00
Aleksander Morgado
f35d64a899 api,firmware: expose firmware version 2019-01-03 18:53:52 +00:00
Aleksander Morgado
67b3b830c8 api,firmware: expose device ids 2019-01-03 18:53:52 +00:00
Aleksander Morgado
bc39201f76 kerneldevice: allow loading device revision 2019-01-03 18:53:52 +00:00
Aleksander Morgado
dcd49dee88 mmcli,firmware: avoid empty output if firmware status unsupported 2019-01-03 18:53:52 +00:00
Aleksander Morgado
f69098819b iface-modem-firmware: List() and Select() are now optional
Since the Firmware interface now contains more actions and properties
apart from List() and Select(), these two actions are now optional.

Not all modems implementing the Firmware interface must implement
these two methods.
2019-01-03 18:53:52 +00:00
Aleksander Morgado
fc02b1320c quectel: report fastboot-based firmware update method and settings
We'll check for AT+QFASTBOOT support during runtime.
2019-01-03 18:53:52 +00:00
Aleksander Morgado
4b21546f53 dell,dw5821e: report fastboot-based firmware update method and settings
The DW5821e uses the AT^FASTBOOT command to reset the module in
fastboot mode, ready to download new firmware.

Note: we cannot use AT^FASTBOOT=? to query for support, as that
command also triggers the reset :/
2019-01-03 18:53:52 +00:00
Aleksander Morgado
3c7437d791 iface-modem-firmware: make the interface always available
We no longer "check for support" of this interface, it will always be
available for all modem objects.

The only implementation that used this interface was the QMI one, and
only for a very small subset of devices (those supporting the "QMI DMS
List Stored Images" operation). The logic was changed so that the list
of stored images wasn't preloaded during the support check; it will
now instead be preloaded during the first call to List().
2019-01-03 18:53:52 +00:00
Aleksander Morgado
8e342cf120 api,firmware: new UpdateSettings property 2019-01-03 18:53:52 +00:00
Aleksander Morgado
edf8d34939 api,firmware: remove unimplemented Install() method details 2019-01-03 18:53:52 +00:00
Aleksander Morgado
55c3026643 api: deprecate 'number' in bearer properties
https://gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/99
2019-01-03 16:42:18 +00:00
Aleksander Morgado
5dc79ce606 libmm-glib: add autoptr cleanup functions for all types
https://gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/100
2019-01-03 16:40:47 +00:00
Khem Raj
2b18af89b4 Do not pass null string to %s printf formatted string
Here the string is already decided to be NULL and passing
a null pointer to %s will not work

Fixes
error: '%s' directive argument is null

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2018-12-18 23:30:10 -08:00
Aleksander Morgado
ef942ca564 iface-modem-firmware: fix reporting empty firmware list
ModemManager[2804]: <warn>  [1545055222.508649] No valid firmware images listed. Assuming firmware unsupported.
    ModemManager[2804]: <debug> [1545055222.508665] firmware list loading failed: unsupported
    ModemManager[2804]: <debug> [1545055222.508683] Couldn't load firmware image list: firmware list unknown
    ModemManager[2804]: <debug> [1545055222.508728] Couldn't load current firmware image: current firmware unknown

    (ModemManager:2804): GLib-CRITICAL **: 15:00:22.508: g_variant_builder_end: assertion '!GVSB(builder)->uniform_item_types || GVSB(builder)->prev_item_type != NULL || g_variant_type_is_definite (GVSB(builder)->type)' failed

    Thread 1 "ModemManager" received signal SIGTRAP, Trace/breakpoint trap.
    0x00007ffff75b39b6 in ?? () from /usr/lib/libglib-2.0.so.0
    (gdb) bt
    #0  0x00007ffff75b39b6 in  () at /usr/lib/libglib-2.0.so.0
    #1  0x00007ffff75b4363 in g_logv () at /usr/lib/libglib-2.0.so.0
    #2  0x00007ffff75b4560 in g_log () at /usr/lib/libglib-2.0.so.0
    #3  0x00007ffff758867d in g_variant_builder_end () at /usr/lib/libglib-2.0.so.0
    #4  0x00005555555e4d12 in load_current_ready (self=0x55555579c330, res=0x5555557388e0, ctx=0x5555557d6d80) at mm-iface-modem-firmware.c:84
    #5  0x00007ffff778f194 in  () at /usr/lib/libgio-2.0.so.0
    #6  0x00007ffff778f1c9 in  () at /usr/lib/libgio-2.0.so.0
    #7  0x00007ffff75c4271 in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0
    #8  0x00007ffff75c5f89 in  () at /usr/lib/libglib-2.0.so.0
    #9  0x00007ffff75c6f62 in g_main_loop_run () at /usr/lib/libglib-2.0.so.0
    #10 0x0000555555597aa0 in main (argc=2, argv=0x7fffffffe488) at main.c:181
2018-12-17 15:06:56 +01:00
Aleksander Morgado
85ac6f12f5 docs,libmm-glib: update copyright 2018-12-17 14:45:55 +01:00
Aleksander Morgado
1a14b687de ublox,tests: avoid using deprecated band symbols 2018-12-16 09:20:35 +01:00
Aleksander Morgado
7d9c7e0bf4 telit: avoid using deprecated band symbols 2018-12-16 09:20:25 +01:00
Aleksander Morgado
04720d0795 libmm-glib,modem-3gpp: add guards around deprecated symbols 2018-12-16 09:15:52 +01:00
Ben Chan
0d6e2dc9f5 altair-lte: use mm_autoptr instead of g_autoptr
commit 397faef3c5 ("mm-common-helpers: add mm_autoptr helpers for
GRegex and GMatchInfo") introduces mm_autoptr(), which implements
g_autoptr() that isn't available before glib 2.44. This patch fixes the
code to consistently uses mm_autoptr().
2018-12-13 10:48:21 +01:00
Bob Ham
1cee215f83 base-call: Increase incoming call timeout to ten seconds
The standard says a RING or CRING should be emitted whenever the
network sends an incoming call notification, which is nation-specific:

  "Interpretation of indications from the network to determine what
  constitutes a "ring" is defined by national regulations.  This
  result code should be repeated each time the network repeats the
  incoming call indication."  -- ITU-T Rec. V.250, p. 42

On the giffgaff (O2) network in the UK, a SIMCom SIM7100E modem emits
RING indicators every six seconds.  The current timeout is only five
seconds resulting in a stream of timed-out ModemManager call objects
whenever there is an incoming call.  To fix this, we increase the
timeout to ten seconds.
2018-12-12 17:05:42 +00:00
Bob Ham
318d453532 base-call: Fix in-call URC regex to match handler logic
The handler assumes the regex sub-expressions each have the same index
so they need to be within the same set of parentheses rather than each
individually parenthesised.  Without this fix, call state changes are
missed.
2018-12-12 11:13:02 +00:00
Aleksander Morgado
6d273839e9 docs,libmm-glib: add missing methods for the Version property 2018-12-10 13:23:54 +01:00
LiuQiFeng
26e269ec70 dell: support XMM-based devices 2018-12-10 13:13:53 +01:00
Aleksander Morgado
e198ec7f2a base-manager: load subsys/name once in device_added() 2018-12-09 10:02:18 +01:00
Bob Ham
e34699cc9e policy: Call method name should be SendDtmf rather than SendTone
The method on MMBaseCall is send_tone but the D-Bus method call is
SendDtmf.  Without this patch, calls return
org.freedesktop.DBus.Error.AccessDenied.
2018-12-07 16:47:43 +00:00
Aleksander Morgado
cae7377a61 iface-modem: always connect all method handlers, even in failed state
So that the returned error is much more descriptive.

E.g. instead of this:
    $ sudo mmcli -m 0 -e
    error: couldn't enable the modem: 'GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: Method Enable is not implemented on interface org.freedesktop.ModemManager1.Modem'
We'll get this:
    $ sudo mmcli -m 0 -e
    error: couldn't enable the modem: 'GDBus.Error:org.freedesktop.ModemManager1.Error.Core.WrongState: modem in failed state'

https://gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/96
2018-12-07 16:23:52 +00:00
Aleksander Morgado
27276bf862 iface-modem: remove redundant logic to update failed state
When the MMIfaceModem initialization returns with the SIM_NOT_INSERTED
error, the base logic is already updating the modem failed reason to
SIM_MISSING. There is no need to do that explicitly for the case where
SIM hot swap is supported.
2018-12-07 16:23:52 +00:00
Aleksander Morgado
f4941ede66 xmm,dell: add defaults for MBIM-derived objects
For subclasses of MMBroadbandModemMbim, also apply the same property
defaults. E.g. we want to avoid peridic signal quality polling and we
also want to report that SIM hot swap is supported.
2018-12-07 16:23:21 +00:00
Aleksander Morgado
88e4c0492d cli,modem: output should include all 3GPP EPS fields always
Even if some fields wouldn't apply to some modem, we're always
including all in the output so that clients can assume the fields are
always given.

Fix adding the 3GPP EPS related fields unconditionally.
2018-12-07 16:20:53 +00:00
Aleksander Morgado
c12b5fa027 broadband-modem-mbim: implement initial EPS bearer settings updating
We use the "LTE attach config" extension defined by Microsoft to update
the initial EPS bearer settings.

https://docs.microsoft.com/en-us/windows-hardware/drivers/network/mb-lte-attach-operations
2018-12-07 16:20:53 +00:00
Aleksander Morgado
2b25673f34 broadband-modem-mbim: implement initial EPS bearer settings loading
We use the "LTE attach config" extension defined by Microsoft to query
the initial EPS bearer settings.

https://docs.microsoft.com/en-us/windows-hardware/drivers/network/mb-lte-attach-operations
2018-12-07 16:20:53 +00:00
Aleksander Morgado
1e09b586a7 broadband-modem-mbim: implement initial EPS bearer status support
We use the "LTE attach status" extension defined by Microsoft to query
and monitor the initial EPS bearer settings.

https://docs.microsoft.com/en-us/windows-hardware/drivers/network/mb-lte-attach-operations
2018-12-07 16:20:53 +00:00
Aleksander Morgado
48ba504f4e helpers-mbim: new method to convert IP type settings to/from MM 2018-12-07 16:20:53 +00:00
Aleksander Morgado
d6e2c69129 helpers-mbim: new method to convert auth settings to/from MM 2018-12-07 16:20:53 +00:00
Aleksander Morgado
4cb6751daf api,modem-3gpp: new 'SetInitialEpsBearerSettings' method
This method allows users to modify the settings used during the
initial LTE attach procedure.
2018-12-07 16:20:53 +00:00
Aleksander Morgado
8281b5048b api,modem-3gpp: new 'InitialEpsBearerSettings' property
This property shows the settings stored in the device to be used
during the initial LTE attach procedure.
2018-12-07 16:20:53 +00:00
Aleksander Morgado
9c3ac2fb60 api,modem-3gpp: new 'InitialEpsBearer' property
This property contains the DBus path of a Bearer object of type
MM_BEARER_TYPE_DEFAULT_ATTACH, which is automatically exposed by the
modem when registered in the LTE network.

Unlike standard bearer objects created by the user, this bearer won't
allow any connection/disconnection request, as its status is bound to
the LTE registration exclusively.

The bearer settings exposed by the object include the APN details that
have been used during the initial packet network attach, which may be
defined by modem settings (e.g. if previously configured in the
firmware which APN to use for the given SIM card operator) or by the
network itself (e.g. if none configured, or if a network override is
required as when roaming).

The bearer object will be created as soon as the LTE attach status
details are known, and only while the modem is enabled. The
implementation allows modems to update the LTE attach status details
during runtime, so the bearer object with the settings may be
recreated during runtime as well.
2018-12-07 16:20:53 +00:00
Aleksander Morgado
dc154cf005 api,bearer: new 'BearerType' property
Until now we have only allowed to use and setup 'default bearers' (in
4G) or 'primary contexts' (in 2G/3G).

We can define a couple of additional bearer types, though:

* The 'dedicated bearers' (in 4G) or 'secondary contexts' (in 2G/3G),
  which are associated to a specific default/primary one, but which
  provide specific QoS settings configured via traffic flow templates.

* The 'initial default EPS bearer', which is a special case of default
  bearer in LTE, which is automatically created and connected when the
  modem is registered in the LTE network.

This commit introduces a new 'MMBearerType' enumeration that will be
associated to each bearer through a 'BearerType' property in the
org.freedesktop.ModemManager1.Bearer interface, showing what kind of
bearer/context this is.

By default, right now, all bearer objects created are 'default'
bearers.
2018-12-07 16:20:53 +00:00
Aleksander Morgado
46d627ff83 libmm-glib: fix mm_manager_scan() operation
The reporting of the operation result was reversed in the async method.
2018-12-07 17:00:36 +01:00
Aleksander Morgado
1ef58be792 libmm-glib: fix mm_manager_set_logging() operation
The reporting of the operation result was reversed in the async method.
2018-12-07 16:59:44 +01:00
Dan Williams
397faef3c5 mm-common-helpers: add mm_autoptr helpers for GRegex and GMatchInfo
Alias them to g_autoptr() on glib >= 2.44, otherwise re-implement.
2018-12-04 17:39:15 +00:00
Aleksander Morgado
9c15579347 build: version bump to flag existence of new API (runtime version reporting) 2018-12-04 17:26:59 +00:00
Aleksander Morgado
c7af14cc80 api,manager: new 'Version' property
This string shows the runtime version of the ModemManager daemon.

https://gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/94
2018-12-04 17:26:59 +00:00
Aleksander Morgado
d0bb8d1d50 libmm-glib,manager: fix manager interface proxy creation
We were re-using the GDBusObjectManagerClientFlags set in the
MMManager object as GDBusProxyFlags for the Manager1 interface proxy
object, and that was completely broken.

Instead of setting "DO_NOT_AUTO_START" in the proxy, we were actually
setting "DO_NOT_LOAD_PROPERTIES"...
2018-12-04 17:26:59 +00:00
Aleksander Morgado
3b743dcc36 helpers-qmi: fix UTRAN band 6 vs band 19 mapping
Looks like the original band 6 mapping was ok, and the mismatch was
introduced when adding support for band 19.

https://forum.sierrawireless.com/t/utran-19-band-configuration-in-sdk/14625

Fixes 518d62e731.
2018-12-03 17:43:21 +00:00
Ben Chan
03fdb33e1c cli,output: include string.h for strlen()
This patch fixes the following compiler warning:

mmcli-output.c:783:19: error: implicitly declaring library function 'strlen' with type 'unsigned long (const char *)' [-Werror,-Wimplicit-function-declaration]
            aux = strlen (section_infos[field_infos[item_l->field].section].name);
                  ^
2018-11-30 11:36:07 +01:00