Just before sending a CMGR for +CMTI notification, use need to
optionally send a CPMS to select the proper storage. This should be
done in a separate function for potential re-use by CDSI
This patch is meant to do two things:
- Some modems, like the Novatel, report bogus operator information when
not registered, as opposed to simply returning empty strings. In this
case we're a little bit more explicit about checking the returned
mcc/mnc string
- If we determine that the mcc/mnc string is bogus, we don't schedule
the alphanumeric cops query and return early.
The Novatel based devices with Qualcomm chips seems to have various
problems. First they advertise CNMI mode 2, but don't support it. And
second they don't support CNMA acknowledgement with a PDU. So fall back
to acks without PDU.
Ofono either crashed or busy looped with my Huawei E1552 3G modem when I
tried to deactivate GPRS context. The reason was that gcd->chat was
unreferenced already in setup_ppp() but the chat was still accessed
later in at_gprs_deactivate_primary().
To fix the problem, change the logic instead to suspend chat session
for PPP and resume when PPP has disconnected. Now it doesn't crash
anymore.
Deactivation still doesn't work properly with Huawei E1552, and most
probably with other Huawei modems, because the modem hangs up the chat
line after PPP deactivation. This needs to be fixed separately. The
workaround is to reboot the modem, for example physically unplug and plug
it in again.
If we register for CREG notifications before the netreg atom is
registered (e.g. in MBM due to CIND queries) we crash if the CREG
notification arrives before the CIND is queried.
Not doing this creates a race condition where any notification
comming in in the middle of a sequence of commands may be counted
as a response to one of the commands and get lost.
Any timeouts set must be removed using g_source_remove. Failure to do
so results in sigsegvs when the modem is randomly removed during the
initialization cycle.
MBM devices do not support CSCB mode 1 (remove topics). It is thus
necessary to use mode 0 and sending an empty topic list in order to turn
off all topics. This patch will first query the CSCB modes supported by
the hardware. If mode 1 is supported, then the old behavior is used,
otherwise the new behavior is used.
Sometimes the CGREG query and CGREG unsolicited notification get
intermixed. Since they have the same prefix, GAtChat clumps them
together. Make sure the parser skips the unsolicited notification.
A field 'mpty' is added to ofono_call so that we can know
whether the call belongs to multiparty call or not. According
to 27.007 7.18, it is a defined return value of AT+CLCC.
This utility will be used by HFP voicecall driver to compare
two calls. In some hardware, the call index may be shift when
a call transitions from waiting to incoming state (e.g. all other
held and active calls are released)
This commit implements the GPRS context setup and teardown according to
doc/dataconnectionmanager-api.txt
One issue with the AT implementation of the api is that "Powered" (a
read-write property) can be set independently of "Attached" (read-only
property) and remain set when "Attached" is clear. The semantics would
be that the network doesn't have resources to let the modem attach,
but the modem waits for the resources to become available and then
attaches. On AT the modem is in this state only when executing +CGATT,
so currently the code will rerun +CGATT as soon as the previous one
returns with error, probably starving other commands. A possible
workaround would be for "Powered" to flip back to False after the modem
fails to attach once, or give up on having separate properties.
Alternatively we could re-try to attach periodically but on one modem
I've tried +CGATT fails after about 1 minute (that's the Calypso) and
on another only about 0.5s (Nokia phones with AT emulation).
When "Powered" is set and "RoamingAllowed" is clear and we manage to
attach and find that we're roaming, ofono resets "Powered".
We may want to catch the user trying to dial *99***1# which is the
backwards compatibility quirk for old modems (same way ofono parses
USSD strings).
When an active and a waiting call exist, and the active is released the
waiting call becomes incoming. This wasn't properly handled by the
generic at driver.
3G (UICC) based SIMs use a different response format than 2G sims. In
theory this also allows us to determine whether SIM filesystem format is
3G or 2G
It may be useful to have the information of whether card is currently
locked and emit events when this changes but if we want to have it as a
property, we would need properties for all types of locks and it wouldn't
be all that useful.
On modems that don't support +CMT (or for class 2 SMSes) the messages are
stored in the modem and then read and deleted from there in two separate
steps with no warranty that deletion succeeds or (more likely) power is
cut before the deletion happens. Over time the memory may become full
and if we don't want to deal with this condition we need to check on
startup if there are messages we haven't deleted.
We can't differentiate between those messages and those the user already
had on the SIM / modem before installing ofono or switching phones, so we
might want to deliver messages with REC READ status with some kind of
indication that these are potentially old so the UI doesn't emit spurious
alerts. We don't do this now and just deliver as usual.
The G1 doesn't support mode2, despite advertising it.
The G1 chokes w/ an "Error 303" when we specify NMI mode 2. Adding a
quirk to drop that mode from the supported list (just use mode 1) allows
the G1 to properly deal with SMS.