These are Longcheer-based devices, but the vendor ID is different.
We had tagged the X060s' ports in the rules but never updated the
plugin to handle the different vendor ID.
This specifically fixes a regression with Novatel GSM secondary
AT port enablement, where the inital pin check closed the port
before the Novatel plugin could send the command to flip secondary
ports to AT mode.
But it's useful elsewhere too, and simplifies a bunch of the PIN
checking code which had to use various ugly methods to track whether
to close the port or not after checking the PIN.
Instead of returning an unhelpful error when there isn't a second
AT port (which there never will be for Novatel CDMA devices) we should
let the superclass handle the request.
The generic CDMA superclass already checks minimal registration state,
and when some of the additional query_registration_state() subclass checks
were being performed, if the device returned an error (if it didn't support
the subclass' specific registration command like *STATE or ^SYSINFO) the
superclass' registration state checks would be thrown away.
Fix that by specifying the behavior of the subclass'
query_registration_state() methods to ignore most errors and leave the
superclass' registration state intact if a non-critical error occurs.
Previously there was an issue where if the probe failed, because
we can't really probe huawei secondary ports for various reasons,
the Generic plugin would eventually come around and try actively
probing the secondary port after the Huawei plugin said "I don't
support this port". Which resulted (potentially) in two MMModem
objects for the same device (one driven by Huawei, the other by
Generic).
Some Novatel devices reply with the normal units to +CSQ and it
doesn't look quite like the +CSQ reply is in dBm either; so
use the custom Novatel command for RSSI.
Disconnect didn't actually work for HSO since it overrode the parent
class's connect handler and thus didn't set the right state after
the connection was made. It turns out we can use the same logic
that 'mbm' does for connection and not have to override quite so
much of the parent class.
This also splits the authentication and connection parts into two
distinct stages, which wasn't the case before but was what was
intended.
With the PIN changes, the primary port would already be closed
by the time the Novatel modem class was able to send the DMAT
command to enable the secondary ports. Just try again later.