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.
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.
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.
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.
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.
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>
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.
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.
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>
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
sms_parse_pdu(): Protocol ID doesn't actually affect decoding, so
don't fret about its value.
ChromeOS:
Change-Id: Ia4cb20c415aed1026bb7b8dd4daa8ae53dd749e8
If the modem for some reason returns ERROR for a +CPIN when it's
unlocked, and subsequent PIN post-unlock pin checks return READY,
just treat the modem as unlocked don't return the +CPIN error.
We want to enable unsolicited responses on secondary ports too,
so that if the modem only sends unsolicited responses on the ports
on which they were enabled, that we can get resposnes off the
secondary port when the primary port is connected. But we can't
always trust devices to actually send them on the secondary port,
so we enable the unsolicited responses on both the primary and
secondary ports just in case.
-1 = no APN set, so use modem default. We'll have to fix a few
more things up for modems like hso/mbm that don't use ATDT and
require CIDs, but this gets us halfway there for other devices.
If the base class advertises that it implements an interface, it
really does need to implement all that interface's properties too.
Otherwise dbus-glib gets mad and can't look up the property information
for D-Bus Introspection.
We currently convert to and from the modem's set charset and always pass
'15' as the data coding scheme. Passing the correct data coding scheme
as third argument to CUSD only upsets the network. This contradicts 3GPP
TS 23.038. Other tools like gsm-ussd handle it the same way.
Network responses that require further actions are not yet implemented.
(some fixes and cleanups by Dan Williams)
Checking PIN status makes sure the SIM is initialized, and
that has to happen before we try to read the SIM for the
ICCID. So move PIN checking before getting the ICCID, and
retry the ICCID at least once for odd cards like Gobi 1K
that seems to need one more try right after it's done
booting up.
An obfuscated SimIdentifier that may be available before the PIN has
been entered, for use in auto-unlocking a device. If this value is
present, it should be used in preference to DeviceIdentifier as it
is SIM-specific like the PIN code.
Pass the device's hardware IDs through modem creation and use them
when calculating the device's identifier. Add a bunch of testcases
for real hardware to ensure we don't break the device ID in the
future unless we really want to.
This is computed before any PIN is entered, and thus before we can
usually get IMEI or MEID/ESN out of the device in many cases. It's
therefore not the same as EquipmentIdentifier.
This is intended to be used by UI programs for matching devices with
PIN numbers for automatic unlocking. While the PIN number is actually
*SIM* specific, no modems allow access to the IMSI before the PIN is
entered, and thus we cannot actually match the PIN with the SIM. The
device ID is the next best thing we can use and should allow auto
unlocking in most cases.
It's only really used for phonebook and SMS PDU mode in the specs,
which we don't do yet, so if this is the only charset the device
supports we'll try to use it.
If the modem returns an error (like "+CME ERROR: incorrect password"
or even just ERROR) make sure we recheck PIN status and thus also
recheck the number of unlock retries instead of just returning the
error to the caller.