diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2020-10-30 10:05:24 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2020-11-20 09:24:51 +0000 |
commit | 3d12272d183061c11cd80bfe96ae89898f4c081c (patch) | |
tree | e4007dfbe3b9334210d68135cb81d35b98adb189 /src/kerneldevice/mm-kernel-device-generic.c | |
parent | 399a042dad2e2c5cca9e0cfe0af6d41ae1fb0c35 (diff) |
kerneldevice: allow loading port attributes
In addition to loading port and device properties, we now also allow
loading sysfs properties that are assumed to be static (i.e. their
values won't change since loaded the first time).
Diffstat (limited to 'src/kerneldevice/mm-kernel-device-generic.c')
-rw-r--r-- | src/kerneldevice/mm-kernel-device-generic.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/kerneldevice/mm-kernel-device-generic.c b/src/kerneldevice/mm-kernel-device-generic.c index 90228f17..b1a3bf97 100644 --- a/src/kerneldevice/mm-kernel-device-generic.c +++ b/src/kerneldevice/mm-kernel-device-generic.c @@ -963,6 +963,41 @@ kernel_device_get_property (MMKernelDevice *self, /*****************************************************************************/ +static gchar * +build_attribute_data_key (const gchar *attribute) +{ + return g_strdup_printf ("ATTR:%s", attribute); +} + +static gboolean +kernel_device_has_attribute (MMKernelDevice *self, + const gchar *attribute) +{ + return has_sysfs_attribute (MM_KERNEL_DEVICE_GENERIC (self)->priv->sysfs_path, attribute); +} + +static const gchar * +kernel_device_get_attribute (MMKernelDevice *_self, + const gchar *attribute) +{ + MMKernelDeviceGeneric *self; + g_autofree gchar *key = NULL; + gchar *value = NULL; + + self = MM_KERNEL_DEVICE_GENERIC (_self); + + key = build_attribute_data_key (attribute); + value = g_object_get_data (G_OBJECT (self), key); + if (!value) { + value = read_sysfs_attribute_as_string (self->priv->sysfs_path, attribute); + if (value) + g_object_set_data_full (G_OBJECT (self), key, value, g_free); + } + return (const gchar *) value; +} + +/*****************************************************************************/ + MMKernelDevice * mm_kernel_device_generic_new_with_rules (MMKernelEventProperties *props, GArray *rules, @@ -1145,6 +1180,8 @@ mm_kernel_device_generic_class_init (MMKernelDeviceGenericClass *klass) 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->has_attribute = kernel_device_has_attribute; + kernel_device_class->get_attribute = kernel_device_get_attribute; /* Device-wide properties are stored per-port in the generic backend */ kernel_device_class->has_global_property = kernel_device_has_property; |