Commit Graph
2088 Commits
Author SHA1 Message Date
Aleksander Morgado 2a922f836d build: remove unneeded GLIB_CHECK_VERSION checks, 2.32 already required 2013-06-18 16:55:29 +02:00
Aleksander Morgado 2ad39277d2 build: setup gtester based tests 2013-06-18 16:50:47 +02:00
Aleksander Morgado ce84ea510f bearer-mbim: make packet service attach operation optional
Some modems do require it, but some others won't (e.g. CDMA based ones), so
just make the operation optional, but only if the modem replies NoDeviceSupport.

https://bugzilla.gnome.org/show_bug.cgi?id=702419
2013-06-17 15:48:07 +02:00
Aleksander Morgado e65f6ca2af bearer: MMBearerIpFamily is flags, not enum
Fixes the following warning...
    [mm-broadband-modem-mbim.c:1133] modem_create_bearer(): Creating MBIM bearer in MBIM modem
    GLib-GObject-CRITICAL **: g_param_spec_enum: assertion `G_TYPE_IS_ENUM (enum_type)' failed
    GLib-GObject-CRITICAL **: g_object_class_install_property: assertion `G_IS_PARAM_SPEC (pspec)' failed
2013-06-17 08:21:22 +02:00
Aleksander Morgado fcede1a80a broadband-modem-qmi: fallback to AT if WMS service not available for messaging
It is quite common to have modems handled with QMI but with very limited
services implemented, e.g. without WMS:

    [/dev/cdc-wdm0] QMI Device supports 5 services:
    [/dev/cdc-wdm0]    ctl (1.3)
    [/dev/cdc-wdm0]    wds (1.5)
    [/dev/cdc-wdm0]    dms (1.2)
    [/dev/cdc-wdm0]    nas (1.0)
    [/dev/cdc-wdm0]    cat (0.0)

We'll now fallback to use plain AT commands when no QMI WMS service is found.
2013-06-15 17:19:54 +02:00
Dan Williams dc81556914 broadband-bearer-qmi: log both IPv4 and IPv6 settings for V4V6 connections
Old code only printed one or the other; but if we have dual-stack
connectivity, print everything we can read.
2013-06-12 09:16:16 -05:00
Aleksander Morgado 6920a177d6 manager: require whitelist for devices in the 'pnp' subsystem 2013-06-10 20:30:13 +02:00
Dmitry Ivanyushin 6c098dd9f5 manager: handle PNP-connected devices too
I have a modem that is connected to motherboard's built-in serial port. Its
parent is listed in udev as "pnp" so this patch handles that situation.
2013-06-07 16:26:34 -05:00
Aleksander Morgado 4901ee8632 broadband-modem: run *CNTI=2 to when loading supported modes
It sometimes provides a much better view of the supported modes than the WS46=?
command, which is not always properly implemented. E.g.:

Nokia N950:
---------------
at+ws46=?
(12)
OK

at*cnti=2
*CNTI: 2,GSM,GPRS,EDGE,UMTS,HSDPA,HSUPA
OK

Sierra AC313u
---------------
at+ws46=?
ERROR

at*cnti=2
*CNTI: 2,GSM,GPRS,EDGE,UMTS,HSDPA/HSUPA,HSPA+,LTE
OK
2013-06-05 19:15:16 +02:00
Aleksander Morgado de944262b4 broadband-modem: don't set supported mode defaults based on guesses
We may be asking to load supported modes while in locked state, so the commands
may fail. In order to re-load them properly once we're unlocked, we better just
return an error instead of setting defaults.
2013-06-05 19:15:15 +02:00
Aleksander Morgado 5b08091520 api,introspection: Simple.Connect() won't change neither bands nor allowed modes
We won't allow changing modes or bands through Simple.Connect(). Applications
should instead look at the corresponding SupportedBands or SupportedModes, and
then use SetCurrentBands() or SetCurrentModes() explicitly.
2013-06-05 19:15:15 +02:00
Aleksander Morgado b41278c423 iface-modem: allow changing capabilities in every state
Same as done with the firmware switching, we allow capabilities changing even
if the modem is in FAILED state, e.g. to switch from 3GPP to 3GPP2 mode.
2013-06-05 19:15:15 +02:00
Aleksander Morgado f09eff633c iface-modem: load current modes and bands during initialization
We now load current modes and bands before enabling the modem, and we also allow
mode and bands changes while the modem is disabled.
2013-06-05 19:15:15 +02:00
Aleksander Morgado da606ef572 broadband-modem-qmi: update current capabilities loading logic
Changes being:

 * Don't rely on the band preference TLVs presence. The band preference TLVs are
   always given, even if the modem doesn't support the specific capability right
   away. E.g. a GSM/UMTS/LTE modem configured with 'gsm-umts' capability (no
   'lte') still shows the LTE band preference TLV in the SSP responses.

 * Don't automatically add LTE as current capability. We needed this when we
   were not able to change capabilities, so that we didn't lose the ability to
   set 4G mode as allowed.
2013-06-05 19:15:15 +02:00
Aleksander Morgado 83a8e08c37 broadband-modem-qmi: implement capabilities setting 2013-06-05 19:15:15 +02:00
Aleksander Morgado a902e6859e api,introspection: new 'SetCurrentCapabilities' method
For those modems which expose a valid 'SupportedCapabilities' property with more
than one item in the list, we'll allow switching between them.
2013-06-05 19:15:15 +02:00
Aleksander Morgado 700ebc5c07 api,introspection: rename 'ModemCapabilities' to 'SupportedCapabilities'
And also make it a list of masks, specifying which are the specific combinations
supported, not just one mask with all.

E.g.:
  -------------------------
  Hardware |   manufacturer: 'Sierra Wireless, Incorporated'
           |          model: 'MC7710'
           |       revision: 'SWI9200X_03.05.19.04ap r5475 carmd-en-10527 2012/09/17 17:57:14'
           |      supported: 'gsm-umts
           |                  gsm-umts, lte'
           |        current: 'gsm-umts, lte'
           |   equipment id: '358178040668164'
2013-06-05 19:15:15 +02:00
Aleksander Morgado 1c67d050cb api,introspection: merge 'AllowedModes' and 'SupportedMode' into 'CurrentModes'
We now have a single 'CurrentModes' property which contains both values in a
tuple with signature "(uu)".

Also, rename 'SetAllowedModes()' to 'SetCurrentModes()', and update the list of
arguments expected to have a single "(uu)" tuple.
2013-06-05 19:15:14 +02:00
Aleksander Morgado 45ceba7692 api,introspection: 'SupportedModes' is now a list of possible combinations
Instead of just a mask of MMModemMode values, we now provide a list of the
allowed and preferred mode combinations supported by the modem. E.g.:

$> sudo mmcli -m 0
  -------------------------
  Modes    |      supported: 'allowed: 2g; preferred: none
           |                  allowed: 3g; preferred: none
           |                  allowed: 2g, 3g; preferred: none
           |                  allowed: 2g, 3g; preferred: 2g
           |                  allowed: 2g, 3g; preferred: 3g
           |                  allowed: 4g; preferred: none
           |                  allowed: 2g, 3g, 4g; preferred: none'
2013-06-05 19:15:14 +02:00
Aleksander Morgado 212d00c529 api,instrospection: rename 'Bands' to 'CurrentBands'
... and 'SetBands()' to 'SetCurrentBands()'.

We'll keep the 'Current' keyword in those properties which also have
'Supported' values.
2013-06-05 19:15:14 +02:00
Aleksander Morgado 4dc8d1ff3a broadband-modem-mbim: implement supported IP families loading 2013-06-05 19:15:14 +02:00
Aleksander Morgado 8f3bf6b894 broadband-modem-qmi: implement supported IP families loading
We'll default to IPv4 if the modem is CDMA-only, and IPv4+IPv6 otherwise.
2013-06-05 19:15:14 +02:00
Aleksander Morgado 44ddbf48e2 broadband-bearer: use the new CGDCONT=? test response parser 2013-06-05 19:15:14 +02:00
Aleksander Morgado 7b3dd32df7 broadband-modem: implement default supported IP families loading
For CDMA-only devices, we will default to IPv4.

For 3GPP devices, we will use the AT+CGDCONT=? test command to query which are
the supported PDP types.
2013-06-05 19:15:14 +02:00
Aleksander Morgado 2acb125819 modem-helpers: new CGDCONT=? test response parser 2013-06-05 19:15:13 +02:00
Aleksander Morgado b3222202bd api,introspection: new 'SupportedIpFamilies' property
This property will let the clients know which are the IP families supported by
the modem.
2013-06-05 19:15:13 +02:00
Aleksander Morgado 7ad30ecce1 modem-helpers: rename CGDCONT? tests
Adding the 'read' suffix, as they are for CGDCONT? read responses.
2013-06-05 19:15:13 +02:00
Aleksander Morgado 804642adc2 api: let MMBearerIpFamily be flags instead of a enumeration
We want to expose in the Modem interface the list of supported IP families, and
the easiest way to do so is to have the IP family as flags, and provide in the
interface a single enum.

Also, a value of 0 for a MMBearerIpFamily specifies that no flags are set, so
just rename it to 'NONE'.

And add a new 'ANY' value which sets all flags to 1.
2013-06-05 19:15:13 +02:00
Aleksander Morgado a42234dd1c bearers: update connection logic in 3GPP+3GPP2 devices
https://bugzilla.gnome.org/show_bug.cgi?id=701333
2013-06-05 18:55:55 +02:00
Dan Williams 93fcaf93ce modem-helpers: handle commas within +COPS response items (bgo #701329)
Modems can probably put whatever they want between the quotes for
the operator name, including commas.  Handle that.

https://bugzilla.gnome.org/show_bug.cgi?id=701329
2013-05-31 13:13:09 -05:00
Dan Williams 67d3ed11d3 broadband-bearer: don't create PDP context when using an existing one (bgo #701151)
If the context is already defined, then we can just use it instead
of calling +CGDCONT to create it again.  Modems don't like this,
plus it's pointless.

https://bugzilla.gnome.org/show_bug.cgi?id=701151
2013-05-29 08:57:57 +02:00
Aleksander Morgado d0a8911cf6 modem-helpers-mbim: handle MBIM_PIN_TYPE_UNKNOWN in switch 2013-05-22 17:47:35 +02:00
Aleksander Morgado 619b327012 broadband-modem-qmi: when listing all SMS fails, list per tag
Some QMI modems seem to fail when requesting to list all SMS messages in a given
storage. When this happens, we'll loop through all storages but performing per
tag list requests.
2013-05-20 10:15:28 +02:00
Aleksander Morgado 09d70454b4 sms-qmi: always specify message mode when deleting SMS messages 2013-05-20 10:14:10 +02:00
Aleksander Morgado 5caa0c96fb broadband-modem-qmi: always specify message mode when reading SMS 2013-05-20 10:14:10 +02:00
Aleksander Morgado 2a93ca9281 bearer: defer forced disconnection when modem unregistered while connected
If the bearer is connected and we get a notification of being unregistered, wait
up to 15s to force the disconnection, in case we can recover the registration
in the meantime.

https://bugzilla.gnome.org/show_bug.cgi?id=699803
2013-05-20 09:12:48 +02:00
Aleksander Morgado e18e168682 bearer: allow registration changes from/to SEARCHING without disconnecting
We allow the modem to be connected while the registration state is 'SEARCHING',
which may happen when the coverage is poor.
2013-05-20 09:08:35 +02:00
Aleksander Morgado 2bb0a23b1f iface-modem-3gpp: remove the deferred registration updates
We should really notify registration updates right away in the DBus interface.
2013-05-20 09:08:35 +02:00
Ben Chan 82a0787906 device: check for NULL driver in add_port_driver
This patch fixes a crash in MMDevice::add_port_driver() due to
g_str_equal() dereferencing a NULL driver returned by
mm_device_utils_get_port_driver().

Bug reported on https://code.google.com/p/chromium/issues/detail?id=241823
2013-05-19 20:27:54 +02:00
Aleksander Morgado 48f47cd53f sms: fix validity variant parsing 2013-05-17 08:49:19 +02:00
Dan Williams 9bbcd9d6a5 sms: add support for message class
We need to redefine the message class property to int since class
0 is a valid message class.  Thus -1 now means "unspecified class".
2013-05-06 10:45:55 -05:00
Ben Chan 9f702aed02 broadband-bearer: fix cid check in disconnect_3gpp
A value 0 is used to denote an invalid/uninitialized CID. This patch
fixes a CID check in disconnect_3gpp() of MMBroadbandBearer such that it
disables all PDP contexts via AT+CGACT=0 when no specific CID is used
(i.e. cid == 0).
2013-05-06 08:44:55 +02:00
Ben Chan 32d6dda859 broadband-modem: update signal quality normalization
This patch updates normalize_ciev_cind_signal_quality() in
MMBroadbandModem to remove an unnecessary check on 'quality >= 0' and
also makes sure the normalized signal quality is capped at 100 when no
maximum is specified.

This is revised from a patch originally authored by
Yunlian Jiang <yunlian@chromium.org>.

Bug reported on https://code.google.com/p/chromium/issues/detail?id=235989
2013-04-30 16:59:09 -05:00
Dan Williams 862eaf4d58 serial-port-qcdm: set SEND_DELAY to 0 (bgo #698869)
For some reason a number of ZTE CDMA devices want the whole QCDM
frame in one USB transaction, or at least don't like it being
broken up and sent byte-by-byte with a send delay.  They simply
don't respond.  Since testing indicates that every other QCDM
capable device I've got also handles a zero send delay on both
3.8.8 and 2.6.32, lets just set it to zero for everything,
which should speed things up a bit too.

https://bugzilla.gnome.org/show_bug.cgi?id=698869
2013-04-30 09:38:32 -05:00
Dan Williams 2e8866c8b7 time: normalize GetNetworkTime() response to local time + timezone info (bgo #697372)
The GetNetworkTime() response is defined to be an ISO8601 string, which
is in turn defined to be in local time.  Make sure that's reflected in
the documentation, and append the timezone offset to UTC where we have
it.

Oddly, Icera devices return their time info in UTC with an offset to
the local timezone, so we have to jump through some hoops there to
convert the response to localtime based on the reported offset.

Some additional fixes by Aleksander Morgado <aleksander@lanedo.com>.

https://bugzilla.gnome.org/show_bug.cgi?id=697372
2013-04-25 15:14:14 -05:00
Dan Williams 7d3a4aba4f broadband-modem: fix assertion during capabilities checking (bgo #698845)
If no capabilities could be determined from the modem's responses,
result would be NULL but no error would be set, since the modem
didn't time out or have some other critical error, it simply didn't
report any recognized capabilities.  Ensure that an error is
reported in this case.

https://bugzilla.gnome.org/show_bug.cgi?id=698845
2013-04-25 15:09:10 -05:00
Aleksander Morgado 135bec690d sms: initialize the validity property when creating SMS 2013-04-25 19:05:04 +02:00
Dan Williams 18bfefba2d iface-modem: fix array insertion when setting bands
You can't g_array_insert_val() to an index that's beyond the end
of the array, which was happening if the user tried to set the
band list to "any":

mmcli -m 0 --set-bands=any

Just use g_array_append_val() instead.

==5618== Invalid read of size 2
==5618==    at 0x4A0A158: memcpy@GLIBC_2.2.5 (mc_replace_strmem.c:881)
==5618==    by 0x326201D8FB: g_array_insert_vals (string3.h:57)
==5618==    by 0x442EFB: mm_iface_modem_set_bands (mm-iface-modem.c:1982)
==5618==    by 0x44307E: handle_set_bands_auth_ready (mm-iface-modem.c:2100)
==5618==    by 0x326386DFF6: g_simple_async_result_complete (gsimpleasyncresult.c:775)
==5618==    by 0x4358E3: authorize_ready (mm-base-modem.c:1300)
==5618==    by 0x326386DFF6: g_simple_async_result_complete (gsimpleasyncresult.c:775)
==5618==    by 0x326386E0F8: complete_in_idle_cb (gsimpleasyncresult.c:787)
==5618==    by 0x3262047A54: g_main_context_dispatch (gmain.c:2715)
==5618==    by 0x3262047D87: g_main_context_iterate.isra.24 (gmain.c:3290)
==5618==    by 0x3262048181: g_main_loop_run (gmain.c:3484)
==5618==    by 0x426235: main (main.c:142)
==5618==  Address 0x10a7ea74e is not stack'd, malloc'd or (recently) free'd
==5618==
==5618==
==5618== Process terminating with default action of signal 11 (SIGSEGV)
==5618==  Access not within mapped region at address 0x10A7EA74E
==5618==    at 0x4A0A158: memcpy@GLIBC_2.2.5 (mc_replace_strmem.c:881)
==5618==    by 0x326201D8FB: g_array_insert_vals (string3.h:57)
==5618==    by 0x442EFB: mm_iface_modem_set_bands (mm-iface-modem.c:1982)
==5618==    by 0x44307E: handle_set_bands_auth_ready (mm-iface-modem.c:2100)
==5618==    by 0x326386DFF6: g_simple_async_result_complete (gsimpleasyncresult.c:775)
==5618==    by 0x4358E3: authorize_ready (mm-base-modem.c:1300)
==5618==    by 0x326386DFF6: g_simple_async_result_complete (gsimpleasyncresult.c:775)
==5618==    by 0x326386E0F8: complete_in_idle_cb (gsimpleasyncresult.c:787)
==5618==    by 0x3262047A54: g_main_context_dispatch (gmain.c:2715)
==5618==    by 0x3262047D87: g_main_context_iterate.isra.24 (gmain.c:3290)
==5618==    by 0x3262048181: g_main_loop_run (gmain.c:3484)
==5618==    by 0x426235: main (main.c:142)
2013-04-25 09:18:53 -05:00
Aleksander Morgado 40dc35a657 modem-helpers: ensure error is set when +CRM response parser doesn't match 2013-04-25 09:36:51 +02:00
Ben Chan 4ac3a6d4f2 bearer: allow specifying default IP family for bearers
This patch adds a 'bearer-default-ip-family' property to MMBearer, which
specifies the default IP family to use for a bearer when no explicit
value is given via the simple connect properties. The default IP family
is set to IPv4 in MMBearer but can be overridden by a MMBearer subclass,
which allows a modem plugin to specify an appropriate default value.
2013-04-23 15:25:48 +02:00