Commit Graph
553 Commits
Author SHA1 Message Date
Dan Williams 8799f4da1f core: when probing mark ports as AT capable too
On a ZTE MF626, sometimes the aux port will respond only with
"ERROR" to probing commands (while the SIM is starting up) and
previously we'd lose the port because we were only looking for
valid probe responses.  But if the port returns ERROR or CME ERROR
etc we know it's an AT port and that we can use it once we've
gotten the type response (CDMA or GSM) from the main port.
2011-08-14 16:02:41 -05:00
Dan Williams 8ea17921e7 gsm: check both CS and PS registration state during poll
When connecting, and the modem isn't yet registered or denied, poll
both CS and PS registration state instead of just CS state, because
we're really more interested in PS state anyway.  If at least one
of the CS and PS state checks is successful then proceed with the
connection.
2011-08-14 15:37:38 -05:00
Dan Williams 33a97cdb13 core: log when serial port unexpectedly hangs up 2011-08-02 21:57:07 -05:00
Dan Williams eb2d14ab4a core: fix possible double-free
If there was data waiting, the task freed it, but then the port
got closed, and the data callback might have freed the data again.
2011-08-02 21:56:56 -05:00
Dan Williams 804cd7f077 gsm: work around Motorola Android phone modem bugs (bgo #637327)
It seems the Motorola Flipout with Android 2.1 doesn't like to return
configured PDP contexts via AT+CGDCONT?; it returns an error.  It
seems to accept the rest of the dial sequence though, so just ignore
the error when reading existing PDP contexts.
2011-08-02 12:43:26 -05:00
Dan Williams b9c2180886 core: fix serial port flashing after d3c2228f7b (bgo #650740)
Fix one more possible memory leak (left un-fixed by d3c2228 but not
caused by it) and ensure that modems that do want flashing get it
by default by adding the missing G_PARAM_CONSTRUCT so FLASH_OK
defaults to TRUE.
2011-08-02 11:07:55 -05:00
Dan Williams d3c2228f7b core: allow ports to skip flash behavior (bgo #650740)
Flashing is a technique to break out of the data/PPP stream and
re-enter command stream (like +++) and MM uses it in the generic
paths in various cases.  But devices that don't need it (ie, ones
with at least one AT capable port that won't be used for data)
now sometimes appear to have side-effects.

The Ericsson F5521gw firmware R2A07 resets port attributes like
echo and &C and such when the port is flashed, leading to
confusion on the part of MM.  Since the Ericsson devices will
always have at least one free AT port they don't need flashing
anyway.
2011-08-02 10:43:54 -05:00
Dan Williams e0eb7038af gsm: allow SIM operations while connected
No point in requiring these to be done from the primary port.
2011-08-01 17:18:08 -05:00
Dan Williams 30f848e700 cdma: don't blow away generic EVDO reg state if no specific state is available
Generic code (like the QCDM CM/HDR checks) would determine the EVDO
registration state, which would then get blown away by the device-specific
registration state query method.  Modems that have a more specific check
were fine, but generic devices that don't have more specific reg
state checks can simply rely on the generic checks done earlier and
don't need to update the EVDO state from real_query_registration_state().
2011-07-25 13:53:34 -05:00
Dan Williams b02dc7f50f core: allow getting the result from the MMCallbackInfo 2011-07-25 12:57:53 -05:00
Nathan Williams 061d410888 sms: calculate user-data bit padding correctly
Fourth and final in a series.

This fixes an off-by-one (septet) error in the calculation of the
amount of data to skip in the presence of a user data header, and adds
the test case from the wild that triggered it.
2011-07-25 01:18:35 -05:00
Nathan Williams e20173dc47 sms: recognize more text encodings from GSM 03.38
Third in a series. This fixes the bug detected by the dcsf1 test in
the just-added unit tests, by more thoroughly parsing the TP-DCS
field.
2011-07-25 01:18:30 -05:00
Nathan Williams c717dbd928 sms: add unit tests
Second in a series. Builds on the previous by actually unit-testing
the sms_parse_pdu() function. Note that the dcf1 test does not pass
as the code is currently written.
2011-07-25 01:18:22 -05:00
Nathan Williams e5faa242e9 sms: split SMS parsing out into a separate file
In preparation for adding tests.

Change-Id: If1ebd0fdd6e7470c21538042ab1735357649155c
2011-07-25 01:18:16 -05:00
Dan Williams 0cc813312f gsm: don't clear operator name or number when at least one of PS or CS is registered
The operator name/number isn't really tied to CS or PS registration, since
we retrieve it using AT+COPS.  But when one of CS or PS became unregistered
the operator name and number would get cleared out.  We only want to clear
it out when *both* CS and PS are unregistered.  Fixes an issue with the
location API where location would not be reported when one of CS or PS
became unregistered, because the location bits want an operator name
before they return the location.
2011-07-25 00:12:13 -05:00
Guido Günther 70715c1c12 huawei: implement ussd encoding/decoding
Huawei wants the USSD as packed GSM.
2011-07-21 15:16:44 -05:00
Guido Günther b82cec8c7e ussd: Add mm_modem_gsm_ussd_{de,en}code to the MMModemGsmUssd interface
since some some modems need different quirks to encode/decode USSD
messages.
2011-07-21 15:16:44 -05:00
Dan Williams 3e2b6fb24c cdma: set Rm interface protocol if required (bgo #641661)
Some providers (CDMA Ukraine) apparently require a specific Rm interface
protocol, so add some Simple Connect dict settings for that and use them
when dialing.  Obviously requires the connection manager to also have
support for sending the right bits down to MM.
2011-07-19 15:36:39 -05:00
Dan Williams 85000adfe9 core: add another CnS string to the immediate ignore list
Newer Sierra devices have this (ie 306); it's the CnS port so ignore
it immediately.
2011-07-18 18:31:58 -05:00
Dan Williams 46d757faa7 gsm: send init command twice to make the N900 happy (rh #583691) (lp:765516)
The N900 has some odd serial characteristics in that it appears to
send pieces of the commands back for whatever reason, until you've sent
a few commands down to it.  Almost like it's training on whatever
you send and needs a bit of input to figure out the characteristics.
Whatever.  Just send the init command twice instead of failing when
the N900 barfs the first time.
2011-07-06 15:49:34 -05:00
Dan Williams 2ca045f178 core: update some serial port settings
1) use cfsetispeed/cfsetospeed like the TTY manpage suggests
2) ignore parity/framing errors since we're not using parity anyway
3) double-check that all our TTY settings were successfully set
2011-07-06 15:49:02 -05:00
Thomas Grenman 3eaf753c7f gsm: set SMS storage location before enabling notifications
Fixes a firmware hang on Option GlobeTrotter Express (GE0201 with
firmware 1.12.1Hd (Date: Feb 22  2007, Time: 09:20:28)) and makes
sense in general too.
2011-06-30 15:51:53 -05:00
Aleksander Morgado 7762d401e8 Merge remote-tracking branch 'lanedo/power-up-check-needed' 2011-06-30 19:48:23 +02:00
Nathan Williams 1b73fa1541 Add a DBus interface for setting the log level.
Lifted almost entirely from similar code in NetworkManager.

BUG=chromium-os:15197
TEST='dbus-send --print-reply --system --dest=org.freedesktop.ModemManager /org/freedesktop/ModemManager org.freedesktop.ModemManager.SetLogging string:DEBUG'
Also try valid log levels 'ERR', 'WARN', 'INFO', and an invalid log level, such as 'ABCDE'.

Change-Id: I2bddcd0319f4966dd293b119f68e7cc1697949b7
Reviewed-on: http://gerrit.chromium.org/gerrit/3134
Tested-by: Nathan J. Williams <njw@chromium.org>
Reviewed-by: Eric Shienbrood <ers@chromium.org>
2011-06-30 12:25:02 -05:00
Nathan Williams b7820cf6e1 gsm: handle case of entirely empty SPN correctly
BUG=none
TEST=Insert a SIM with a present but empty (all 0xFF) SPN and check
the system log for a (lack of) assertion errors from mm_charset_gsm_unpacked_to_utf8().

Change-Id: I1250494b9757c9bfdce56402a4471c598f41223f
Reviewed-on: http://gerrit.chromium.org/gerrit/3139
Reviewed-by: Eric Shienbrood <ers@chromium.org>
Tested-by: Nathan J. Williams <njw@chromium.org>
2011-06-30 12:23:10 -05:00
Aleksander Morgado 39abb023ed serial: new property to enable RTS/CTS flow control 2011-06-22 15:53:37 +02:00
Aleksander Morgado 6e9d980e8c gsm: allow plugins to check if they need to issue the power-up command
Some modems only like the power-up command if not already in full functionality
mode. If the power-up is sent while already in full functionality mode, they get
rebooted and reseted.

With this changes, plugins can check whether they need the power-up and ask
the generic gsm code base to skip the command or not.

By default, power-up command (if any given) is never skipped.
2011-06-22 13:08:53 +02:00
Dan Williams 51c409d1eb ussd: fix reception, network notifications, and network requests
Because the code was sending the USSD request with a "notify me via
unsolicited result code" tag, the response could come from any port,
and in was coming from other ports on various devices.  But the code
expected the response on the main port, thus it got lost.

So turn the USSD response processing into an unsolicited command handler
instead, which allows us to process the response no matter where it
comes from.  This patch also enables network-initiated USSD
notifications and requests since that's easy to add once the first thing
here is done.
2011-06-15 13:06:37 -05:00
Dan Williams 77fa848820 serial: warn when open/close take longer than 7 seconds
Due to kernel bugs and such.
2011-06-15 12:50:35 -05:00
Dan Williams 6657e45a1e core: trivial whitespace cleanup
Tabs -> spaces
2011-06-09 16:53:05 -05:00
Nathan Williams 9f8d42a994 core: handle udev 'change' events
That's what the udev replay gives us these days (as of udev-152).
2011-06-09 16:51:35 -05:00
Dan Williams 63b29b79f9 gsm: fix memory leak when grabbing a new port 2011-06-09 15:01:20 -05:00
Dan Williams e5c967508d ussd: fix leaked callback info in error cases 2011-06-09 14:46:03 -05:00
Aleksander Morgado f9f6d1dfdb plugins: propagate cached probing result to supports task
We need to ensure that the supports task always has the results of the probing,
no matter if the probing was just launched by the plugin grabbing the port, or
by a previous plugin. We do this during supports_port(), by propagating to the
supports task any possible previously cached probing results.
2011-06-06 17:21:47 +02:00
Aleksander Morgado 22f15b87b5 base: disable the modem if up to N consecutive commands get timed out
This feature is initially disabled for all modems, but plugins can enable it by
setting a value greater than 0 for the "max-timeouts" property when creating the
modem object.
2011-06-06 17:20:17 +02:00
Aleksander Morgado f2ba435446 manager: protect ScanDevices() d-bus method with manager control policy rule 2011-06-06 17:20:17 +02:00
Aleksander Morgado c67cbcabef policy: new policy for manager control actions 2011-06-06 17:20:17 +02:00
Aleksander Morgado 3fb53d3348 manager: new ScanDevices() d-bus method to request a new device scan loop 2011-06-06 17:20:17 +02:00
Aleksander Morgado df0d9b480c plugin base: let plugins decide if they should be sorted last
Note that even if a plugin says it wants to be sorted last, the generic plugin
will always be the last one. Also, there is no order guaranteed between two
plugins that request to be sorted last.
2011-06-06 17:20:17 +02:00
Aleksander Morgado 5a2078a2a5 plugin base: include vendor ID and product ID retrieval during AT port probing
Port probing is extended to also query for Vendor ID and Product ID. This allows
plugins to check whether the reported IDs are expected, and thus we enable
plugins to handle modems connected via RS232 ports (where udev doesn't give any
vendor ID) or modems connected via a USB adapter (where udev gives the vendor ID
of the adapter).

Note that this effectively means that a plugin which expects these kind of modem
connections will end up always launching port probing as they won't only rely on
the vendor ID reported by udev.
2011-06-06 17:20:17 +02:00
Aleksander Morgado 668726dbd7 charsets: new utf8_to_hex() method 2011-06-06 17:20:16 +02:00
Aleksander Morgado 1e507824c6 gsm: let plugins use their own command for CMER enabling 2011-06-06 17:20:16 +02:00
Aleksander Morgado 85569f77e9 gsm: let plugins use their own commands for SMS indications and storage configuration 2011-06-06 17:20:16 +02:00
Dan Williams b122938ab5 core: allow plugins to stop probing and not support a modem
Previously plugins could only stop probing, *or* stop probing and
indicate support for a device.  For the Alcatel X200/X060s debacle
we need to stop probing and indicate that the plugin does not
support the device at all.
2011-06-05 20:58:13 -05:00
Aleksander Morgado d37dbaca2a core: ensure ERROR_REMOVED error is used in MMCallbackInfo when detecting modem removal 2011-06-05 17:51:03 +02:00
Aleksander Morgado 9323daec01 core, plugins: if modem removed don't process response
We try to avoid a memory leak when info->error is reset, as well as a second
re-schedule of the info.
2011-06-05 17:51:00 +02:00
Nathan Williams f7dff81eec gsm: free the string allocated by utils_hexstr2bin().
Change-Id: I1f7dabc8209d9757b573a59abb788a2346f72ad5
2011-06-02 17:50:47 -05:00
Nathan Williams a1378ae8e8 Spec out and implement a command to get a GSM SIM SPN value.
Using a SIM with a SPN, run the following command:
dbus-send --system --dest=org.freedesktop.ModemManager --print-reply /org/freedesktop/ModemManager/Modems/0 org.freedesktop.ModemManager.Modem.Gsm.Card.GetSpn

Change-Id: I8f36c8432f40fa4e3cb3f8c6ceef16b2bdadf2a1
Reviewed-on: http://gerrit.chromium.org/gerrit/1464
Reviewed-by: Nathan J. Williams <njw@chromium.org>
Tested-by: Nathan J. Williams <njw@chromium.org>
2011-06-02 17:45:56 -05:00
Nathan Williams dfab00bf1e sms_decode_address(): Add a leading "+" on international numbers.
BUG=chromium-os-partner:4278
TEST=Send SMS from phone (to get +... format) and from AIM-SMS gateway
(to get raw-digit format).

Change-Id: I36eb9f1432a432435578180dfdb315b0e7ee5744
2011-06-02 17:42:20 -05:00
Aleksander Morgado 6d69432a85 serial-parser: allow 0 or more whitespaces before error code in regular expresions 2011-06-02 16:49:53 +02:00