Add functions to get the device name, PID and VID
authorPeter Hutterer <peter.hutterer@who-t.net>
Fri, 27 Jun 2014 02:55:29 +0000 (12:55 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Tue, 1 Jul 2014 22:52:33 +0000 (08:52 +1000)
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@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Jonas Ã…dahl <jadahl@gmail.com>
src/evdev.c
src/evdev.h
src/libinput.c
src/libinput.h
test/misc.c

index f72bd43e0ac1cd590476d3358b66d04bb5497414..183c200004f4bb8d4b6fb0d07741f58c02c08ad8 100644 (file)
@@ -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])
 {
index 4a83a78af50599e536e4c16d1f8eee9ca49b94ac..fad1f84c2cc82292cb75a403e6d6352543b00f92 100644 (file)
@@ -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]);
 
index 44f4f23de5825ff23d83e910f8e22473f07eb3fa..1918b48a2c48aa57a0eae9b60c79db23b958bc66 100644 (file)
@@ -1161,6 +1161,24 @@ libinput_device_get_sysname(struct libinput_device *device)
        return evdev_device_get_sysname((struct evdev_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)
 {
index ff67ce7c4bfba68770915329959d43fc33d9cc7b..ff8caf4836e02edd5d585037ec0af8ddaed851bc 100644 (file)
@@ -1248,12 +1248,53 @@ libinput_device_get_user_data(struct libinput_device *device);
  *
  * Get the system name of the device.
  *
+ * To get the descriptive device name, use libinput_device_get_name().
+ *
  * @param device A previously obtained device
  * @return System name of the device
+ *
  */
 const char *
 libinput_device_get_sysname(struct libinput_device *device);
 
+/**
+ * @ingroup device
+ *
+ * The descriptive device name as advertised by the kernel and/or the
+ * hardware itself. To get the sysname for this device, use
+ * libinput_device_get_sysname().
+ *
+ * The lifetime of the returned string is tied to the struct
+ * libinput_device. The string may be the empty string but is never NULL.
+ *
+ * @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
  *
index bea7e889e5d2fa85904e58e35e2fa5a30a06fb30..e467a5c22d4a257fd5d38ccca44a983ab3b8b9e0 100644 (file)
@@ -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);
 }