From 1caf4ecb105cbe813d9949cca7d4e21fb197b719 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 25 Jul 2013 16:21:32 +1000 Subject: [PATCH] Add setters for product/vendor/bustype/version Signed-off-by: Peter Hutterer Reviewed-by: Benjamin Tissoires --- libevdev/libevdev.c | 12 ++++++++++++ libevdev/libevdev.h | 44 ++++++++++++++++++++++++++++++++++++++++++ test/test-libevdev-has-event.c | 37 +++++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+) diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c index 93d5d2f..5883447 100644 --- a/libevdev/libevdev.c +++ b/libevdev/libevdev.c @@ -678,6 +678,7 @@ STRING_SETTER(name); STRING_SETTER(phys); STRING_SETTER(uniq); + #define PRODUCT_GETTER(name, field) \ int libevdev_get_##name(const struct libevdev *dev) \ { \ @@ -694,6 +695,17 @@ PRODUCT_GETTER(id_vendor, vendor); PRODUCT_GETTER(id_bustype, bustype); PRODUCT_GETTER(id_version, version); +#define PRODUCT_SETTER(field) \ +void libevdev_set_id_##field(struct libevdev *dev, int field) \ +{ \ + dev->ids.field = field;\ +} + +PRODUCT_SETTER(product); +PRODUCT_SETTER(vendor); +PRODUCT_SETTER(bustype); +PRODUCT_SETTER(version); + int libevdev_get_driver_version(const struct libevdev *dev) { return dev->driver_version; diff --git a/libevdev/libevdev.h b/libevdev/libevdev.h index bb85458..61a4fbe 100644 --- a/libevdev/libevdev.h +++ b/libevdev/libevdev.h @@ -587,6 +587,17 @@ void libevdev_set_uniq(struct libevdev *dev, const char *uniq); int libevdev_get_id_product(const struct libevdev *dev); /** + * @ingroup kernel + * + * @param dev The evdev device + * @param product_id The product ID to assign to this device + * + * @note This function may be called before libevdev_set_fd(). A call to + * libevdev_set_fd() will overwrite any previously set value. + */ +void libevdev_set_id_product(struct libevdev *dev, int product_id); + +/** * @ingroup bits * * @param dev The evdev device, already initialized with libevdev_set_fd() @@ -598,6 +609,17 @@ int libevdev_get_id_product(const struct libevdev *dev); int libevdev_get_id_vendor(const struct libevdev *dev); /** + * @ingroup kernel + * + * @param dev The evdev device + * @param vendor_id The vendor ID to assign to this device + * + * @note This function may be called before libevdev_set_fd(). A call to + * libevdev_set_fd() will overwrite any previously set value. + */ +void libevdev_set_id_vendor(struct libevdev *dev, int vendor_id); + +/** * @ingroup bits * * @param dev The evdev device, already initialized with libevdev_set_fd() @@ -609,6 +631,17 @@ int libevdev_get_id_vendor(const struct libevdev *dev); int libevdev_get_id_bustype(const struct libevdev *dev); /** + * @ingroup kernel + * + * @param dev The evdev device + * @param bustype The bustype to assign to this device + * + * @note This function may be called before libevdev_set_fd(). A call to + * libevdev_set_fd() will overwrite any previously set value. + */ +void libevdev_set_id_bustype(struct libevdev *dev, int bustype); + +/** * @ingroup bits * * @param dev The evdev device, already initialized with libevdev_set_fd() @@ -620,6 +653,17 @@ int libevdev_get_id_bustype(const struct libevdev *dev); int libevdev_get_id_version(const struct libevdev *dev); /** + * @ingroup kernel + * + * @param dev The evdev device + * @param version The version to assign to this device + * + * @note This function may be called before libevdev_set_fd(). A call to + * libevdev_set_fd() will overwrite any previously set value. + */ +void libevdev_set_id_version(struct libevdev *dev, int version); + +/** * @ingroup bits * * @param dev The evdev device, already initialized with libevdev_set_fd() diff --git a/test/test-libevdev-has-event.c b/test/test-libevdev-has-event.c index 577a85f..5ce1271 100644 --- a/test/test-libevdev-has-event.c +++ b/test/test-libevdev-has-event.c @@ -488,6 +488,42 @@ START_TEST(test_device_set_name) } END_TEST +START_TEST(test_device_set_ids) +{ + struct uinput_device* uidev; + struct libevdev *dev; + struct input_id ids = {1, 2, 3, 4}; + int rc; + + dev = libevdev_new(); + + libevdev_set_id_product(dev, 10); + libevdev_set_id_vendor(dev, 20); + libevdev_set_id_bustype(dev, 30); + libevdev_set_id_version(dev, 40); + + ck_assert_int_eq(libevdev_get_id_product(dev), 10); + ck_assert_int_eq(libevdev_get_id_vendor(dev), 20); + ck_assert_int_eq(libevdev_get_id_bustype(dev), 30); + ck_assert_int_eq(libevdev_get_id_version(dev), 40); + + rc = uinput_device_new_with_events(&uidev, TEST_DEVICE_NAME, &ids, + EV_ABS, ABS_X, + -1); + ck_assert_msg(rc == 0, "Failed to create uinput device: %s", strerror(-rc)); + rc = libevdev_set_fd(dev, uinput_device_get_fd(uidev)); + ck_assert_msg(rc == 0, "Failed to init device: %s", strerror(-rc));; + + ck_assert_int_eq(libevdev_get_id_bustype(dev), ids.bustype); + ck_assert_int_eq(libevdev_get_id_vendor(dev), ids.vendor); + ck_assert_int_eq(libevdev_get_id_product(dev), ids.product); + ck_assert_int_eq(libevdev_get_id_version(dev), ids.version); + + uinput_device_free(uidev); + libevdev_free(dev); +} +END_TEST + START_TEST(test_device_get_abs_info) { struct uinput_device* uidev; @@ -924,6 +960,7 @@ libevdev_has_event_test(void) tc = tcase_create("device info"); tcase_add_test(tc, test_device_name); tcase_add_test(tc, test_device_set_name); + tcase_add_test(tc, test_device_set_ids); tcase_add_test(tc, test_device_get_abs_info); suite_add_tcase(s, tc); -- 2.7.4