[PATCH libinput] Add functions to get the device name, PID and VID

Peter Hutterer peter.hutterer at who-t.net
Thu Jun 26 20:02:11 PDT 2014


Those three are the ones that matter for logging or device identification in
callers, so let's provide them.

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 src/evdev.c    | 18 ++++++++++++++++++
 src/evdev.h    |  9 +++++++++
 src/libinput.c | 18 ++++++++++++++++++
 src/libinput.h | 34 ++++++++++++++++++++++++++++++++++
 test/misc.c    | 20 ++++++++++++++++++++
 5 files changed, 99 insertions(+)

diff --git a/src/evdev.c b/src/evdev.c
index f72bd43..183c200 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -857,6 +857,24 @@ evdev_device_get_sysname(struct evdev_device *device)
 	return device->sysname;
 }
 
+const char *
+evdev_device_get_name(struct evdev_device *device)
+{
+	return device->devname;
+}
+
+unsigned int
+evdev_device_get_id_product(struct evdev_device *device)
+{
+	return libevdev_get_id_product(device->evdev);
+}
+
+unsigned int
+evdev_device_get_id_vendor(struct evdev_device *device)
+{
+	return libevdev_get_id_vendor(device->evdev);
+}
+
 void
 evdev_device_calibrate(struct evdev_device *device, float calibration[6])
 {
diff --git a/src/evdev.h b/src/evdev.h
index 4a83a78..fad1f84 100644
--- a/src/evdev.h
+++ b/src/evdev.h
@@ -141,6 +141,15 @@ evdev_device_get_output(struct evdev_device *device);
 const char *
 evdev_device_get_sysname(struct evdev_device *device);
 
+const char *
+evdev_device_get_name(struct evdev_device *device);
+
+unsigned int
+evdev_device_get_id_product(struct evdev_device *device);
+
+unsigned int
+evdev_device_get_id_vendor(struct evdev_device *device);
+
 void
 evdev_device_calibrate(struct evdev_device *device, float calibration[6]);
 
diff --git a/src/libinput.c b/src/libinput.c
index 44f4f23..1918b48 100644
--- a/src/libinput.c
+++ b/src/libinput.c
@@ -1162,6 +1162,24 @@ libinput_device_get_sysname(struct libinput_device *device)
 }
 
 LIBINPUT_EXPORT const char *
+libinput_device_get_name(struct libinput_device *device)
+{
+	return evdev_device_get_name((struct evdev_device *) device);
+}
+
+LIBINPUT_EXPORT unsigned int
+libinput_device_get_id_product(struct libinput_device *device)
+{
+	return evdev_device_get_id_product((struct evdev_device *) device);
+}
+
+LIBINPUT_EXPORT unsigned int
+libinput_device_get_id_vendor(struct libinput_device *device)
+{
+	return evdev_device_get_id_vendor((struct evdev_device *) device);
+}
+
+LIBINPUT_EXPORT const char *
 libinput_device_get_output_name(struct libinput_device *device)
 {
 	return evdev_device_get_output((struct evdev_device *) device);
diff --git a/src/libinput.h b/src/libinput.h
index 99a3b2f..e8b87da 100644
--- a/src/libinput.h
+++ b/src/libinput.h
@@ -1257,6 +1257,40 @@ libinput_device_get_sysname(struct libinput_device *device);
 /**
  * @ingroup device
  *
+ * The lifetime of the returned string is tied to the struct
+ * libinput_device.
+ *
+ * @param device A previously obtained device
+ * @return The device name
+ */
+const char *
+libinput_device_get_name(struct libinput_device *device);
+
+/**
+ * @ingroup device
+ *
+ * Get the product ID for this device.
+ *
+ * @param device A previously obtained device
+ * @return The product ID of this device
+ */
+unsigned int
+libinput_device_get_id_product(struct libinput_device *device);
+
+/**
+ * @ingroup device
+ *
+ * Get the vendor ID for this device.
+ *
+ * @param device A previously obtained device
+ * @return The vendor ID of this device
+ */
+unsigned int
+libinput_device_get_id_vendor(struct libinput_device *device);
+
+/**
+ * @ingroup device
+ *
  * A device may be mapped to a single output, or all available outputs. If a
  * device is mapped to a single output only, a relative device may not move
  * beyond the boundaries of this output. An absolute device has its input
diff --git a/test/misc.c b/test/misc.c
index bea7e88..e467a5c 100644
--- a/test/misc.c
+++ b/test/misc.c
@@ -390,6 +390,25 @@ START_TEST(context_ref_counting)
 }
 END_TEST
 
+START_TEST(device_ids)
+{
+	struct litest_device *dev = litest_current_device();
+	const char *name;
+	int pid, vid;
+
+	name = libevdev_get_name(dev->evdev);
+	pid = libevdev_get_id_product(dev->evdev);
+	vid = libevdev_get_id_vendor(dev->evdev);
+
+	ck_assert_str_eq(name,
+			 libinput_device_get_name(dev->libinput_device));
+	ck_assert_int_eq(pid,
+			 libinput_device_get_id_product(dev->libinput_device));
+	ck_assert_int_eq(vid,
+			 libinput_device_get_id_vendor(dev->libinput_device));
+}
+END_TEST
+
 int main (int argc, char **argv) {
 	litest_add_no_device("events:conversion", event_conversion_device_notify);
 	litest_add_no_device("events:conversion", event_conversion_pointer);
@@ -397,6 +416,7 @@ int main (int argc, char **argv) {
 	litest_add_no_device("events:conversion", event_conversion_key);
 	litest_add_no_device("events:conversion", event_conversion_touch);
 	litest_add_no_device("context:refcount", context_ref_counting);
+	litest_add("device:id", device_ids, LITEST_ANY, LITEST_ANY);
 
 	return litest_run(argc, argv);
 }
-- 
1.9.3



More information about the wayland-devel mailing list