From 9ef84d2cff27e99c2e805d636528d1740bc4985a Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Fri, 27 Dec 2019 22:24:24 +0100 Subject: kerneldevice: support reading interface 'description' --- src/kerneldevice/mm-kernel-device-generic.c | 93 ++++++++++++++++++----------- 1 file changed, 57 insertions(+), 36 deletions(-) (limited to 'src/kerneldevice/mm-kernel-device-generic.c') diff --git a/src/kerneldevice/mm-kernel-device-generic.c b/src/kerneldevice/mm-kernel-device-generic.c index c32831d7..b6e4e2df 100644 --- a/src/kerneldevice/mm-kernel-device-generic.c +++ b/src/kerneldevice/mm-kernel-device-generic.c @@ -59,6 +59,7 @@ struct _MMKernelDeviceGenericPrivate { guint8 interface_subclass; guint8 interface_protocol; guint8 interface_number; + gchar *interface_description; gchar *physdev_sysfs_path; guint16 physdev_vid; guint16 physdev_pid; @@ -424,23 +425,34 @@ preload_interface_number (MMKernelDeviceGeneric *self) g_object_set_data_full (G_OBJECT (self), "ID_USB_INTERFACE_NUM", g_strdup_printf ("%02x", self->priv->interface_number), g_free); } +static void +preload_interface_description (MMKernelDeviceGeneric *self) +{ + self->priv->interface_description = (self->priv->interface_sysfs_path ? read_sysfs_property_as_string (self->priv->interface_sysfs_path, "interface") : NULL); + mm_dbg ("(%s/%s) interface description: %s", + mm_kernel_event_properties_get_subsystem (self->priv->properties), + mm_kernel_event_properties_get_name (self->priv->properties), + self->priv->interface_description ? self->priv->interface_description : "unknown"); +} + static void preload_contents (MMKernelDeviceGeneric *self) { - preload_sysfs_path (self); - preload_interface_sysfs_path (self); - preload_interface_class (self); - preload_interface_subclass (self); - preload_interface_protocol (self); - preload_interface_number (self); - preload_physdev_sysfs_path (self); - preload_manufacturer (self); - preload_product (self); - preload_driver (self); - preload_physdev_vid (self); - preload_physdev_pid (self); - preload_physdev_revision (self); - preload_physdev_subsystem (self); + preload_sysfs_path (self); + preload_interface_sysfs_path (self); + preload_interface_class (self); + preload_interface_subclass (self); + preload_interface_protocol (self); + preload_interface_number (self); + preload_interface_description (self); + preload_physdev_sysfs_path (self); + preload_manufacturer (self); + preload_product (self); + preload_driver (self); + preload_physdev_vid (self); + preload_physdev_pid (self); + preload_physdev_revision (self); + preload_physdev_subsystem (self); } /*****************************************************************************/ @@ -501,6 +513,14 @@ kernel_device_get_interface_sysfs_path (MMKernelDevice *self) return MM_KERNEL_DEVICE_GENERIC (self)->priv->interface_sysfs_path; } +static const gchar * +kernel_device_get_interface_description (MMKernelDevice *self) +{ + g_return_val_if_fail (MM_IS_KERNEL_DEVICE_GENERIC (self), NULL); + + return MM_KERNEL_DEVICE_GENERIC (self)->priv->interface_description; +} + static const gchar * kernel_device_get_physdev_uid (MMKernelDevice *self) { @@ -1115,28 +1135,29 @@ mm_kernel_device_generic_class_init (MMKernelDeviceGenericClass *klass) object_class->get_property = get_property; object_class->set_property = set_property; - kernel_device_class->get_subsystem = kernel_device_get_subsystem; - kernel_device_class->get_name = kernel_device_get_name; - kernel_device_class->get_driver = kernel_device_get_driver; - kernel_device_class->get_sysfs_path = kernel_device_get_sysfs_path; - kernel_device_class->get_physdev_uid = kernel_device_get_physdev_uid; - kernel_device_class->get_physdev_vid = kernel_device_get_physdev_vid; - kernel_device_class->get_physdev_pid = kernel_device_get_physdev_pid; - kernel_device_class->get_physdev_revision = kernel_device_get_physdev_revision; - kernel_device_class->get_physdev_sysfs_path = kernel_device_get_physdev_sysfs_path; - kernel_device_class->get_physdev_subsystem = kernel_device_get_physdev_subsystem; - kernel_device_class->get_physdev_manufacturer = kernel_device_get_physdev_manufacturer; - kernel_device_class->get_physdev_product = kernel_device_get_physdev_product; - kernel_device_class->get_interface_class = kernel_device_get_interface_class; - kernel_device_class->get_interface_subclass = kernel_device_get_interface_subclass; - kernel_device_class->get_interface_protocol = kernel_device_get_interface_protocol; - kernel_device_class->get_interface_sysfs_path = kernel_device_get_interface_sysfs_path; - kernel_device_class->cmp = kernel_device_cmp; - kernel_device_class->has_property = kernel_device_has_property; - kernel_device_class->get_property = kernel_device_get_property; - kernel_device_class->get_property_as_boolean = kernel_device_get_property_as_boolean; - kernel_device_class->get_property_as_int = kernel_device_get_property_as_int; - kernel_device_class->get_property_as_int_hex = kernel_device_get_property_as_int_hex; + kernel_device_class->get_subsystem = kernel_device_get_subsystem; + kernel_device_class->get_name = kernel_device_get_name; + kernel_device_class->get_driver = kernel_device_get_driver; + kernel_device_class->get_sysfs_path = kernel_device_get_sysfs_path; + kernel_device_class->get_physdev_uid = kernel_device_get_physdev_uid; + kernel_device_class->get_physdev_vid = kernel_device_get_physdev_vid; + kernel_device_class->get_physdev_pid = kernel_device_get_physdev_pid; + kernel_device_class->get_physdev_revision = kernel_device_get_physdev_revision; + kernel_device_class->get_physdev_sysfs_path = kernel_device_get_physdev_sysfs_path; + kernel_device_class->get_physdev_subsystem = kernel_device_get_physdev_subsystem; + kernel_device_class->get_physdev_manufacturer = kernel_device_get_physdev_manufacturer; + kernel_device_class->get_physdev_product = kernel_device_get_physdev_product; + kernel_device_class->get_interface_class = kernel_device_get_interface_class; + kernel_device_class->get_interface_subclass = kernel_device_get_interface_subclass; + kernel_device_class->get_interface_protocol = kernel_device_get_interface_protocol; + kernel_device_class->get_interface_sysfs_path = kernel_device_get_interface_sysfs_path; + kernel_device_class->get_interface_description = kernel_device_get_interface_description; + kernel_device_class->cmp = kernel_device_cmp; + kernel_device_class->has_property = kernel_device_has_property; + kernel_device_class->get_property = kernel_device_get_property; + kernel_device_class->get_property_as_boolean = kernel_device_get_property_as_boolean; + kernel_device_class->get_property_as_int = kernel_device_get_property_as_int; + kernel_device_class->get_property_as_int_hex = kernel_device_get_property_as_int_hex; /* Device-wide properties are stored per-port in the generic backend */ kernel_device_class->has_global_property = kernel_device_has_property; -- cgit v1.2.3-70-g09d2