diff options
author | Tambet Ingo <tambet@gmail.com> | 2009-02-27 10:21:23 +0200 |
---|---|---|
committer | Tambet Ingo <tambet@gmail.com> | 2009-02-27 10:21:23 +0200 |
commit | 6606e15a9b6877d91a7125a31510c011522217b7 (patch) | |
tree | ed2532bace1c178728735d93f2ced75e2bfec5f1 /plugins/mm-plugin-novatel.c | |
parent | a7f9033611290a3fe87d89c1a7ae30c47c04e87a (diff) |
Handle CDMA modems in Novatel plugin.
Diffstat (limited to 'plugins/mm-plugin-novatel.c')
-rw-r--r-- | plugins/mm-plugin-novatel.c | 64 |
1 files changed, 46 insertions, 18 deletions
diff --git a/plugins/mm-plugin-novatel.c b/plugins/mm-plugin-novatel.c index 4abfdfa2..68950ac2 100644 --- a/plugins/mm-plugin-novatel.c +++ b/plugins/mm-plugin-novatel.c @@ -4,6 +4,7 @@ #include <gmodule.h> #include "mm-plugin-novatel.h" #include "mm-modem-novatel.h" +#include "mm-generic-cdma.h" static void plugin_init (MMPlugin *plugin_class); @@ -60,33 +61,50 @@ list_supported_udis (MMPlugin *plugin, LibHalContext *hal_ctx) return supported; } -static gboolean -supports_udi (MMPlugin *plugin, LibHalContext *hal_ctx, const char *udi) +static void +is_novatel_modem (LibHalContext *hal_ctx, + const char *udi, + gboolean *is_novatel_gsm, + gboolean *is_novatel_cdma) { char **capabilities; char **iter; - gboolean supported = FALSE; - - capabilities = libhal_device_get_property_strlist (hal_ctx, udi, "modem.command_sets", NULL); - for (iter = capabilities; iter && *iter && !supported; iter++) { - if (!strcmp (*iter, "GSM-07.07")) { - char *parent_udi; - parent_udi = libhal_device_get_property_string (hal_ctx, udi, "info.parent", NULL); - if (parent_udi) { - int vendor; + *is_novatel_gsm = *is_novatel_cdma = FALSE; - vendor = libhal_device_get_property_int (hal_ctx, parent_udi, "usb.vendor_id", NULL); - if (vendor == 0x1410) - supported = TRUE; - - libhal_free_string (parent_udi); + capabilities = libhal_device_get_property_strlist (hal_ctx, udi, "modem.command_sets", NULL); + for (iter = capabilities; iter && *iter && !*is_novatel_gsm && !*is_novatel_cdma; iter++) { + char *parent_udi; + + parent_udi = libhal_device_get_property_string (hal_ctx, udi, "info.parent", NULL); + if (parent_udi) { + int vendor; + + vendor = libhal_device_get_property_int (hal_ctx, parent_udi, "usb.vendor_id", NULL); + if (vendor == 0x1410) { + if (!strcmp (*iter, "GSM-07.07")) { + *is_novatel_gsm = TRUE; + } else if (!strcmp (*iter, "IS-707-A")) { + *is_novatel_cdma = TRUE; + } } + + libhal_free_string (parent_udi); } } + g_strfreev (capabilities); +} - return supported; +static gboolean +supports_udi (MMPlugin *plugin, LibHalContext *hal_ctx, const char *udi) +{ + gboolean is_novatel_gsm = FALSE; + gboolean is_novatel_cdma = FALSE; + + is_novatel_modem (hal_ctx, udi, &is_novatel_gsm, &is_novatel_cdma); + + return is_novatel_gsm || is_novatel_cdma; } static char * @@ -110,6 +128,11 @@ create_modem (MMPlugin *plugin, LibHalContext *hal_ctx, const char *udi) char *data_device; char *driver; MMModem *modem; + gboolean is_novatel_gsm = FALSE; + gboolean is_novatel_cdma = FALSE; + + is_novatel_modem (hal_ctx, udi, &is_novatel_gsm, &is_novatel_cdma); + g_return_val_if_fail (!is_novatel_gsm && !is_novatel_cdma, NULL); data_device = libhal_device_get_property_string (hal_ctx, udi, "serial.device", NULL); g_return_val_if_fail (data_device != NULL, NULL); @@ -117,7 +140,12 @@ create_modem (MMPlugin *plugin, LibHalContext *hal_ctx, const char *udi) driver = get_driver_name (hal_ctx, udi); g_return_val_if_fail (driver != NULL, NULL); - modem = MM_MODEM (mm_modem_novatel_new (data_device, driver)); + if (is_novatel_gsm) + modem = MM_MODEM (mm_modem_novatel_new (data_device, driver)); + else { + modem = MM_MODEM (mm_generic_cdma_new (data_device, driver)); + g_object_set (G_OBJECT (modem), MM_SERIAL_CARRIER_DETECT, FALSE, NULL); + } libhal_free_string (data_device); libhal_free_string (driver); |