Commit Graph

7297 Commits

Author SHA1 Message Date
Ben Chan
adc30c7073 iface-modem-location: port setup_gathering to use GTask 2017-06-27 10:27:13 +02:00
Ben Chan
ed8cc03f97 iface-modem-location: port mm_iface_modem_location_disable to use GTask 2017-06-27 10:27:13 +02:00
Ben Chan
292f2402d0 libmm-glib,voice: port mm_modem_voice_list_calls to use GTask 2017-06-25 09:47:58 +02:00
Ben Chan
9bf9d036ec libmm-glib,voice: port mm_modem_voice_create_call to use GTask 2017-06-25 09:47:58 +02:00
Ben Chan
135fc84cf1 libmm-glib,messaging: port mm_modem_messaging_list to use GTask 2017-06-25 09:47:58 +02:00
Ben Chan
498400d943 libmm-glib,messaging: port mm_modem_messaging_create to use GTask 2017-06-25 09:47:58 +02:00
Ben Chan
aebc1f3f6c libmm-glib,modem: port mm_modem_list_bearers to use GTask 2017-06-25 09:45:18 +02:00
Ben Chan
23206d794a libmm-glib,modem: port mm_modem_create_bearer to use GTask 2017-06-23 22:32:08 +02:00
Ben Chan
d84bb54e77 libmm-glib,modem: port mm_modem_get_sim to use GTask 2017-06-23 22:32:08 +02:00
Ben Chan
2327ebddf1 libmm-glib: use g_list_copy_deep for deep copying a GList 2017-06-23 22:32:07 +02:00
Ben Chan
8ad785925a core: use g_list_copy_deep for deep copying a GList 2017-06-23 22:32:07 +02:00
Ben Chan
19794d0846 libmm-glib,manager: port mm_manager_scan_devices to use GTask 2017-06-23 10:26:53 +02:00
Ben Chan
2f3d9642f6 libmm-glib,manager: port mm_manager_set_logging to use GTask 2017-06-23 10:26:52 +02:00
Ben Chan
56ec672669 libmm-glib,simple: port mm_modem_simple_connect to use GTask 2017-06-23 10:26:50 +02:00
Ben Chan
9920f868eb libmm-glib,voice: fix object unref in list_call_context_complete_and_free 2017-06-23 10:09:08 +02:00
Ben Chan
c927c0236e libmm-glib,modem: fix object unref in list_bearers_context_complete_and_free 2017-06-23 10:09:08 +02:00
Ben Chan
8c1bc84af8 libmm-glib,messaging: fix object unref in list_sms_context_complete_and_free 2017-06-23 10:09:08 +02:00
Aleksander Morgado
4d6896f0d9 build: rename --with-suspend-resume to --with-systemd-suspend-resume
And only define WITH_SYSTEMD_SUSPEND_RESUME when enabled.

We already have other systemd specific features under the
--with-systemd-* name scheme, so consolidate that, given that we don't
have any other method to support suspend/resume notifications.
2017-06-22 10:51:40 +02:00
Aleksander Morgado
b2a859a782 build: WITH_UDEV is only defined when enabled
Looks like the preprocessor doesn't choke when using #if WITH_UDEV and
it isn't defined to any value, but anyway, better explicitly say that
we're checking if it's defined or not.
2017-06-22 10:43:45 +02:00
Aleksander Morgado
341555504e build: only define WITH_SYSTEMD_JOURNAL if enabled 2017-06-22 10:40:58 +02:00
Aleksander Morgado
acf36f2ae0 build: only define WITH_POLKIT if enabled 2017-06-22 10:26:12 +02:00
Torsten Hilbrich
fd0bed1df9 log: Add support for journal logging
This logging is available if the software was build with the configure
option --with-systemd-journal.

It will be enabled by default if libsystemd is found.

The runtime parameter --log-journal enables to output of log messages
to the systemd journal.

Please note that the journal priority field has the same value as the
syslog level so no conversion is required here.
2017-06-21 13:08:17 +02:00
Torsten Hilbrich
13592c5d2d log: Introduce function pointer to handle different log backends
This allows for easier additions of other logging mechanism.

Using the syslog loglevel as parameter because we need to be able to
map the MMLogLevel and the GLogLevelFlags to a common representation
when using the log_backend in _mm_log and log_handler.

The syslog level is more suitable because it supports more values than
the MMLogLevel.
2017-06-21 13:06:23 +02:00
Torsten Hilbrich
7917c85c6b log: Add mapping from glib loglevel to syslog priority
Improves readability of log_handler function.
2017-06-21 13:05:27 +02:00
Torsten Hilbrich
9160f4e350 log: Refactor log level text output
Adding a helper function to turn the log level into the text. Also
add an internal flag to disable this output. This flag will become
useful when adding systemd journal support.
2017-06-21 13:04:24 +02:00
Torsten Hilbrich
b4ad1e8a21 log: Refactor evaluation of log level
Starting with adding a typed enum type for the log level named
MMLogLevel.

Suggested-By: Aleksander Morgado <aleksander@aleksander.es>

The level was checked twice in _mm_log. Once at the beginning and
again when turning the level into both the syslog priority and some
descriptive text which was added to the log level. Removing the check
at the second location as it was redundant.

Also adding a helper function to turn the MMLogLevel into the syslog
equivalent. This will become handy when adding support for systemd
journal.
2017-06-21 13:02:39 +02:00
Aleksander Morgado
0e854644db systemd: drop After=syslog.target rule
syslog implementations are using socket activation nowadays, so an
explicit ordering is not necessary anymore. Plus, syslog.target was
already dropped from systemd in v198.

Reported-by: Michael Biebl <biebl@debian.org>
2017-06-18 10:01:11 +02:00
Daniele Palmas
4dbea97e1b telit: fix #PSNT values interpretation for HSDPA and LTE modems
Telit LTE modems use #PSNT: 4 for LTE access technology,
and #PSNT: 5 for unknown access technology, while HSDPA
modems use #PSNT: 4 for unknown access technology.

This patch fixes those #PSNT values interpretation according
to the modem capabilities.
2017-06-16 19:46:57 +02:00
Daniele Palmas
5820666495 helpers: extend +WS46=? response parser to support ranges
Telit LTE modems could reply to +WS46=? with:

+WS46: (12,22,25,28-31)

This patch extends +WS46=? response parser to support ranges.
2017-06-16 15:48:18 +02:00
Dan Williams
e37e81c2e4 broadband-modem-qmi: allow prefix match for Modem images ending with '?'
Assume that a modem image build_id "02.08.02.00_?" matches a pri build_id
of "02.08.02.00_ATT" or "02.08.02.00_GENERIC".
2017-06-14 20:22:49 -05:00
Ben Chan
75e8527987 helpers: remove unnecessary `>= 0' checks on guint value
This CL removes the unnecessary `>= 0' check on `mode_val' and
`ind_val', which are both guint values extracted from a GArray with
guint values, in mm_3gpp_parse_cmer_test_response to address the
following compiler warnings:

mm-modem-helpers.c:2933:22: error: comparison of unsigned expression >=
0 is always true [-Werror,-Wtautological-compare]
        if (mode_val >= 0 && mode_val <= 3)
            ~~~~~~~~ ^  ~
mm-modem-helpers.c:2943:21: error: comparison of unsigned expression >=
0 is always true [-Werror,-Wtautological-compare]
        if (ind_val >= 0 && ind_val <= 2)
            ~~~~~~~ ^  ~
2017-06-07 09:17:15 +02:00
Aleksander Morgado
f4c4e36461 cinterion: use ^SIND unsolicited messages for access tech reporting
If the modem supports ^SIND psinfo reporting, we enable the URC and
flag the access technology polling unsupported, so that we only update
access technology via the +CIEV URCs.

E.g.:

    (ttyACM1): --> 'AT^SIND="psinfo",1<CR>'
    (ttyACM1): <-- '<CR><LF>^SIND: psinfo,1,10<CR><LF><CR><LF>OK<CR><LF>'
    Reporting initial access technologies...
    Modem /org/freedesktop/ModemManager1/Modem/0: access technology changed (unknown -> hsdpa, hsupa)
    ...
    (ttyACM1): <-- '<CR><LF>+CIEV: psinfo,4<CR><LF>'
    Modem /org/freedesktop/ModemManager1/Modem/0: access technology changed (hsdpa, hsupa -> edge)
    ...
2017-06-06 15:21:08 +02:00
Aleksander Morgado
fbfb3d182d port-serial-at: always prepend unsolicited message handlers
The generic modem has several URC handlers for generic messages, like
+CIEV. But, there may be cases where the plugins themselves want to
provide their own URC handlers to be run before the generic one.

This patch enables this setup by always prepending the new URC
handlers, so that the last ones added are processed before the ones
already in the list. So if a plugin does its own unsolicited
messages setup, they can run first the parent setup and then their
own.

The only thing to consider is that the regex provided by the plugin
must be specific enough not to match the specific messages required
by the parent implementation.
2017-06-06 15:21:03 +02:00
Aleksander Morgado
2c19b1f778 iface-modem: if bands, capabilities or modes change, refresh signal
We also remove the explicit refresh request from the Cinterion plugin,
as this is a generic action applicable to all modems that require
polling for signal quality and/or access technology.
2017-06-06 15:20:56 +02:00
Aleksander Morgado
8ad868cea2 iface-modem: consolidate signal quality and access tech polling
Plugins have two ways to update signal quality and access technology
values: via unsolicited messages or via polling periodically.

Instead of keeping separate contexts for polling signal quality and
access technology values, we setup a common timeout to trigger
both. This allows us to simplify in which case the explicit update is
required, whenever one is needed to be explicitly updated, the other
one should also be.

The logic now also allows plugins to return an UNSUPPORTED error in
either load_signal_quality() and/or load_access_technologies() to tell
the interface logic that the polling of the specific item shouldn't be
performed (e.g. if the updates are expected via unsolicited messages).

If both signal quality and access technology polling is flagged as
disabled, we totally disable the polling logic internally.

The new SignalCheckContext is bound to the lifetime of the object so
that we can keep the value of the supported flags until the object is
destroyed.
2017-06-06 15:20:51 +02:00
Aleksander Morgado
34ac81071b base-bearer: use an initial longer timeout for connectivity check
If we ask too quick for the PDP context status after a successful
connection attempt reported by the modem, we may find it still flagged
as inactive if the modem is still busy setting up the PPP session.

Do an explicit longer initial timeout before we run the first check,
and after that one setup the additional checks at a higher rate.

Reported-by: Colin Helliwell <colin.helliwell@ln-systems.com>
2017-06-05 15:18:00 +02:00
Aleksander Morgado
db5619b3eb build,dell: reorder rules last
Dell plugin is a compilation of other plugins, move last.
2017-06-05 15:05:45 +02:00
Aleksander Morgado
d6d7b837b8 build,telit: fix distcheck 2017-06-05 14:46:48 +02:00
Aleksander Morgado
08782995e2 telit: rework QSS unsolicited handler enabling logic
When the async method starts we store already the primary and the
optional secondary port objects in the method context, keeping a full
reference for each.

When we parse the response for the enabling command, we just reuse the
stored port objects, instead of re-querying the modem to get them, and
this makes sure that the port objects where we want to set the
unsolicited message handlers are still valid. If the ports are gone
in the middle of the enabling operation, the handlers will be set
without errors, even if the ports may likely get completely disposed
when this async method context is disposed.

Additionally, we make sure that we return an error also for the case
where there is no secondary port and the enabling on the primary port
failed.

This patch also fixes the use of the at_command_full_finish() method to
complete the at_command_full() async operation, to keep consistency.
2017-06-05 14:04:42 +02:00
Aleksander Morgado
d6779b91b2 telit: make sure QSS status values read are always known
Given that the MMTelitQssStatus enums are mapped directly to the
values read from the #QSS response, we need to make sure that we never
return a value for which we don't have an enum defined.

Also, use set_error() instead of the propagate_error() + error_new()
combo.
2017-06-05 14:04:42 +02:00
Carlo Lobrano
4cd5044bfd telit: manage QSS transitions
Currently, Telit's SIM swap implementation is stateless and
based on #QSS unsolicited messages 0/1 (SIM_REMOVED/SIM_INSERTED).

However, the user might have configured the modem in order to provide a
more detailed information, with #QSS values 2/3 (SIM UNLOCKED/SIM READY).

In this case and with current implementation, even receiving "#QSS: 3" will
trigger the "SIM swap" logic. The same issue might occur in other use cases
too, i.e. with SIM locked or when the message is received from both USB
ports.

This patch makes SIM swap implementation stateful, and it considers as an
actual SIM swap, only transitions from #QSS: 0 to #QSS: 1/2/3 and vice
versa.
2017-06-05 14:04:42 +02:00
Aleksander Morgado
b5e94185bb huawei: let the E3372 run NDISDUP via TTY
This modem ends up exposing a cdc-wdm port and a WWAN network
interface, but the cdc-wdm port is totally unusable, it won't reply to
any AT command or anything.

Instead this modem can do NDISDUP via TTY, which is what the Windows
drivers are also doing.
2017-06-02 13:13:59 +02:00
Aleksander Morgado
e2e2c3e019 cinterion: retry GPS Engine activation up to 3 times
The default setup with 100ms between GPS commands doesn't seem to be
always enough for the Engine activation step:

   [1495016625.392972] (ttyACM1): --> 'AT^SGPSC="NMEA/Output","on"<CR>'
   [1495016625.503885] (ttyACM1): <-- '<CR><LF>^SGPSC: "Nmea/Output","on"<CR><LF><CR><LF><CR><LF>OK<CR><LF>'
   [1495016625.607650] (ttyACM1): --> 'AT^SGPSC="Power/Antenna","on"<CR>'
   [1495016625.697862] (ttyACM1): <-- '<CR><LF>^SGPSC: "Power/Antenna","on"<CR><LF><CR><LF>OK<CR><LF>'
   [1495016625.809393] (ttyACM1): --> 'AT^SGPSC="Engine","1"<CR>'
   [1495016625.895970] (ttyACM1): <-- '<CR><LF>+CME ERROR: 767<CR><LF>'

We now setup up to 3 retries for the Engine activation step before
returning an error, and we also update to 2000ms the wait time before
the Engine activation command is run.
2017-05-30 21:06:12 +02:00
Aleksander Morgado
aa8ac416f8 cinterion: support AT^SGPSC capable modems
The AT^SGPSS command provides an easy way to just start/stop GPS, but
unfortunately it isn't supported by all Cinterion modems.

The AT^SGPSC command instead is more widely available but it requires
several steps to start and stop the different elements of the GPS
receiver.

Implement support for both, preferring AT^SGPSSS if available and
falling back to AT^SGPSC otherwise.
2017-05-30 21:06:04 +02:00
Aleksander Morgado
d772301cd4 cinterion: setup GPS port only if GPS support detected
i.e. if AT^SGPSS not supported, we don't even add traces handler to
the GPS data port.
2017-05-30 21:05:56 +02:00
Aleksander Morgado
1857e9b36e cinterion: flag PLS8 GPS data port 2017-05-30 21:05:50 +02:00
Aleksander Morgado
bf549d1bca cinterion,location: refactor enable/disable and capabilities checks
When checking for location capabilities, we will make sure AT^SGPSS is
supported and if it isn't we won't report GPS capabilities.

The location enable and disable paths are refactored to make it easier
to add possible new GPS commands to use instead of AT^SGPSS, if this
isn't supported (e.g. in the PLS8 devices).
2017-05-30 21:05:44 +02:00
Aleksander Morgado
2eb55d3224 plugins: use G_N_ELEMENTS when iterating ports array 2017-05-30 17:28:23 +02:00
Aleksander Morgado
b874fba0e6 ublox: use send-delay=0 by default
Looks like the u-blox SARA-U260 requires this, see:
https://lists.freedesktop.org/archives/modemmanager-devel/2017-May/004670.html
2017-05-30 17:18:38 +02:00
Aleksander Morgado
fcd4a8c5dc altair,hso,samsung: setup send-delay=0 for probing
The Altair, Option HSO and Samsung plugins all use the send-delay=0
setting once the modem object has been created. For consistency, use
the same setting during port probing.
2017-05-30 17:18:32 +02:00