* Add driver's subsystem information (net, usb, tty, ...)
* Improve interface number extraction by scanning also device and
parent attributes
---
plugins/udevng.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/plugins/udevng.c b/plugins/udevng.c
index cc1ac55..e5dc725 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);
--
1.9.1
_______________________________________________
ofono mailing list
[email protected]
https://lists.ofono.org/mailman/listinfo/ofono