Commit Graph
79 Commits
Author SHA1 Message Date
Thieu Le a006761c71 novatel-lte: abort connect request if call failed
Change-Id: Iae16ec87e12aaaf314b7e66b2f9c72a13251e352
2013-10-01 12:16:35 -05:00
Aleksander Morgado d818d9fe06 bearer: consolidate unsolicited connection status reports
Originally developed by:
  Ben Chan <benchan@chromium.org>

This patch replaces mm_bearer_report_disconnection() with a more generic
mm_bearer_report_connection_status(), which allows reporting any
connection status of a bearer. This further allows getting rid of those
custom report_connection_status functions in plugic specific bearer
subclasses.

Note that while plugin-specific implementations can receive multiple
'MMBearerConnectionStatus' values, the generic implementation is only allowed
to receive DISCONNECTED. Plugins need to make sure that they process all the
other status values, and only report DISCONNECTED to the parent when required.

MBM:
  The MBM bearer implementation of report_connection_status() expects either
  CONNECTED or DISCONNECTED. If any of these is received and there is an ongoing
  connection attempt, the corresponding operation will be completed. If there is
  no connection attempt, we will just handle the DISCONNECTED state, calling the
  parent method to notify that the modem got network-disconnected.

Icera:
  The Icera bearer implementation of report_connection_status() expects either
  CONNECTED, CONNECT FAILED or DISCONNECTED. If any of these is received and
  there is an ongoing connection or disconnection attempt, the corresponding
  operation will be completed. If there is no connection or disconnection
  attempt, we will just handle the CONNECT FAILED and DISCONNECTED states,
  calling the parent method (always with DISCONNECTED) to notify that the modem
  got network-disconnected.

Option/HSO:
  The Option/HSO bearer implementation of report_connection_status() expects
  either CONNECTED, CONNECTION FAILED or DISCONNECTED. If any of these is
  received and there is an ongoing connection or disconnection attempt, the
  corresponding operation will be completed. If there is no connection or
  disconnection attempt, we will just handle the CONNECTION FAILED and
  DISCONNECTED states, calling the parent method (always with DISCONNECTED) to
  notify that the modem got network-disconnected.

Huawei:
  The Huawei bearer implementation of report_connection_status() expects either
  CONNECTED or DISCONNECTED. These messages are not used to process pending
  connection or disconnection attempts; so if they are received while one of
  these is on-going, it will just be ignored. CONNECTED reports are also
  ignored, so we will just handle the DISCONNECTED state, calling the parent
  method to notify that the modem got network-disconnected.

Altair-LTE:
  The Altair-LTE bearers will only report DISCONNECTED on network-disconnected
  cases. There is no custom report_connection_status().

Novatel-LTE:
  The Novatel-LTE bearers will only report DISCONNECTED on network-disconnected
  cases. There is no custom report_connection_status().
2013-09-23 08:29:15 +02:00
Ben Chan 387c97d81f novatel-lte: check if a connect operation has been cancelled 2013-08-27 09:57:14 -05:00
Ben Chan 5be1ce6ee1 novatel-lte: propagate error when load_current_bands fails
This patch fixes the following crash when
MMIfaceModem::load_current_bands_ready() dereferences a NULL GError
pointer, which happens when the novatel-lte plugin fails to load the
current bands but does not propagate the error.

Thread 0 *CRASHED* ( SIGSEGV @ 0x00000000 )

0x7f04d6c89c36   [ModemManager]            - mm-iface-modem.c:3886      load_current_bands_ready
0x7f04d6942236   [libgio-2.0.so.0.3200.4]  - gsimpleasyncresult.c:767   g_simple_async_result_complete
0x7f04d6942338   [libgio-2.0.so.0.3200.4]  - gsimpleasyncresult.c:779   complete_in_idle_cb
0x7f04d67fad74   [libglib-2.0.so.0.3200.4] - gmain.c:2539               g_main_context_dispatch
0x7f04d67fb0f7   [libglib-2.0.so.0.3200.4] - gmain.c:3146               g_main_context_iterate
0x7f04d67fb551   [libglib-2.0.so.0.3200.4] - gmain.c:3340               g_main_loop_run
0x7f04d6c68795   [ModemManager]            - main.c:142]                main
0x7f04d6213464   [libc-2.15.so]            - libc-start.c:234]          __libc_start_main
0x7f04d6c68318   [ModemManager]            + 0x0001d318]
2013-06-28 07:35:53 +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
Ben Chan ba14d15df3 novatel-lte: increase number of retries for connection status checks
This patch increases the number of retries, from 4 to 60, for connection
status check during a connection / disconnection request, which handles
some scenario when the connection / disconnection request takes more
than 5 seconds to complete.
2013-05-28 17:31:25 +02:00
Ben Chan c4f0ad6905 novatel-lte: normalize QMI status when included in DBus error message
This patches normalize a response for the AT$NWQMISTATUS command, by
replacing white-space characters with a space, before the response is
included in a DBus error message.
2013-05-28 10:03:40 +02:00
Ben Chan 3332333852 novatel: fix invalid comparison of unsigned expression
This patch fixes the following invalid comparison of unsigned expression:

novatel/mm-plugin-novatel.c:148:29: error: comparison of unsigned
      expression >= 0 is always true [-Werror,-Wtautological-compare]
    if (ctx->nwdmat_retries >= 0) {
        ~~~~~~~~~~~~~~~~~~~ ^  ~

Bug reported on https://code.google.com/p/chromium/issues/detail?id=242150
2013-05-20 10:25:32 +02:00
Aleksander Morgado d169c99dc9 novatel: skip $NWDMAT if the modem has QMI ports 2013-05-07 18:49:57 +02:00
Aleksander Morgado 2c83334c25 novatel: allow QMI-powered modems 2013-05-07 09:11:28 +02:00
Aleksander Morgado 031657cea5 novatel: don't filter out the USB551L
We filter the E362 because it's managed by the Novatel LTE plugin. If we also
filter out the USB551L, but it's not explicitly grabbed by any other plugin, it
will default to the Generic one.
2013-05-07 09:08:17 +02:00
Aleksander Morgado 76d97c6334 novatel: don't explicitly filter by drivers
No real need to do it; the VID filter is already enough.
2013-05-07 09:05:49 +02: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
Aleksander Morgado 52fd67e365 novatel: ensure error is set when $NWRAT response parser doesn't match 2013-04-25 09:36:51 +02:00
Dan Williams 463de46e9e novatel: ignore USB551L
Just like the E362, which the USB551L is quite similar to.
2013-04-16 19:36:55 -05:00
Dan Williams 477623f0a0 broadband-modem-novatel: implement CDMA time API (bgo #696739)
Use AT$NWLTIME to get current time and UTC offset.
2013-03-29 08:49:47 -05:00
Aleksander Morgado b76dc134bf novatel: try to flip secondary ports to AT as soon as possible
So do it during port probing. If we send this command early enough in the
first AT port being probed, it should flip the secondary ports to AT mode
before their port probing is finished.

https://bugzilla.gnome.org/show_bug.cgi?id=696696
2013-03-28 17:05:48 +01:00
Aleksander Morgado d0c18b4277 bearer-novatel-lte: fix reference counting of the 'data' port 2013-02-20 10:09:42 +01:00
Aleksander Morgado b6402a4e21 bearer,3gpp: dial operation specifies which data port to use
Instead of deciding in advance which data port to use, we let the dialling
operation gather it. For the generic dialling logic, ATD-based, always an
'AT' port will be used as data port, even if we grabbed a 'net' port. Those
plugins that can work with 'net' ports will grab the specific 'net' port
themselves.
2013-02-18 15:41:26 +01:00
Aleksander Morgado 15d34d56fd bearer: new helper 'MMBearerConnectResult' type
Instead of returning 3 variables in connect_finish(), return a single reference
counted struct. This simplifies how the result is built and passed within a
GSimpleAsyncResult to each _finish() method.

This also simplifies the dialling step in the 3GPP connection sequence, as we
can use the same new type.
2013-02-18 15:41:26 +01:00
Aleksander Morgado 30639606d3 broadband-modem: new step during 'enabling_started' to initialize the modem
We previously had the modem initialization command merged with some other port
setup commands in the 'modem_init' step of the 'Modem' interface. Instead of
doing this, we now split the logic into two separate steps:

A first 'enabling_modem_init' modem initialization step is to be run just after
the ports have been opened, but only during the first enabling operation, and
only if the modem was not hotplugged. A hotplugged modem is assumed to be
properly initialized already, so no need to ATZ-it. Also, we will now wait 500ms
by default after the modem initialization command has been sent, to let it
settle down.

The second 'modem_init' step will be run during the 'Modem' interface
initialization, and it currently only holds specific setup of the primary and
secondary serial ports. We'll be modifying this logic a bit in the next commits,
so no big deal to have that step name unchanged.
2013-02-18 13:47:34 +01:00
Dan Williams 90ecbe325a broadband-modem-novatel: read HDR revision for access technology
Specialize what the superclass gave us, if we can.
2013-02-06 11:57:00 -06:00
Dan Williams 8253d6f9de broadband-modem-novatel: use ERI subsystem information to better determine roaming
We use the Icon ID here because a value of 1 *always* means not roaming,
while the other values don't appear to be consistent.  For example,
an ERI value of "0" is supposed to mean roaming according to the
standards, but the Novatel devices appear to use 0 to mean home.
Since we're not sure, don't depend on the ERI value itself, just
depend on the Icon ID, where we know for sure that 1 means "home".
2013-02-06 11:57:00 -06:00
Ben Chan 86fcfe3121 novatel-lte: use +CFUN=4 for power down 2013-01-30 23:12:10 +01:00
Ben Chan 87a556dbb1 novatel-lte: retry $NWQMISTATUS check upon error during disconnect
$NWQMISTATUS sometimes returns 'ERROR'. This patch modifies the Novatel
LTE plugin to retry $NWQMISTATUS (up to 5 times) to determine if the
disconnect operation succeeds. It also changes the plugin to assume that
the disconnect operation succeeds if $NWQMISTATUS fails to report the
current connection status.
2013-01-30 23:11:59 +01:00
Ben Chan 9474654f67 novatel-lte: skip soft reset if modem is newly plugged in
Soft resetting a Novatel LTE modem can a significant amount of time
(3-4 seconds). If the modem is newly plugged in, skip the unnecessary
soft reset when enabling the modem.
2013-01-18 11:27:58 +01:00
Dan Williams f7d55a688a broadband-modem-novatel: fix signal strength processing for older devices
mm_get_int_from_str() does not allow anything in the string after the
number, eg "-91  asdfasdf" returns an error.  So we have to chop off
anything after the number we're interested in.
2013-01-14 13:50:26 -06:00
Ben Chan e939221975 iface-modem, novatel-lte: disable network scan in LTE mode 2013-01-04 12:10:51 +01:00
Aleksander Morgado 7da2a65b43 plugins: fix generic GObject related macros 2012-12-27 08:48:11 +01:00
Ben Chan 5a16f2aff1 novatel-lte: use $NWMDN to read own number when +CNUM fails
+CNUM may return ERROR when the modem fails to read the own numbers from
the SIM card or when the SIM card hasn't been activated. Use $NWMDN to
read the MDN as a fallback, which distinguishes these two cases.
2012-11-05 16:10:19 +01:00
Ben Chan 15f7a370d2 novatel-lte: increase the wait after SIM unlock to 3 seconds
After repeated stress tests on a few Novatel E362 modems and SIM cards,
it is revealed that a 3-second wait after SIM unlock is necessary for
reliably reading ICCID and IMSI through the SIM interface.
2012-11-02 08:19:47 +01:00
Ben Chan 10a0ed12c4 novatel-lte: retry $NWQMISTATUS upon an unknown error during connecting
The $NWQMISTATUS command sometimes replies an ERROR shortly after
calling the $NWQMICONNECT command, but then replies the proper QMI
status if we retry it. This behavior is observed on an E362 modem with
4.08 firmware.

    (ttyUSB0): --> 'AT$NWQMICONNECT=,,,,,,"",,,"",""<CR>'
    (ttyUSB0): <-- '<CR><LF>OK<CR><LF>'
    (ttyUSB0): --> 'AT$NWQMISTATUS<CR>'
    (ttyUSB0): <-- '<CR><LF>ERROR<CR><LF>'
    Got failure code 100: Unknown error
    QMI connection status failed: Unknown error
2012-10-22 10:46:57 +02:00
Ben Chan 8362171973 novatel-lte: handle $NWQMISTATUS responses for firmware 4.08
In firmware 4.08, the $NWQMISTATUS command returns different values for
QMI state to indicate the current connection state. This patch modifies
the code to handle $NWQMISTATUS responses in firmware 1.41 and 4.08.
2012-10-22 10:46:57 +02:00
Aleksander Morgado c250fa3797 libmm-glib: remove the `libmm-common.h' header
Both the ModemManager daemon and the mmcli will now include `libmm-glib.h' only.

We also handle two new special `_LIBMM_INSIDE_MM' and `LIBMM_INSIDE_MMCLI'
symbols, which if included before the `libmm-glib.h' library allow us to:

 * Don't include the libmm-glib high level API in the ModemManager daemon, as
   the object names would clash with those in the core.

 * Define some of the methods of helper objects to be included only if compiling
   ModemManager daemon or the mmcli.
2012-10-04 10:17:12 +02:00
Aleksander Morgado a66f971a7c libmm-common: added common utils from core
Moved the utils to play with binary to hex strings into libmm-common.
2012-09-14 07:05:26 +02:00
Aleksander Morgado b42b5795e3 iface-modem-messaging: automatically detect the best default storage
Instead of letting the plugins specify a default storage to use, just look at
the supported ones and use the best one.

"MT is preferred over "ME" or "SM", as "MT=ME+SM"
2012-09-14 07:05:23 +02:00
Aleksander Morgado bddcc2fb07 iface-modem-messaging: instead of mem1,mem2,mem3 use just a new default storage
There is no point in specifying a default 'mem1' memory storage, which is used
for reading/listing/deleting, as those are operations that need a specific
'mem1' set each time.

Also, there is no point in specifying separate default 'mem2' and 'mem3' memory
storages, specially because now we allow Sms.Store() to specify a storage.

So, we will now only have a 'default' memory storage, which is applicable for
both 'mem2' and 'mem3' (storing, sending from storage and deleting).
2012-09-14 07:05:23 +02:00
Ben Chan 36c7136510 novatel-lte: implement modem reset 2012-09-11 08:47:07 +02:00
Ben Chan 1252572607 novatel-lte: set default SMS storage to 'SM'
Novatel E362 LTE modem only supports 'SM' and 'SR', but not 'ME'.
2012-09-08 10:19:01 +02:00
Aleksander Morgado f53e53ba37 novatel: fix checking ERI for roaming/home decision
This is a port to git master of the following commit:

commit c21e29c50b5661308fb3b223c05f6942c06dc15d
Author: Dan Williams <dcbw@redhat.com>
Date:   Fri Aug 24 13:31:04 2012 -0500

    novatel: fix checking ERI for roaming/home decision

    More fallout from b22b2d99db
    which changed the return type of the qcdm_result_get_*() functions.
2012-08-31 10:04:37 +02:00
Ben Chan b060bcfc74 novatel-lte: use 'AT+CRSM=176,28423,0,0,9' instead of 'AT+CIMI' to read IMSI
Based on empirical results, 'AT+CRSM=176,28423,0,0,9' is found more reliable
than 'AT+CIMI' for reading IMSI.
2012-08-30 09:29:39 +02:00
Ben Chan a2aad7d293 novatel-lte: add a 2-second wait after SIM unlock 2012-08-30 09:18:00 +02:00
Aleksander Morgado a1d6667df9 novatel: don't claim the Novatel E362, should be handled by `novatel-lte' 2012-08-26 23:01:50 +02:00
Aleksander Morgado 0436b3e457 api,introspection: report list of drivers, not just one
Different ports of the same modem may get handled by different drivers. We
therefore need to provide a list of drivers (new `Modem.Drivers' property with
signature 'as') instead of just one (removed `Modem.Driver' property with
signature 's').

$ sudo mmcli -m 0 | grep drivers
           |        drivers: 'qcserial, qmi_wwan'
2012-08-24 13:34:51 +02:00
Aleksander Morgado a595912d2d novatel: fix creation of the `MMBroadbandModemNovatel' object 2012-08-24 13:09:17 +02:00
Aleksander Morgado 5764d39689 modem-helpers: ERI parser is generic enough, not just for !SPERI 2012-08-23 18:56:22 +02:00
Aleksander Morgado e38828c318 broadband-bearer: allow implementations to override the port used for connection 2012-08-23 18:56:22 +02:00
Aleksander Morgado 678972b63a novatel: add detailed CDMA registration state checks 2012-08-20 16:27:05 +02:00
Aleksander Morgado 773ff03f91 novatel: custom signal quality loading for non-3GPP modems 2012-08-20 16:27:05 +02:00