If the device only has one AT port that's being used for data and
thus we can't do more specific registration checking in MMGenericCdma
using AT commands, but generic registration checking was successful,
just use the less specific state.
Previously, an error would be returned when no AT port was available
even though less specific QCDM registration checking worked. That
was just stupid.
Implement connect, disconnect, and IP4 config stuff.
Also fix handling of Icera private data. After creation we
need to use MM_MODEM_ICERA_GET_INTERFACE(m)->priv to get the
private data instead of just dereferencing the MMModemIcera,
for reasons that I don't know. If this isn't done, data
gets silently corrupted because writes to the private data
are going into a random location in the object. This a
side-effect of the slightly hack-ish way that MMModemIcera
is a GInterface with private data.
If the modem's IP Method changes after construction because the
modem's full capabilities were only discovered after it was created,
make sure the change notification gets emitted.
This can be used by a connection manager to decide to respond in a different way
to certain kinds of disconnects (e.g. intentional versus unintentional versus
suspension).
TEST=None
This change introduces no additional code, so testing it in isolation is not
possible.
BUG=chromium-os:6744
Change-Id: Ie371e20ec7a003333eba013af3ad61c0e494a4ad
Signed-Off-By: Elly Jones <ellyjones@chromium.org>
Review URL: http://codereview.chromium.org/3413011
(cherry picked from commit 29a9674b818fd64c19bad84f526f6fa68edec174)
BUG=6885
TEST=inspect mm-modem.h, build cromo et al against new mm-modem.h
Change-Id: Id8c849b6cffbadb9d5d2aa4109257eb747cf9bb5
Review URL: http://codereview.chromium.org/3616004
(cherry picked from commit 3a50b8c28d155060ce035a1c6d5eadf3d91297a5)
Also, include the interface name in the method and signal names, to avoid name collisions. I have corresponding changes in the flimflam modemmgr plugin to accomodate the new names.
For a sample of the output, see ~ers/mm-modem.h
Review URL: http://codereview.chromium.org/2852010
(cherry picked from commit f9dbea25b8ba4414c77d6dfc94545bf7b5c26e68)
The kernel appears to add the device first without any parents,
then to move it to the correct place in the hierarchy, with its
immediate parent being the device's HCI controller. So we need
to capture the 'move' event too since that's when the rfcomm
device is finally usable.
Which requires that we turn it into a GInterface that MMModemBase
can implement, because dbus-glib does not allow attaching more
than one introspection glue structure to an object at a time.
Also implement the standard D-Bus properties changed signal.
Ignore devices that aren't completely configured by udev yet. If
ModemManager is started in parallel with udev, explicitly requesting
devices may return devices for which not all udev rules have yet been
applied (a bug in udev/gudev). Since we often need those rules to match
the device to a specific ModemManager driver, we need to ensure that all
rules have been processed before handling a device.
Do this by adding an item to the environment of each device that MM
might possibly be interested in, and ignoring devices that don't
have that. When the device is fully processed by udev, MM will get
an 'add' event and the device will have all rules applied.