aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2010-06-22 14:37:20 -0700
committerDan Williams <dcbw@redhat.com>2010-06-22 14:37:20 -0700
commite442b3b7f13c7a7277b15f0b0cdf5175f4da22f6 (patch)
tree94eeb5c8dff5a624fc8a352553f593153538f8f3 /src
parent52929a2c926eee99e401765446c8f7a9168b38db (diff)
cdma: implement EquipmentIdentity for CDMA devices
Diffstat (limited to 'src')
-rw-r--r--src/mm-generic-cdma.c43
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)) {