cdma: implement EquipmentIdentity for CDMA devices

This commit is contained in:
Dan Williams
2010-06-22 14:37:20 -07:00
parent 52929a2c92
commit e442b3b7f1
+42 -1
View File
@@ -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)) {