summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Chaplet <m.chaplet@kerlink.fr>2016-05-03 10:44:54 +0200
committerDenis Kenzior <denkenz@gmail.com>2016-05-03 11:04:58 -0500
commitd415265a69bce6ec42c65931d6830a6024474d83 (patch)
treedc5ece7c32dad62567069a413374db0ff2800138
parentbe1190b2cfa39b8a1ac38be2d60a9d713b801170 (diff)
downloadofono-d415265a69bce6ec42c65931d6830a6024474d83.tar.gz
udevng: Improve modem properties detection
* Add driver's subsystem information (net, usb, tty, ...) * Improve interface number extraction by scanning also device and parent attributes
-rw-r--r--plugins/udevng.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/plugins/udevng.c b/plugins/udevng.c
index cc1ac550..e5dc7253 100644
--- a/plugins/udevng.c
+++ b/plugins/udevng.c
@@ -55,6 +55,7 @@ struct device_info {
char *number;
char *label;
char *sysattr;
+ char *subsystem;
};
static gboolean setup_isi(struct modem_info *modem)
@@ -958,6 +959,7 @@ static void destroy_modem(gpointer data)
g_free(info->number);
g_free(info->label);
g_free(info->sysattr);
+ g_free(info->subsystem);
g_free(info);
list->data = NULL;
@@ -1016,9 +1018,10 @@ static void add_device(const char *syspath, const char *devname,
const char *model, struct udev_device *device)
{
struct udev_device *intf;
- const char *devpath, *devnode, *interface, *number, *label, *sysattr;
+ const char *devpath, *devnode, *interface, *number, *label, *sysattr, *subsystem;
struct modem_info *modem;
struct device_info *info;
+ struct udev_device *parent;
devpath = udev_device_get_syspath(device);
if (devpath == NULL)
@@ -1056,7 +1059,17 @@ static void add_device(const char *syspath, const char *devname,
interface = udev_device_get_property_value(intf, "INTERFACE");
number = udev_device_get_property_value(device, "ID_USB_INTERFACE_NUM");
+ /* If environment variable is not set, get value from attributes (or parent's ones) */
+ if(number == NULL) {
+ number = udev_device_get_sysattr_value(device, "bInterfaceNumber");
+ if(number == NULL) {
+ parent = udev_device_get_parent(device);
+ number = udev_device_get_sysattr_value(parent, "bInterfaceNumber");
+ }
+ }
+
label = udev_device_get_property_value(device, "OFONO_LABEL");
+ subsystem = udev_device_get_subsystem(device);
if (modem->sysattr != NULL)
sysattr = udev_device_get_sysattr_value(device, modem->sysattr);
@@ -1078,6 +1091,7 @@ static void add_device(const char *syspath, const char *devname,
info->number = g_strdup(number);
info->label = g_strdup(label);
info->sysattr = g_strdup(sysattr);
+ info->subsystem = g_strdup(subsystem);
modem->devices = g_slist_insert_sorted(modem->devices, info,
compare_device);