diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2011-08-10 21:52:40 -0700 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2011-08-10 21:52:40 -0700 |
commit | 37421620177ffb8f23f79b91458ec02776e51753 (patch) | |
tree | 3ea6b5093a461abd1e5151420ac80661f18981a3 | |
parent | 7fd6d3d0ef43693d654bc4f5b1a5c407bd4b0143 (diff) | |
download | ofono-37421620177ffb8f23f79b91458ec02776e51753.tar.bz2 |
udev: Add automatic detection for Ericsson MBM based devices
-rw-r--r-- | plugins/ofono.rules | 53 | ||||
-rw-r--r-- | plugins/udev.c | 77 | ||||
-rw-r--r-- | plugins/udevng.c | 59 |
3 files changed, 59 insertions, 130 deletions
diff --git a/plugins/ofono.rules b/plugins/ofono.rules index 7288aa7d..c4ed1639 100644 --- a/plugins/ofono.rules +++ b/plugins/ofono.rules @@ -34,59 +34,6 @@ ENV{DEVTYPE}!="usb_device", GOTO="ofono_end" # Ignore fake serial number ATTRS{serial}=="1234567890ABCDEF", ENV{ID_SERIAL_SHORT}="" -# Ericsson F3507g -ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="1900", ENV{OFONO_DRIVER}="mbm" -ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="1902", ENV{OFONO_DRIVER}="mbm" - -# Ericsson F3607gw -ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="1904", ENV{OFONO_DRIVER}="mbm" -ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="1905", ENV{OFONO_DRIVER}="mbm" -ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="1906", ENV{OFONO_DRIVER}="mbm" - -# Ericsson c3607w -ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="190b", ENV{OFONO_DRIVER}="mbm" -ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="1049", ENV{OFONO_DRIVER}="mbm" - -# Ericsson F3307 -ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="190a", ENV{OFONO_DRIVER}="mbm" -ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="1909", ENV{OFONO_DRIVER}="mbm" - -# Ericsson F5521gw -ATTRS{idVendor}=="0bdb", ATTRS{idProduct}=="190d", ENV{OFONO_DRIVER}="mbm" - -# Sony-Ericsson MD300 -ATTRS{idVendor}=="0fce", ATTRS{idProduct}=="d0cf", ENV{OFONO_DRIVER}="mbm" - -# Dell 5530 HSDPA -ATTRS{idVendor}=="413c", ATTRS{idProduct}=="8147", ENV{OFONO_DRIVER}="mbm" - -# Dell F3607gw -ATTRS{idVendor}=="413c", ATTRS{idProduct}=="8183", ENV{OFONO_DRIVER}="mbm" -ATTRS{idVendor}=="413c", ATTRS{idProduct}=="8184", ENV{OFONO_DRIVER}="mbm" - -# Dell F3307 -ATTRS{idVendor}=="413c", ATTRS{idProduct}=="818b", ENV{OFONO_DRIVER}="mbm" -ATTRS{idVendor}=="413c", ATTRS{idProduct}=="818c", ENV{OFONO_DRIVER}="mbm" - -# HP hs2330 Mobile Broadband Module -ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="271d", ENV{OFONO_DRIVER}="mbm" - -# HP hs2320 Mobile Broadband Module -ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="261d", ENV{OFONO_DRIVER}="mbm" - -# HP lc2000 Mobile Broadband Module -ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="301d", ENV{OFONO_DRIVER}="mbm" - -# HP lc2010 Mobile Broadband Module -ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="2f1d", ENV{OFONO_DRIVER}="mbm" - -# Toshiba -ATTRS{idVendor}=="0930", ATTRS{idProduct}=="130b", ENV{OFONO_DRIVER}="mbm" - -# Toshiba F3607gw -ATTRS{idVendor}=="0930", ATTRS{idProduct}=="130c", ENV{OFONO_DRIVER}="mbm" -ATTRS{idVendor}=="0930", ATTRS{idProduct}=="1311", ENV{OFONO_DRIVER}="mbm" - # Nokia CDMA Device ATTRS{idVendor}=="0421", ATTRS{idProduct}=="023e", ENV{OFONO_DRIVER}="nokiacdma" ATTRS{idVendor}=="0421", ATTRS{idProduct}=="00b6", ENV{OFONO_DRIVER}="nokiacdma" diff --git a/plugins/udev.c b/plugins/udev.c index 916a5b86..84b2a818 100644 --- a/plugins/udev.c +++ b/plugins/udev.c @@ -96,79 +96,6 @@ static const char *get_serial(struct udev_device *udev_device) return serial; } -#define MODEM_DEVICE "ModemDevice" -#define DATA_DEVICE "DataDevice" -#define GPS_DEVICE "GPSDevice" -#define NETWORK_INTERFACE "NetworkInterface" - -static void add_mbm(struct ofono_modem *modem, - struct udev_device *udev_device) -{ - const char *desc, *devnode; - const char *device, *data, *network; - int registered; - - desc = udev_device_get_sysattr_value(udev_device, "device/interface"); - - if (desc == NULL) - return; - - DBG("desc: %s", desc); - - registered = ofono_modem_get_integer(modem, "Registered"); - - if (registered == 0 && - (g_str_has_suffix(desc, "Minicard Modem") || - g_str_has_suffix(desc, "Minicard Modem 2") || - g_str_has_suffix(desc, "Mini-Card Modem") || - g_str_has_suffix(desc, "Broadband Modem") || - g_str_has_suffix(desc, "Module Modem") || - g_str_has_suffix(desc, "Broadband USB Modem"))) { - devnode = udev_device_get_devnode(udev_device); - - if (ofono_modem_get_string(modem, MODEM_DEVICE) == NULL) - ofono_modem_set_string(modem, MODEM_DEVICE, devnode); - else - ofono_modem_set_string(modem, DATA_DEVICE, devnode); - } else if (registered == 0 && - (g_str_has_suffix(desc, "Minicard Data Modem") || - g_str_has_suffix(desc, "Mini-Card Data Modem") || - g_str_has_suffix(desc, "Module Data Modem") || - g_str_has_suffix(desc, "Module\xc2\xa0""Data Modem") || - g_str_has_suffix(desc, "Broadband Data Modem"))) { - devnode = udev_device_get_devnode(udev_device); - ofono_modem_set_string(modem, DATA_DEVICE, devnode); - } else if (g_str_has_suffix(desc, "Minicard GPS Port") || - g_str_has_suffix(desc, "Mini-Card GPS Port") || - g_str_has_suffix(desc, "Module NMEA") || - g_str_has_suffix(desc, "Broadband GPS Port")) { - devnode = udev_device_get_devnode(udev_device); - ofono_modem_set_string(modem, GPS_DEVICE, devnode); - } else if (registered == 0 && - (g_str_has_suffix(desc, "Minicard Network Adapter") || - g_str_has_suffix(desc, "Mini-Card Network Adapter") || - g_str_has_suffix(desc, "Broadband Network Adapter") || - g_str_has_suffix(desc, "Module Network Adapter") || - g_str_has_suffix(desc, "Minicard NetworkAdapter"))) { - devnode = get_property(udev_device, "INTERFACE"); - ofono_modem_set_string(modem, NETWORK_INTERFACE, devnode); - } else { - return; - } - - if (registered == 1) - return; - - device = ofono_modem_get_string(modem, MODEM_DEVICE); - data = ofono_modem_get_string(modem, DATA_DEVICE); - network = ofono_modem_get_string(modem, NETWORK_INTERFACE); - - if (device != NULL && data != NULL && network != NULL) { - ofono_modem_set_integer(modem, "Registered", 1); - ofono_modem_register(modem); - } -} - static void add_ifx(struct ofono_modem *modem, struct udev_device *udev_device) { @@ -407,9 +334,7 @@ done: g_hash_table_insert(devpath_list, g_strdup(curpath), g_strdup(devpath)); - if (g_strcmp0(driver, "mbm") == 0) - add_mbm(modem, udev_device); - else if (g_strcmp0(driver, "ifx") == 0) + if (g_strcmp0(driver, "ifx") == 0) add_ifx(modem, udev_device); else if (g_strcmp0(driver, "isiusb") == 0) add_isi(modem, udev_device); diff --git a/plugins/udevng.c b/plugins/udevng.c index b8b3c516..c323095a 100644 --- a/plugins/udevng.c +++ b/plugins/udevng.c @@ -55,6 +55,52 @@ struct device_info { char *sysattr; }; +static gboolean setup_mbm(struct modem_info *modem) +{ + const char *mdm = NULL, *app = NULL, *network = NULL, *gps = NULL; + GSList *list; + + DBG("%s", modem->syspath); + + for (list = modem->devices; list; list = list->next) { + struct device_info *info = list->data; + + DBG("%s %s %s %s %s", info->devnode, info->interface, + info->number, info->label, info->sysattr); + + if (g_str_has_suffix(info->sysattr, "Modem") == TRUE || + g_str_has_suffix(info->sysattr, + "Modem 2") == TRUE) { + if (mdm == NULL) + mdm = info->devnode; + else + app = info->devnode; + } else if (g_str_has_suffix(info->sysattr, + "GPS Port") == TRUE || + g_str_has_suffix(info->sysattr, + "Module NMEA") == TRUE) { + gps = info->devnode; + } else if (g_str_has_suffix(info->sysattr, + "Network Adapter") == TRUE || + g_str_has_suffix(info->sysattr, + "NetworkAdapter") == TRUE) { + network = info->devnode; + } + } + + if (mdm == NULL || app == NULL) + return FALSE; + + DBG("modem=%s data=%s network=%s gps=%s", mdm, app, network, gps); + + ofono_modem_set_string(modem->modem, "ModemDevice", mdm); + ofono_modem_set_string(modem->modem, "DataDevice", app); + ofono_modem_set_string(modem->modem, "GPSDevice", gps); + ofono_modem_set_string(modem->modem, "NetworkInterface", network); + + return TRUE; +} + static gboolean setup_hso(struct modem_info *modem) { const char *control = NULL, *application = NULL, *network = NULL; @@ -451,7 +497,8 @@ static struct { gboolean (*setup)(struct modem_info *modem); const char *sysattr; } driver_list[] = { - { "hso", setup_hso, "hsotype" }, + { "mbm", setup_mbm, "device/interface" }, + { "hso", setup_hso, "hsotype" }, { "gobi", setup_gobi, }, { "sierra", setup_sierra }, { "huawei", setup_huawei }, @@ -625,6 +672,16 @@ static struct { const char *vid; const char *pid; } vendor_list[] = { + { "mbm", "cdc_acm", "0bdb" }, + { "mbm" "cdc_ether", "0bdb" }, + { "mbm", "cdc_acm", "0fce" }, + { "mbm", "cdc_ether", "0fce" }, + { "mbm", "cdc_acm", "413c" }, + { "mbm", "cdc_ether", "413c" }, + { "mbm", "cdc_acm", "03f0" }, + { "mbm", "cdc_ether", "03f0" }, + { "mbm", "cdc_acm", "0930" }, + { "mbm", "cdc_ether", "0930" }, { "hso", "hso" }, { "gobi", "qcserial" }, { "sierra", "sierra" }, |