diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2019-12-27 22:24:24 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2020-03-03 17:23:07 +0000 |
commit | 9ef84d2cff27e99c2e805d636528d1740bc4985a (patch) | |
tree | e4784f2904a6e3c94cfc87256c11d75d0b0a63bf | |
parent | 5da33df35b3266f8905578c56a43a56d79726602 (diff) |
kerneldevice: support reading interface 'description'
-rw-r--r-- | src/kerneldevice/mm-kernel-device-generic.c | 93 | ||||
-rw-r--r-- | src/kerneldevice/mm-kernel-device-udev.c | 13 | ||||
-rw-r--r-- | src/kerneldevice/mm-kernel-device.c | 10 | ||||
-rw-r--r-- | src/kerneldevice/mm-kernel-device.h | 18 |
4 files changed, 90 insertions, 44 deletions
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; @@ -425,22 +426,33 @@ preload_interface_number (MMKernelDeviceGeneric *self) } 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); } /*****************************************************************************/ @@ -502,6 +514,14 @@ kernel_device_get_interface_sysfs_path (MMKernelDevice *self) } 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) { const gchar *uid; @@ -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; diff --git a/src/kerneldevice/mm-kernel-device-udev.c b/src/kerneldevice/mm-kernel-device-udev.c index 6ca50dc3..3dc3eeb7 100644 --- a/src/kerneldevice/mm-kernel-device-udev.c +++ b/src/kerneldevice/mm-kernel-device-udev.c @@ -534,6 +534,18 @@ kernel_device_get_interface_sysfs_path (MMKernelDevice *_self) return (self->priv->parent ? g_udev_device_get_sysfs_path (self->priv->parent) : NULL); } +static const gchar * +kernel_device_get_interface_description (MMKernelDevice *_self) +{ + MMKernelDeviceUdev *self; + + g_return_val_if_fail (MM_IS_KERNEL_DEVICE_UDEV (_self), NULL); + + self = MM_KERNEL_DEVICE_UDEV (_self); + ensure_parent (self); + return (self->priv->parent ? g_udev_device_get_sysfs_attr (self->priv->parent, "interface") : NULL); +} + static gboolean kernel_device_cmp (MMKernelDevice *_a, MMKernelDevice *_b) @@ -935,6 +947,7 @@ mm_kernel_device_udev_class_init (MMKernelDeviceUdevClass *klass) 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; diff --git a/src/kerneldevice/mm-kernel-device.c b/src/kerneldevice/mm-kernel-device.c index 35c840a8..e52ae67e 100644 --- a/src/kerneldevice/mm-kernel-device.c +++ b/src/kerneldevice/mm-kernel-device.c @@ -183,6 +183,16 @@ mm_kernel_device_get_interface_sysfs_path (MMKernelDevice *self) NULL); } +const gchar * +mm_kernel_device_get_interface_description (MMKernelDevice *self) +{ + g_return_val_if_fail (MM_IS_KERNEL_DEVICE (self), NULL); + + return (MM_KERNEL_DEVICE_GET_CLASS (self)->get_interface_description ? + MM_KERNEL_DEVICE_GET_CLASS (self)->get_interface_description (self) : + NULL); +} + gboolean mm_kernel_device_cmp (MMKernelDevice *a, MMKernelDevice *b) diff --git a/src/kerneldevice/mm-kernel-device.h b/src/kerneldevice/mm-kernel-device.h index 6e66d4d2..c66b23dd 100644 --- a/src/kerneldevice/mm-kernel-device.h +++ b/src/kerneldevice/mm-kernel-device.h @@ -41,10 +41,11 @@ struct _MMKernelDeviceClass { const gchar * (* get_driver) (MMKernelDevice *self); const gchar * (* get_sysfs_path) (MMKernelDevice *self); - gint (* get_interface_class) (MMKernelDevice *self); - gint (* get_interface_subclass) (MMKernelDevice *self); - gint (* get_interface_protocol) (MMKernelDevice *self); - const gchar * (* get_interface_sysfs_path) (MMKernelDevice *self); + gint (* get_interface_class) (MMKernelDevice *self); + gint (* get_interface_subclass) (MMKernelDevice *self); + gint (* get_interface_protocol) (MMKernelDevice *self); + const gchar * (* get_interface_sysfs_path) (MMKernelDevice *self); + const gchar * (* get_interface_description) (MMKernelDevice *self); const gchar * (* get_physdev_uid) (MMKernelDevice *self); guint16 (* get_physdev_vid) (MMKernelDevice *self); @@ -77,10 +78,11 @@ const gchar *mm_kernel_device_get_name (MMKernelDevice *self); const gchar *mm_kernel_device_get_driver (MMKernelDevice *self); const gchar *mm_kernel_device_get_sysfs_path (MMKernelDevice *self); -gint mm_kernel_device_get_interface_class (MMKernelDevice *self); -gint mm_kernel_device_get_interface_subclass (MMKernelDevice *self); -gint mm_kernel_device_get_interface_protocol (MMKernelDevice *self); -const gchar *mm_kernel_device_get_interface_sysfs_path (MMKernelDevice *self); +gint mm_kernel_device_get_interface_class (MMKernelDevice *self); +gint mm_kernel_device_get_interface_subclass (MMKernelDevice *self); +gint mm_kernel_device_get_interface_protocol (MMKernelDevice *self); +const gchar *mm_kernel_device_get_interface_sysfs_path (MMKernelDevice *self); +const gchar *mm_kernel_device_get_interface_description (MMKernelDevice *self); const gchar *mm_kernel_device_get_physdev_uid (MMKernelDevice *self); guint16 mm_kernel_device_get_physdev_vid (MMKernelDevice *self); |