Commit Graph
159 Commits
Author SHA1 Message Date
Aleksander Morgado 137ece0f2f broadband-bearer: setup cid selection as a testable method
Rework how the broadband bearer runs CGDCONT? and CGDCONT=? and setup
a helper method to perform the CID selection logic.

Also, implement unit tests for the CID selection logic.
2019-09-13 18:13:26 +00:00
Aleksander Morgado f39dbe72e5 broadband-modem,voice: implement call waiting status setup/query with +CCWA 2019-07-19 17:47:51 +02:00
Aleksander Morgado 1cc31df425 helpers: new '+CLCC' test response parser 2019-07-11 23:00:50 +02:00
Aleksander Morgado dca00271ce broadband-modem: implement +CCWA URC handling 2019-07-11 23:00:50 +02: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 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
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
Aleksander Morgado a15193b7ca broadband-modem: enable and handle +CGEV indications
The +CGEV indications allow us to get notified of packet domain
events like network-initiated or ME-initiated disconnections on
specific connected contexts, as well as full PS detach events (all
contexts disconnected). If the modem supports these indications, we
will enable them with +CGEREP and will then process them when they are
emitted by the modem.

If a full PS detach event happens, we will explicitly disconnect all
connected bearers.

If a deactivation inidication is received for a single context, we
will look for the associated bearer by CID and explicitly disconnect
it.
2018-11-26 16:28:39 +00:00
Ben Chan 737eff557d modem-helpers: remove useless checks on always true condition
mm-modem-helpers.c:3075:31: error: comparison of unsigned expression >= 0 is always true [-Werror=type-limits]
     g_return_val_if_fail (idx >= 0, NULL);
                               ^
2018-10-27 10:09:51 +02:00
Ben Chan 942bdeaec2 modem-helpers: new helper to convert binary-coded decimals
This patch adds a mm_bcd_to_string() helper function to convert a byte
array representing a binary-coded decimal (BCD) number to a string
representing the equivalent decimal number.
2018-10-26 09:50:01 -07:00
Ben Chan 7de6b6f2e1 core: remove unnecessary NULL checks for g_match_info_free()
g_match_info_free() already check if the given pointer is NULL and does
nothing on a NULL pointer.
2018-10-18 13:17:36 +02:00
Aleksander Morgado fa67a4f9bb sierra-legacy: implement connection status monitoring with !SCACT?
Devices like the Netgear AC313U require explicit context monitoring,
otherwise the device may end up disconnected internally and MM would
still think that the connection is ongoing.
2018-10-09 14:34:59 +00:00
Thomas Haller d83f50794d libmm-glib, modem-helpers: unref enum/flags GType classes in enum getters 2018-10-04 09:43:05 +02:00
Paul Bartell 04bf69c276 modem-helpers: Make 3gpp signal quality functions public 2018-09-13 07:17:51 +00:00
Aleksander Morgado 099d54a4bc helpers: allow [A-F] range in operator-specific ICCID account number
There are operators (e.g. the Chinese CMCC operator) that abuse the
fact that 4 bits are used to store the BCD encoded numbers, and also
use the [A-F] range as valid characters for the ICCID in the operator
specific account number part. Haven't seen any documentation where
this format with [A-F] characters is explicitly allowed, but I have
seen multiple real cases where it happens. E.g.:

  898602F9091830030220
  898602C0123456789012

This patch also removes the 'last F' validation, used when reading
19-digit ICCIDs with +CRSM, as it no longer applies.
2018-09-12 17:17:36 +00:00
Aleksander Morgado 0282123287 helpers: allow 19-digit reported ICCIDs
The mm_3gpp_parse_iccid() method does validation of the ICCID string
and was originally implemented to handle +CRSM reported values. The
implementation was looking for 20-digit strings, even for 19-digit
ICCIDs (those finished with a trailing 'F').

We now extend the logic to also validate ICCID strings reported as
19-digit values directly, and when that happens we won't allow
swapping of the digits (a +CRSM specific requirement) or trailing 'F'
characters (as that is only required when reporting 19-digit ICCIDs
with 20-digit strings).

This change allows us to e.g. use the u-blox specific AT+CCID command
and validate the returned ICCID with the same helper method, which
currently fails:

  (ttyACM2): --> 'AT+CCID<CR>'
  (ttyACM2): <-- '<CR><LF>+CCID: 8934077700015848638<CR><LF><CR><LF>OK<CR><LF>'
  couldn't load SIM identifier: 'Invalid ICCID response size (was 19, expected 20)'
2018-09-12 17:17:36 +00:00
Aleksander Morgado 4c669d3bf4 modem-helpers: reuse nicknames for the flow control tags
And check that the string given in the tag is actually a valid one.
2018-09-12 17:15:46 +00:00
Alfonso Sánchez-Beato a1c27bf89d modem-helpers: add flow control udev tag parser
Add function for parsing the content of the udev tag
ID_MM_TTY_FLOW_CONTROL.
2018-09-12 17:15:46 +00:00
Aleksander Morgado 6e84f3d459 iface-modem-location: validate SUPL server address
Devices will expect SUPL server given as either IP:PORT or FQDN:PORT,
so just avoid saying we require a 'URL' because it's not true.

We will use a new helper method to parse and validate user-provided
SUPL server address.
2018-09-12 17:14:36 +00: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
Ville Skyttä 90b89bb9f4 *: Spelling fixes 2018-01-25 09:52:12 +01:00
Aleksander Morgado 22ffd3f3aa broadband-modem: implement support for the +CEMODE command
The +CEMODE command is defined in 3GPP TS 27.007 (e.g. in section
10.1.28 in v11.0.0). This command allows querying or updating the
current UE mode, as well as checking the supported modes.

We implement support for loading the current mode and updating it. It
is assumed that the device does any additional operation needed by the
setting update, e.g. un-registering from CS when selecting an EPS-only
mode.
2018-01-20 15:41:07 +01:00
Colin Helliwell 8f26848ef0 helpers: move generic load_unlock_retries from Telit plugin
As a precursor to a generic load_unlock_retries method, move the
CSIM Response parser from the Telit plugin into the core code.
2018-01-01 18:37:10 +01:00
Aleksander Morgado dec53d6ef6 modem-helpers: allow unquoted strings in +CCLK responses
Also:
  * define the leading '+' as a escaped value
  * allow any number of spaces between '+CCLK' and the string value.
2017-08-09 21:59:31 +02:00
Aleksander Morgado 4db3ccf2af helpers: +CNUM parser doesn't return any error 2017-07-19 11:21:27 +02:00
Ben Chan 94a289a1b3 modem-helpers: minor coding style fixes 2017-07-14 10:59:46 +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
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 e753911a4e helpers: new 'AT+CMER=?' parser 2017-05-29 14:56:54 +02:00
Aleksander Morgado 973c7d0970 helpers: new parser for AT+IFC=?
Instead of having the parser return separate list of supported flow
controls for TE and TA, we simplify it by only returning those
settings that apply to both TE and TA.

This logic isn't perfect either, though, as some settings (e.g. '3' in
TE in some modems, specifying a different XON/XOFF behavior) may not
have a corresponding setting in the other end.

The most common cases we care about (i.e. standard XON/XOFF, RTS/CTS)
should be properly reported with this logic.
2017-04-18 18:08:57 +02:00
Aleksander Morgado fba49d8d00 broadband-modem: normalize also operator code
The operator code (MCCMNC) may also be given encoded in the current
charset (e.g. UCS2).

Based on a patch from Colin Helliwell <colin.helliwell@ln-systems.com>
2017-04-02 10:06:13 +02:00
Aleksander Morgado f824602bdd modem-helpers: if operator not in UCS2, see if already valid UTF-8
The method doing the operator name normalization takes as input the
current configured modem charset. If this is UCS2, we will now just
assume this is a hint: the string may or may not come in hex/UCS2.

This logic makes the custom operator name loading in Huawei unneeded,
if the modem is configured in UCS2, we still properly process operator
names coming in plain ASCII.
2017-04-02 10:06:07 +02:00
Aleksander Morgado 1600911439 broadband-modem,helpers: implement AT+WS46=? response parser
We want a parser that returns the full list of combinations found.
2017-03-24 21:28:34 +01:00
Aleksander Morgado 51e3d3d837 modem-helpers: improve +CCLK parsing
Added support for 4-digit format years (i.e. YYYY), and also made the
timezone information optional, as per +CSDF in 3GPP TS 27.007.

https://bugs.freedesktop.org/show_bug.cgi?id=95319
2016-11-18 10:25:07 +01:00
Aleksander Morgado 5a9f093839 modem-helpers: implement less strict APN comparison
u-blox modems will append a string showing the MCC and MNC info to the access
point name listed in AT+CGDCONT? responses. We will try to detect when that
happens, and we just accept the match.

The logic doesn't just look for a string prefix; it also looks for the special
MCC + MNC suffix, which is much more restrictive, to try to avoid false
positives.
2016-10-12 13:24:09 +02:00
Aleksander Morgado 7ab3d3e727 modem-helpers: new helper to parse +CESQ response into MMSignal objects 2016-10-12 13:24:08 +02:00
Aleksander Morgado df6f6d1f37 modem-helpers: new +CESQ response parser 2016-10-12 13:24:08 +02:00
Aleksander Morgado fe460b2f54 3gpp: update registration state enumeration with CSFB related states
Introduce "sms only" and "CSFB not preferred" home/roaming states to be reported
for the CS context, while already registered on LTE.

Based on 3GPP TS 27.007 v13.5.0.
2016-10-12 13:24:08 +02:00
Aleksander Morgado aca6bb1c02 modem-helpers: new +CFUN? response parser 2016-10-12 11:29:52 +02:00
Aleksander Morgado 3a886d848d modem-helpers: new uint list parser, including interval support 2016-10-12 11:29:52 +02:00
Aleksander Morgado 61fbab286c modem-helpers: new CGACT? response parser 2016-10-12 11:29:52 +02:00
Aleksander Morgado 467b3c57f0 modem-helpers: new COPS? response parser
Split into two different actions the actual COPS? response parsing and the
operator name normalization process.

Also, allow parsing not only the operator string, but also the format, mode
and the optional access technology value.
2016-10-12 11:29:52 +02:00
Aleksander Morgado 654f718b06 modem-helpers: new +CGCONTRDP=N response parser 2016-10-12 11:29:52 +02:00
Dan Williams 03a6d969ab broadband-modem-huawei: implement Modem.Signal extended signal info interface
Implement the detailed signal info interface for some Huawei 3GPP modems
including those based on HiSilicon chipsets like the E3276.  Known not to
work on many Qualcomm-based Huawei modems like E392, E397, and E367 as
they don't support the ^HCSQ command, but they do support QMI and so
have access to the extended signal interface via QMI.
2016-08-31 09:43:32 -05:00
Dan Williams 0a9cbf65ea modem-helpers: fix handling split PDP context ID reporting in CGDCONT=? response
Cinterion PHS8-US devices send split PDP context ID like "(1-17,101-112)" and
that caused the modem-helpers to choke.
2016-03-15 10:34:28 -05:00
Carlo Lobrano be317e8b80 broadband-modem: fix +CPMS empty parameter support
* Add new async virtual method init_current_storages to
  MMIfaceModemMessaging
* Add logic of init_current_storages to MMBroadbandModem
* Add step "INIT_CURRENT_STORAGES" in MMIfaceModemMessaging
  initialization in order to load and store current SMS
  storages for mem1 and mem2.
* Add usage of current sms storage value for mem1 in place
  of an empty string parameter when the command AT+CPMS
  is used.

https://bugs.freedesktop.org/show_bug.cgi?id=93135
2016-03-09 14:43:08 +01:00
Aleksander Morgado 7c2d5b1aa3 helpers: fix check for pid when creating device identifier
https://bugs.freedesktop.org/show_bug.cgi?id=94364
2016-03-02 17:09:33 +01:00
Aleksander Morgado cffba7e0ee modem-helpers: regex creation should never fail
We should really consider errors if we expect that the regex string may not
compile; but in this case the pattern is fixed, so should never happen.
2016-02-13 14:33:12 +01:00
Thomas Sailer 95876c6f57 helpers: move +CRSM parsing to mm_3gpp_parse_crsm_response
Also added test cases.

Signed-off-by: Thomas Sailer <t.sailer@alumni.ethz.ch>
2016-02-13 14:27:51 +01:00
Thomas Sailer a33615d6cb helpers: allow optional quotes in +CREG: <stat>,"<lac>","<ci>"
GSM 07.07 CREG=2 unsolicited pattern.

Added testcase for Thuraya XT.

Signed-off-by: Thomas Sailer <t.sailer@alumni.ethz.ch>
2016-02-13 14:24:54 +01:00