Commit Graph

7297 Commits

Author SHA1 Message Date
Aleksander Morgado
4132052965 docs: add missing MMCallDirection documentation 2019-07-11 09:41:31 +00:00
Aleksander Morgado
220a4cbf43 docs: add missing short description for compat section 2019-07-11 09:41:31 +00:00
Aleksander Morgado
c96b03d3a9 docs: add missing MM_CHECK_VERSION documentation 2019-07-11 09:41:31 +00:00
Ben Chan
8d8b3a722a misc: use g_regex_match() for simplicity
This CL converts a few g_regex_match_full() expressions to their
equivalent g_regex_match() in order to simplify the code, i.e.

  g_regex_match_full (regex, str, strlen (str), 0, 0, &match_info, NULL)

is equivalent to:

  g_regex_match_full (regex, str, -1, 0, 0, &match_info, NULL)

or simply:

  g_regex_match (regex, str, 0, &match_info)
2019-07-10 14:48:22 -07:00
Aleksander Morgado
ea93aad8a4 base-sms: wait up to 60s when sending SMS messages
The operation sending the raw data of the SMS may timeout because the
current value of 10s is too low.

When this happens, we may end up marking the modem as invalid if the
operation takes much longer, as in
https://gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/133

  <debug> [1561707204.192676] (ttyUSB3): --> 'AT+CMGS=22<CR>'
  <debug> [1561707204.207212] (ttyUSB3): <-- '<CR><LF>> '
  <debug> [1561707204.207562] (ttyUSB3) device open count is 3 (open)
  <debug> [1561707204.207695] (ttyUSB3) device open count is 2 (close)
  <debug> [1561707204.207841] (ttyUSB3): --> '0021000B9164xxxxxxxxFx00000AEDF6989D06D1CB733A\26'
  <debug> [1561707204.261028] (ttyUSB3): <-- '<CR><LF>'
  <debug> [1561707205.197464] (ttyUSB3) device open count is 3 (open)
  <debug> [1561707207.197763] loading signal quality...
  <debug> [1561707207.197990] (ttyUSB3) device open count is 4 (open)
  <debug> [1561707210.199337] (ttyUSB3) device open count is 5 (open)
  <debug> [1561707214.197198] (ttyUSB3) device open count is 4 (close)
  <debug> [1561707214.197443] (ttyUSB3): --> 'AT+CGACT?<CR>'
  <debug> [1561707215.196530] (ttyUSB3) device open count is 5 (open)
  <warn>  [1561707217.196750] checking if connected failed: Couldn't check current list of active PDP contexts: Serial command timed out
  <debug> [1561707217.196928] (ttyUSB3) device open count is 4 (close)
  <warn>  [1561707217.197065] (tty/ttyUSB3) at port timed out 2 consecutive times
  <debug> [1561707217.197187] (ttyUSB3): --> 'AT+CIND?<CR>'
  <debug> [1561707220.198180] (ttyUSB3) device open count is 5 (open)
  <debug> [1561707222.196792] (ttyUSB3) device open count is 6 (open)
  <debug> [1561707222.196983] (ttyUSB3) device open count is 5 (close)
  <warn>  [1561707222.197125] (tty/ttyUSB3) at port timed out 3 consecutive times
  <debug> [1561707222.197257] (ttyUSB3): --> 'AT+CGACT?<CR>'
  <debug> [1561707225.198384] (ttyUSB3) device open count is 6 (open)
  <warn>  [1561707225.198616] checking if connected failed: Couldn't check current list of active PDP contexts: Serial command timed out
  <debug> [1561707225.198703] (ttyUSB3) device open count is 5 (close)
  <warn>  [1561707225.198814] (tty/ttyUSB3) at port timed out 4 consecutive times
  <debug> [1561707225.199437] (ttyUSB3): --> 'AT+CGACT?<CR>'
  <warn>  [1561707228.196747] checking if connected failed: Couldn't check current list of active PDP contexts: Serial command timed out
  <debug> [1561707228.196915] (ttyUSB3) device open count is 4 (close)
  <warn>  [1561707228.197050] (tty/ttyUSB3) at port timed out 5 consecutive times
  <debug> [1561707228.197175] (ttyUSB3): --> 'AT+CGACT?<CR>'
  <debug> [1561707230.197709] (ttyUSB3) device open count is 5 (open)
  <warn>  [1561707231.197089] checking if connected failed: Couldn't check current list of active PDP contexts: Serial command timed out
  <debug> [1561707231.197256] (ttyUSB3) device open count is 4 (close)
  <warn>  [1561707231.197387] (tty/ttyUSB3) at port timed out 6 consecutive times
  <debug> [1561707231.197519] (ttyUSB3): --> 'AT+CSQ<CR>'
  <debug> [1561707234.199671] Couldn't refresh signal quality: 'Serial command timed out'
  <debug> [1561707234.199897] (ttyUSB3) device open count is 5 (open)
  <debug> [1561707234.200038] (ttyUSB3) device open count is 4 (close)
  <warn>  [1561707234.200161] (tty/ttyUSB3) at port timed out 7 consecutive times
  <debug> [1561707234.200291] (ttyUSB3): --> 'AT+CGACT?<CR>'
  <debug> [1561707235.197071] (ttyUSB3) device open count is 5 (open)
  <debug> [1561707237.198460] Signal quality value not updated in 60s, marking as not being recent
  <warn>  [1561707237.198846] checking if connected failed: Couldn't check current list of active PDP contexts: Serial command timed out
  <debug> [1561707237.198949] (ttyUSB3) device open count is 4 (close)
  <warn>  [1561707237.199060] (tty/ttyUSB3) at port timed out 8 consecutive times
  <debug> [1561707237.199636] (ttyUSB3): --> 'AT+CGACT?<CR>'
  <debug> [1561707240.198778] (ttyUSB3) device open count is 5 (open)
  <warn>  [1561707240.199031] checking if connected failed: Couldn't check current list of active PDP contexts: Serial command timed out
  <debug> [1561707240.199127] (ttyUSB3) device open count is 4 (close)
  <warn>  [1561707240.199244] (tty/ttyUSB3) at port timed out 9 consecutive times
  <debug> [1561707240.199363] (ttyUSB3): --> 'AT+CNSMOD?<CR>'
  <debug> [1561707243.198163] Couldn't refresh access technologies: 'Serial command timed out'
  <debug> [1561707243.198294] Periodic signal quality checks scheduled in 30s
  <debug> [1561707243.198402] (ttyUSB3) device open count is 3 (close)
  <error> [1561707243.198528] (tty/ttyUSB3) at port timed out 10 consecutive times, marking modem '/org/freedesktop/ModemManager1/Modem/0' as invalid
  <debug> [1561707243.198699] (ttyUSB3): --> 'AT+CGACT?<CR>'

Or we may end up aborting other actions that the modem is doing...

  <debug> [1560473069.956036] (ttyACM2): --> 'AT+CMGS=70<CR>'
  <debug> [1560473069.963667] Added CALL at '/org/freedesktop/ModemManager1/Call/1'
  <debug> [1560473069.977937] (ttyACM2): <-- '<CR><LF>> '
  <debug> [1560473069.978558] (ttyACM2) device open count is 3 (open)
  <debug> [1560473069.978812] (ttyACM2) device open count is 2 (close)
  <debug> [1560473069.979152] (ttyACM2): --> '0001000D8......................\26'
  <debug> [1560473080.317049] (ttyACM2): --> 'ATD123456789;<CR>'
  <debug> [1560473092.293458] (ttyACM2): <-- '<CR><LF>+CMGS: 1<CR><LF><CR><LF>OK<CR><LF>'
  <warn>  [1560473092.293854] Couldn't start call : 'Couldn't start the call: Unhandled response '+CMGS: 1''
  <info>  [1560473092.293936] Call state changed: dialing -> terminated (unknown)
  <debug> [1560473092.293987] Cleaning up in-call unsolicited events...

So, update the raw data sending timeout to a much longer value.
2019-07-09 16:55:48 +02:00
Aleksander Morgado
3e3dfc784d docs: add deprecated items to sections file 2019-07-02 18:40:23 +02:00
Aleksander Morgado
2d171207bb api,location: fix A-GPS MSA/MSB documentation links 2019-07-02 18:40:17 +02:00
wi24rd
addc53a0d3 po: Add zh_CN translation 2019-07-02 09:47:48 +02:00
Aleksander Morgado
f62e5009a2 introspection,voice: fix documentation of CallAdded() signal 2019-06-28 09:49:44 +02:00
Aleksander Morgado
312e5dd623 modem-helpers: ignore format of unneeded fields in +CLIP URC
The regex was expecting empty values in several of the fields, which
is wrong. Instead of matching empty fields, just ignore all fields
that we don't require in our logic.
2019-06-28 09:48:28 +02:00
Aleksander Morgado
4656b5b606 broadband-modem: fix logging whether enabling or disabling URCs 2019-06-28 09:48:06 +02:00
Aleksander Morgado
d1b716abaf iface-modem-3gpp: use correct finish() method to complete user registration
https://gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/131
2019-06-24 10:41:20 +02:00
Aleksander Morgado
1d52e5c24d cinterion: make custom +CIEV parser much more generic
The custom +CIEV parser configured for Cinterion modems was
exclusively matching the "psinfo" indicator updates, which were the
ones really used afterwards.

But, in order to avoid having undesired URCs mixed with other command
responses, we should anyway match any +CIEV indicator reported, not
only "psinfo".

The text indicator ids used in +CIEV seem to bee specific to Cinterion
devices when they're configured via AT^SIND, so we do a generic match
for any lowercase ascii text as indicator id.
2019-06-13 18:43:06 +02:00
Aleksander Morgado
ca5f2e8b3e ublox,tests: expect error if empty band list when parsing UACT? 2019-06-13 11:28:26 +02:00
Aleksander Morgado
20c5d7fd92 ublox: return error when no bands are parsed
If load_current_bands_finish() returns a NULL GArray, we must set the
GError or otherwise the daemon will segfault when the caller
dereferences the GError:

    current_bands = MM_IFACE_MODEM_GET_INTERFACE (self)->load_current_bands_finish (self, res, &error);
    if (!current_bands) {
        /* Errors when getting current bands won't be critical */
        mm_warn ("couldn't load current Bands: '%s'", error->message);
        g_error_free (error);
    }

This may happen with an empty but balid +UACT response, e.g.:
   AT+UACT?
   +UACT: ,,,
   OK

Or when it replies a full empty string:
   AT+UACT?
   OK
2019-06-13 10:26:53 +02:00
Aleksander Morgado
d197380095 modem-helpers: minor coding style fixes 2019-06-11 16:28:06 +02:00
Aleksander Morgado
72bdb1b365 port-serial-at: raw commands always run next
We use the raw commands exclusively when we're sending SMS data to the
device. Until this change, all raw commands were added at the tail of
the queue of pending commands, and that meant that if any unrelated AT
command was interleaved between e.g. our AT+CGMS and the actual SMS
data sent, the operation would have failed.

With this fix, we're making sure that all raw commands are added at
the head of the queue, so we're making sure that the next command
picked after e.g. CGMS is actually the raw SMS data to be sent.

We would be avoiding issues like this one, where an outgoing voice
call attempt gets in the way before we send the SMS data:

  [1556246081.786284] (ttyACM2): --> 'AT+CMGS=70<CR>'
  [1556246081.814861] (ttyACM2): <-- '<CR><LF>> '
  [1556246081.819382] (ttyACM2): --> 'ATD1234567890;<CR>'
  [1556246081.839685] (ttyACM2): <-- '<CR><LF>> '
  [1556246081.840123] Couldn't start call : 'Couldn't start the call: Unhandled response '> ''
  [1556246081.856254] (ttyACM2): --> '0001000D810..............
  [1556246081.922470] (ttyACM2): <-- '<CR><LF>+CME ERROR: 4<CR><LF>'
2019-06-03 03:50:22 +00:00
Aleksander Morgado
8092e301fc port-serial: allow deciding whether the command is queued last or run next
By default all the commands we were sending through the serial port
were added at the tail of the pending queue, but we may want to queue
them at the head in very specific cases (e.g. while sending an SMS).
2019-06-03 03:50:22 +00:00
Aleksander Morgado
c78ba5ea0a build: allow unconditionally enabling Modem.Command() method
If ModemManager is being used in a custom system, make it easy to
unconditionally enable the Modem.Command() method, in case the modem
needs to be configured in some way that is not supported via standard
modem interfaces.
2019-06-01 10:27:57 +02:00
Aleksander Morgado
8ec9789e3c quectel: add port type hints for the Quectel LTE-A EG06
ttyUSB0 (if #0): QCDM/DIAG port
 ttyUSB1 (if #1): GPS data port
 ttyUSB2 (if #2): AT primary port
 ttyUSB3 (if #3): AT secondary port
2019-05-30 17:28:13 +02:00
Aleksander Morgado
aa22387937 iface-modem: fix reporting state while registration is denied
When registration is denied, we should be reporting the modem with
'enabled' state instead of 'registered'. This was not happening
because the logic to build the consolidated state (for 3GPP+3GPP2
modems) was using as default initial state the current old state, and
so if the old one was 'registered' it never allowed getting a
consolidated state of 'enabled', because 'registered' > 'enabled'.

Instead of using the old initial state, the consolidated modem state
should use 'enabled' as default initial value, which is the lowest
among 'enabled, 'searching' and 'registered'.
2019-05-30 13:18:32 +00:00
Aleksander Morgado
7f822fbc50 xmm,shared: don't assume parent object implements location support
E.g. when MM is built without QMI support, the MBIM modem won't have
any location support, as the only location implementation is based on
QMI over MBIM.

https://gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/125
2019-05-28 22:56:54 +02:00
Aleksander Morgado
fd1a26fc36 plugin: ignore unwanted net ports
* For QMI modems, make sure we only grab QMI data ports (flag the
   rest as ignored).
 * For MBIM modems, make sure we only grab MBIM data ports (flag the
   rest as ignored).
 * For other plugins that use NET ports in their logic, make sure we
   only grab non-QMI and non-MBIM data ports.
2019-05-23 11:16:00 +02:00
Aleksander Morgado
6dc6a825b3 base-modem-at: don't ignore allow_cached flag in first command in sequence 2019-05-18 16:00:28 +02:00
Aleksander Morgado
254da81ebd telit: loading access tech should never use cached replies 2019-05-18 16:00:19 +02:00
Lubomir Rintel
50fc46c170 bearer-qmi: do not call cleanup_event_report_unsolicited_events() w/o indication_id
If a disconnection fails (because stop_network() failed), base-bearer
flips the state back to CONNECTED. Oops. At that point something is
clearly messed up, but it seems correct to assume the bearer is
connected.

Nevertheless, we will have already have unhooked the unsolicited events
reporting. A subsequent attempt to disconnect the bearer will trip the
assertion:

  #0  0x00007ffff75f2eb5 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
  #1  0x00007ffff75dd895 in __GI_abort () at abort.c:79
  #2  0x00007ffff77beb53 in g_assertion_message
      (domain=<optimized out>, file=<optimized out>, line=<optimized out>, func=0x5088e0 <__FUNCTION__.56253> "cleanup_event_report_unsolicited_events", message=<optimized out>) at ../glib/gtestutils.c:2878
  #3  0x00007ffff781a96f in g_assertion_message_expr
      (domain=domain@entry=0x0, file=file@entry=0x507aad "mm-bearer-qmi.c", line=line@entry=1138, func=func@entry=0x5088e0 <__FUNCTION__.56253> "cleanup_event_report_unsolicited_events", expr=expr@entry=0x507ae5 "*indication_id != 0") at ../glib/gtestutils.c:2904
  #4  0x00000000004a0c49 in cleanup_event_report_unsolicited_events (client=<optimized out>, indication_id=0x5bb30c, self=<optimized out>)
      at mm-bearer-qmi.c:1138
  #5  0x00000000004a0c49 in cleanup_event_report_unsolicited_events
      (client=<optimized out>, indication_id=indication_id@entry=0x5bb30c, self=0x5bb420 [MMBearerQmi]) at mm-bearer-qmi.c:1132
  #6  0x00000000004a0ee3 in disconnect_context_step (task=0x7fffe8012100 [GTask]) at mm-bearer-qmi.c:1854
  #7  0x000000000046e889 in disconnect_auth_ready (self=<optimized out>, res=<optimized out>, ctx=ctx@entry=0x654630)
      at mm-iface-modem-simple.c:865
  #8  0x00007ffff79cfa9a in g_task_return_now (task=0x7fffe8012640 [GTask]) at ../gio/gtask.c:1209
  ...

Add checks for indication_id to calls to
cleanup_event_report_unsolicited_events() on
DISCONNECT_STEP_STOP_NETWORK_IPV4 or DISCONNECT_STEP_STOP_NETWORK_IPV6, as
is done elsewhere.
2019-05-14 09:49:15 +02:00
Lubomir Rintel
eaaf64ffce base-bearer: fix check for cancellation
If we cancel connect_cancellable, the connect task will return a
G_IO_ERROR_CANCELLED. We may need to do some cleanup (like, disconnect
if the connection went far enough to actually start the network
connection), thus it's important we check for cancellation correctly.
2019-05-14 09:47:54 +02:00
Lubomir Rintel
aaea6c77f2 bearer-qmi: remove unused DisconnectContext::data 2019-05-14 09:46:46 +02:00
Aleksander Morgado
7753eb0013 iface-modem-messaging: flush sms list update before notifying added/removed
So that clients are able to have the full updated list before the list
update notification.
2019-05-08 20:26:05 +02:00
Johny Mattsson
8e364b72b9 mmcli: allow use of modem UID to specify SIM operation
Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/107
2019-05-06 13:31:21 +02:00
yparitcher
d56bc301dd mm-broadband-modem: fix error propagation in cdma service status 2019-05-01 15:36:32 -05:00
Lech Perczak
7a6e92727f broadband-modem-mbim: parse nw_error in register_state_set_ready only if MBIM_STATUS_FAILURE
Some modems (Namely: Telit LE910 V2) report nonzero NwError code,
outside of 3GPP TS 24.008 - in "register-state set command-done" response,
while status code equals MBIM_STATUS_ERROR_NONE.
In such cases network is operational.
According to MBIM specification 1.0 table 10.5.9.8 "Status codes",
NwError shall be nonzero only if Status Code equals MBIM_STATUS_FAILURE,
and client shall parse NwError only in such cases.
Also, MBIM specification does not explicitly state that 'NwError == 0' equals
no error, rather than that it is unknown error, hence raise an error
unconditionally if MBIM status code is MBIM_STATUS_FAILURE.

Therefore, check NwError IFF MBIM response status code equals
MBIM_STATUS_FAILURE, instead of MBIM_STATUS_SUCCESS.

Fixes: 854c371c8a ("broadband-modem-mbim: implement 3GPP registration request")
Signed-off-by: Lech Perczak <l.perczak@camlintechnologies.com>
2019-04-26 14:36:32 +00:00
Moo
81ad40d27e i18n: Added Lithuanian translation 2019-04-25 10:18:13 +02:00
Aleksander Morgado
de1ae549fa shared-qmi: config list may be empty
Reported by: Enrico Mioso <mrkiko.rs@gmail.com>
2019-04-15 10:43:59 +02:00
Aleksander Morgado
44eac9e974 shared-xmm: implement support for MSB A-GPS 2019-04-09 12:24:39 +00:00
Aleksander Morgado
791c582df3 shared-qmi: implement support for MSB A-GPS 2019-04-09 12:24:39 +00:00
Aleksander Morgado
d5dc9751b6 location,agps: include support for MSB A-GPS 2019-04-09 12:24:39 +00:00
Aleksander Morgado
caa1f8fdc1 iface-modem-location: define first and last location sources
Much clearer to understand when looping through them.
2019-04-09 12:24:39 +00:00
Aleksander Morgado
b77aa7ab0e location,agps: explicitly specify that MSA A-GPS is implemented
The A-GPS based implementations we currently have assume MSA A-GPS, so
rename the MMModemLocationSource enum value to reflect that.
2019-04-09 12:24:39 +00:00
Aleksander Morgado
619d2ce5ac cli,location: minor refactor to handle the location setup flags 2019-04-09 12:24:39 +00:00
Ben Chan
79df43f0d7 broadband-modem: remove unused CallManagerStateContext defintion 2019-04-09 11:11:54 +00:00
Ben Chan
49f391b10d altair-lte: remove unused fields in DetailedDisconnectContext 2019-04-08 13:30:14 -07:00
Aleksander Morgado
210dc0be47 plugins,dell: port type hints for the DW5820e module 2019-04-08 12:45:28 +02:00
Ben Chan
9dac5ece77 build: make compiler warning options compatible with clang
This patch updates m4/compiler-warnings.m4 as follows to make it more
compatible with clang:

* clang doesn't support -Wunused-but-set-variable, which can be replaced
  with -Wunused-variable as the latter covers unused variables with or
  without an assigned value and is supported by gcc and clang.

* -Wno-unused-function is added to let clang ignore unused functions that
  are auto-generated.
2019-04-05 08:02:14 +00:00
Ben Chan
7f78ef5010 via: fix memory leak in parent_setup_registration_checks_ready
This patch fixes a potential memory leak in
parent_setup_registration_checks_ready() where the allocated
SetupRegistrationChecksResults may be leaked when the MMIfaceModemCdma
parent's setup_registration_checks() fails.
2019-04-03 10:57:14 -07:00
Ben Chan
84fe52a1e6 modem-helpers: fix memory leak in mm_3gpp_parse_pdu_cmgl_response
This patch fixes a potential memory leak in
mm_3gpp_parse_pdu_cmgl_response() where the allocated MM3gppPduInfo may
be leaked when failing to parse the +CMGL response.
2019-04-03 10:53:01 -07:00
Sven Schwermer
7e4a8d9566 ublox: add LISA/SARA-U2 alternative port types
When configuring these modems with AT+UUSBCONF=2, i.e. CDC-ECM + 4x
CDC-ACM, they also enumerate with a different PID on the USB. We need to
adjust the udev rules for that case in order to ignore the non-AT ports.

Signed-off-by: Sven Schwermer <sven.schwermer@disruptive-technologies.com>
2019-04-03 13:17:19 +02:00
Dan Williams
1c14ca7262 libwmc: remove it
The WMC protocol was only present on older Panasonic/Verizon devices
from the 2006 - 2011 timeframe. The last device to support WMC was
the UML290 which also supported QMI (which is much more functional).
ModemManager also never used WMC support and it was never significantly
reverse engineered.

So remove WMC code from git; it'll still be in the history if anyone
cares in the future.
2019-04-02 11:20:11 -05:00
Dan Williams
88fac7f14a build: fix -Wunused-but-set-variable support and handle clang better
By default the build used -Wno-unused-but-set-variable but that's
clearly not what we want. Fix those problems.

When using clang, the compiler doesn't error on unknown compile
options, so let's add -Werror to the checking too.

CC='clang'
configure:3408: checking for gcc
configure:3435: result: clang
...
configure:17644: checking whether gcc understands -Wno-unused-but-set-variable
configure:17657: clang -c -Wall -std=gnu89 -g -O2 -Wmissing-declarations -Wmissing-prototypes -Wdeclaration-after-statement -Wstrict-prototypes -Wno-unused-parameter -Wno-sign-compare -Wno-deprecated-declarations -Wno-unused-but-set-variable  conftest.c >&5
warning: unknown warning option '-Wno-unused-but-set-variable'; did you mean '-Wno-unused-const-variable'? [-Wunknown-warning-option]
1 warning generated.
configure:17657: $? = 0
configure:17666: result: yes

Reported-by: Torsten Hilbrich <torsten.hilbrich@secunet.com>
2019-04-02 10:48:40 -05:00
Aleksander Morgado
093174c84d shared-qmi: always use newest carrier config if more than one found 2019-04-02 12:14:03 +02:00