diff options
author | Dan Williams <dcbw@redhat.com> | 2010-06-22 14:37:20 -0700 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2010-06-22 14:37:20 -0700 |
commit | e442b3b7f13c7a7277b15f0b0cdf5175f4da22f6 (patch) | |
tree | 94eeb5c8dff5a624fc8a352553f593153538f8f3 /src | |
parent | 52929a2c926eee99e401765446c8f7a9168b38db (diff) |
cdma: implement EquipmentIdentity for CDMA devices
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-generic-cdma.c | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/src/mm-generic-cdma.c b/src/mm-generic-cdma.c index 0c185d14..7f34960e 100644 --- a/src/mm-generic-cdma.c +++ b/src/mm-generic-cdma.c @@ -124,6 +124,44 @@ check_valid (MMGenericCdma *self) mm_modem_base_set_valid (MM_MODEM_BASE (self), new_valid); } +static void +get_esn_cb (MMModem *modem, + const char *result, + GError *error, + gpointer user_data) +{ + if (modem) { + mm_modem_base_set_equipment_identity (MM_MODEM_BASE (modem), error ? "" : result); + mm_serial_port_close (MM_SERIAL_PORT (MM_GENERIC_CDMA_GET_PRIVATE (modem)->primary)); + check_valid (MM_GENERIC_CDMA (modem)); + } +} + +static void +initial_esn_check (MMGenericCdma *self) +{ + GError *error = NULL; + MMGenericCdmaPrivate *priv; + + g_return_if_fail (MM_IS_GENERIC_CDMA (self)); + priv = MM_GENERIC_CDMA_GET_PRIVATE (self); + + g_return_if_fail (priv->primary != NULL); + + if (mm_serial_port_open (MM_SERIAL_PORT (priv->primary), &error)) { + /* Make sure echoing is off */ + mm_at_serial_port_queue_command (priv->primary, "E0", 3, NULL, NULL); + mm_modem_cdma_get_esn (MM_MODEM_CDMA (self), get_esn_cb, NULL); + } else { + g_warning ("%s: failed to open serial port: (%d) %s", + __func__, + error ? error->code : -1, + error && error->message ? error->message : "(unknown)"); + g_clear_error (&error); + check_valid (self); + } +} + static gboolean owns_port (MMModem *modem, const char *subsys, const char *name) { @@ -176,7 +214,10 @@ mm_generic_cdma_grab_port (MMGenericCdma *self, priv->data = port; g_object_notify (G_OBJECT (self), MM_MODEM_DATA_DEVICE); } - check_valid (self); + + /* Get modem's ESN number */ + initial_esn_check (self); + } else if (ptype == MM_PORT_TYPE_SECONDARY) priv->secondary = MM_AT_SERIAL_PORT (port); } else if (MM_IS_QCDM_SERIAL_PORT (port)) { |