STRING_SETTER(phys);
STRING_SETTER(uniq);
+
#define PRODUCT_GETTER(name, field) \
int libevdev_get_##name(const struct libevdev *dev) \
{ \
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;
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()
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()
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()
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()
}
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;
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);