aboutsummaryrefslogtreecommitdiff
path: root/src/kerneldevice/mm-kernel-device-generic.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2016-10-04 12:53:13 +0200
committerAleksander Morgado <aleksander@aleksander.es>2016-10-04 12:53:49 +0200
commit9548192985ad68601b069a1f267fcbdc652a5ba2 (patch)
tree640008f09e526ad0c1f2a1cf0a2b6cd4249d40db /src/kerneldevice/mm-kernel-device-generic.c
parent58c955f5f23e874e4f8c2a4b389e46c0775e7f07 (diff)
kerneldevice,generic: support ID_USB_INTERFACE_NUM and some other udev properties
We need at least ID_USB_INTERFACE_NUM, as some plugins (Huawei, Telit, Option) require this property when gathering port type hints. We also add support for other properties (ID_VENDOR_ID, ID_MODEL_ID...) as we already have those values preloaded.
Diffstat (limited to 'src/kerneldevice/mm-kernel-device-generic.c')
-rw-r--r--src/kerneldevice/mm-kernel-device-generic.c55
1 files changed, 39 insertions, 16 deletions
diff --git a/src/kerneldevice/mm-kernel-device-generic.c b/src/kerneldevice/mm-kernel-device-generic.c
index 32ac5ed1..f3ab8b22 100644
--- a/src/kerneldevice/mm-kernel-device-generic.c
+++ b/src/kerneldevice/mm-kernel-device-generic.c
@@ -127,11 +127,18 @@ preload_sysfs_path (MMKernelDeviceGeneric *self)
g_clear_pointer (&self->priv->sysfs_path, g_free);
}
- if (self->priv->sysfs_path)
+ if (self->priv->sysfs_path) {
+ const gchar *devpath;
+
mm_dbg ("(%s/%s) sysfs path: %s",
mm_kernel_event_properties_get_subsystem (self->priv->properties),
mm_kernel_event_properties_get_name (self->priv->properties),
self->priv->sysfs_path);
+ devpath = (g_str_has_prefix (self->priv->sysfs_path, "/sys") ?
+ &self->priv->sysfs_path[4] :
+ self->priv->sysfs_path);
+ g_object_set_data_full (G_OBJECT (self), "DEVPATH", g_strdup (devpath), g_free);
+ }
g_free (tmp);
}
@@ -255,12 +262,13 @@ preload_physdev_vid (MMKernelDeviceGeneric *self)
self->priv->physdev_vid = val;
}
- if (self->priv->physdev_vid)
- mm_dbg ("(%s/%s) vid: 0x%04x",
+ if (self->priv->physdev_vid) {
+ mm_dbg ("(%s/%s) vid (ID_VENDOR_ID): 0x%04x",
mm_kernel_event_properties_get_subsystem (self->priv->properties),
mm_kernel_event_properties_get_name (self->priv->properties),
self->priv->physdev_vid);
- else
+ g_object_set_data_full (G_OBJECT (self), "ID_VENDOR_ID", g_strdup_printf ("%04x", self->priv->physdev_vid), g_free);
+ } else
mm_dbg ("(%s/%s) vid: unknown",
mm_kernel_event_properties_get_subsystem (self->priv->properties),
mm_kernel_event_properties_get_name (self->priv->properties));
@@ -278,12 +286,13 @@ preload_physdev_pid (MMKernelDeviceGeneric *self)
self->priv->physdev_pid = val;
}
- if (self->priv->physdev_pid)
- mm_dbg ("(%s/%s) pid: 0x%04x",
+ if (self->priv->physdev_pid) {
+ mm_dbg ("(%s/%s) pid (ID_MODEL_ID): 0x%04x",
mm_kernel_event_properties_get_subsystem (self->priv->properties),
mm_kernel_event_properties_get_name (self->priv->properties),
self->priv->physdev_pid);
- else
+ g_object_set_data_full (G_OBJECT (self), "ID_MODEL_ID", g_strdup_printf ("%04x", self->priv->physdev_pid), g_free);
+ } else
mm_dbg ("(%s/%s) pid: unknown",
mm_kernel_event_properties_get_subsystem (self->priv->properties),
mm_kernel_event_properties_get_name (self->priv->properties));
@@ -295,10 +304,16 @@ preload_manufacturer (MMKernelDeviceGeneric *self)
if (!self->priv->physdev_manufacturer)
self->priv->physdev_manufacturer = (self->priv->physdev_sysfs_path ? read_sysfs_property_as_string (self->priv->physdev_sysfs_path, "manufacturer") : NULL);
- mm_dbg ("(%s/%s) manufacturer: %s",
- mm_kernel_event_properties_get_subsystem (self->priv->properties),
- mm_kernel_event_properties_get_name (self->priv->properties),
- self->priv->physdev_manufacturer ? self->priv->physdev_manufacturer : "unknown");
+ if (self->priv->physdev_manufacturer) {
+ mm_dbg ("(%s/%s) manufacturer (ID_VENDOR): %s",
+ mm_kernel_event_properties_get_subsystem (self->priv->properties),
+ mm_kernel_event_properties_get_name (self->priv->properties),
+ self->priv->physdev_manufacturer);
+ g_object_set_data_full (G_OBJECT (self), "ID_VENDOR", g_strdup (self->priv->physdev_manufacturer), g_free);
+ } else
+ mm_dbg ("(%s/%s) manufacturer: unknown",
+ mm_kernel_event_properties_get_subsystem (self->priv->properties),
+ mm_kernel_event_properties_get_name (self->priv->properties));
}
static void
@@ -307,10 +322,17 @@ preload_product (MMKernelDeviceGeneric *self)
if (!self->priv->physdev_product)
self->priv->physdev_product = (self->priv->physdev_sysfs_path ? read_sysfs_property_as_string (self->priv->physdev_sysfs_path, "product") : NULL);
- mm_dbg ("(%s/%s) product: %s",
- mm_kernel_event_properties_get_subsystem (self->priv->properties),
- mm_kernel_event_properties_get_name (self->priv->properties),
- self->priv->physdev_product ? self->priv->physdev_product : "unknown");
+ if (self->priv->physdev_product) {
+ mm_dbg ("(%s/%s) product (ID_MODEL): %s",
+ mm_kernel_event_properties_get_subsystem (self->priv->properties),
+ mm_kernel_event_properties_get_name (self->priv->properties),
+ self->priv->physdev_product);
+ g_object_set_data_full (G_OBJECT (self), "ID_MODEL", g_strdup (self->priv->physdev_product), g_free);
+ } else
+ mm_dbg ("(%s/%s) product: unknown",
+ mm_kernel_event_properties_get_subsystem (self->priv->properties),
+ mm_kernel_event_properties_get_name (self->priv->properties));
+
}
static void
@@ -347,10 +369,11 @@ static void
preload_interface_number (MMKernelDeviceGeneric *self)
{
self->priv->interface_number = (self->priv->interface_sysfs_path ? read_sysfs_property_as_hex (self->priv->interface_sysfs_path, "bInterfaceNumber") : 0x00);
- mm_dbg ("(%s/%s) interface number: 0x%02x",
+ mm_dbg ("(%s/%s) interface number (ID_USB_INTERFACE_NUM): 0x%02x",
mm_kernel_event_properties_get_subsystem (self->priv->properties),
mm_kernel_event_properties_get_name (self->priv->properties),
self->priv->interface_number);
+ g_object_set_data_full (G_OBJECT (self), "ID_USB_INTERFACE_NUM", g_strdup_printf ("%02x", self->priv->interface_number), g_free);
}
static void