For mixed 3GPP+CDMA modems, we check registrations in both 3GPP and CDMA
networks, and we stop checks when we find ourselves registered in either one
or the other.
This will really not be like the 3GPP method. In 3GPP we can request to do
auto-registration, or request to lock to a specific Operator. Once that done,
we wait for unsolicited registration messages and also perform peridic
registration checks.
In the case of the CDMA network, the registration seems to be always automatic.
Therefore, this method to register in the CDMA network will just make sure that
we got registered, by waiting up to N seconds while doing periodic registration
checks.
* Include interface-specific prefixes in methods implemented (e.g.
'modem_3gpp_' for all 3GPP interface method implementations.
* Pack together in the private struct variables required in the implementation
of a given interface.
This is, remove the use of "AT+COPS=0,,". The extra commas break its use in a
Nokia C7, and the proper/clean way to do it anyway is to avoid using the commas.
My LG Rumor2 phone (ttyACM0 - AT, ttyUSB0 - QCDM) was never getting
exported after the QCDM port finished probing. Not entirely sure
why, but we should check whether we need to export a modem or not
any time a port gets grabbed.
Where we have multiple commands that are all supposed to return
the same thing (ie, GMM/CGMM, CSQ/CSQ?) but some modems
support one and not the other, don't exit the sequence early if
the modem doesn't support one of them.
Gobi modems with CDMA firmware don't support the Cxxx variants
so the returned ERROR (CME error 100) made the generic parser
break out of the AT sequence without trying the additional
commands that are supported.
If deferring tasks until result suggested, and we never got a suggestion, the
tasks may have been left deferred in loop forever. We now remove the defer
timeout in the case of waiting for suggestion, and ensure that we cancel tasks
if the last valid probing ended without best plugin found.
If we know that there is no QCDM port, skip QCDM-based checks.
If we know there are Sprint commands, skip CDMA1x Serving System check.
If we know there are no Sprint commands, skip detailed registration getter.
Implementations of the CDMA interface are allowed to specify which steps in the
registration checks can be skipped. For example, if no QCDM ports are available,
there won't be any need to try QCDM-based checks; or if Sprint commands are
available, there won't be any need to run CDMA1x Serving System checks.