diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2013-12-09 09:49:43 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2013-12-09 09:49:43 +1000 |
commit | 714c2ffa9e5891fe423212f623572c5dd6b7a04b (patch) | |
tree | 35993f94ff6c9c3594b0ee38e6d1bfaf1d03090b | |
parent | f66bf57baa611d60e1ba228d6d4c493be569bae0 (diff) | |
parent | a2f842bb8a7b40f6858b977f5beb950dd6d6208d (diff) | |
download | libevdev-714c2ffa9e5891fe423212f623572c5dd6b7a04b.tar.gz |
Merge branch 'ev-rep-handling'
-rw-r--r-- | libevdev/libevdev.c | 15 | ||||
-rw-r--r-- | libevdev/libevdev.h | 10 | ||||
-rw-r--r-- | test/test-libevdev-events.c | 26 |
3 files changed, 47 insertions, 4 deletions
diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c index 2944f8f..60bbbfc 100644 --- a/libevdev/libevdev.c +++ b/libevdev/libevdev.c @@ -967,6 +967,19 @@ libevdev_get_event_value(const struct libevdev *dev, unsigned int type, unsigned case EV_KEY: value = bit_is_set(dev->key_values, code); break; case EV_LED: value = bit_is_set(dev->led_values, code); break; case EV_SW: value = bit_is_set(dev->sw_values, code); break; + case EV_REP: + switch(code) { + case REP_DELAY: + libevdev_get_repeat(dev, &value, NULL); + break; + case REP_PERIOD: + libevdev_get_repeat(dev, NULL, &value); + break; + default: + value = 0; + break; + } + break; default: value = 0; break; @@ -1335,7 +1348,7 @@ libevdev_event_type_get_max(unsigned int type) } LIBEVDEV_EXPORT int -libevdev_get_repeat(struct libevdev *dev, int *delay, int *period) +libevdev_get_repeat(const struct libevdev *dev, int *delay, int *period) { if (!libevdev_has_event_type(dev, EV_REP)) return -1; diff --git a/libevdev/libevdev.h b/libevdev/libevdev.h index 87f226c..2b6f48a 100644 --- a/libevdev/libevdev.h +++ b/libevdev/libevdev.h @@ -259,7 +259,7 @@ extern "C" { * <dd>supported, see libevdev_get_id_product(), libevdev_get_id_vendor(), * libevdev_get_id_bustype(), * * libevdev_get_id_version()</dd> * <dt>EVIOCGREP:</dt> - * <dd>supported, see libevdev_get_repeat()</dd> + * <dd>supported, see libevdev_get_event_value())</dd> * <dt>EVIOCSREP:</dt> * <dd>supported, see libevdev_enable_event_code()</dd> * <dt>EVIOCGKEYCODE:</dt> @@ -1606,7 +1606,9 @@ int libevdev_event_code_from_name_n(unsigned int type, const char *name, /** * @ingroup bits * - * Get the repeat delay and repeat period values for this device. + * Get the repeat delay and repeat period values for this device. This + * function is a convenience function only, EV_REP is supported by + * libevdev_get_event_value(). * * @param dev The evdev device, already initialized with libevdev_set_fd() * @param delay If not null, set to the repeat delay value @@ -1615,8 +1617,10 @@ int libevdev_event_code_from_name_n(unsigned int type, const char *name, * @return 0 on success, -1 if this device does not have repeat settings. * * @note This function is signal-safe + * + * @see libevdev_get_event_value */ -int libevdev_get_repeat(struct libevdev *dev, int *delay, int *period); +int libevdev_get_repeat(const struct libevdev *dev, int *delay, int *period); /********* DEPRECATED SECTION *********/ diff --git a/test/test-libevdev-events.c b/test/test-libevdev-events.c index 6340a58..14e20a4 100644 --- a/test/test-libevdev-events.c +++ b/test/test-libevdev-events.c @@ -931,6 +931,31 @@ START_TEST(test_mt_event_values_invalid) } END_TEST +START_TEST(test_ev_rep_values) +{ + struct uinput_device* uidev; + struct libevdev *dev; + int rc; + int delay = 500, period = 200; + rc = test_create_device(&uidev, &dev, + EV_KEY, BTN_LEFT, + EV_REL, REL_X, + EV_REL, REL_Y, + EV_SYN, SYN_REPORT, + -1); + ck_assert_msg(rc == 0, "Failed to create device: %s", strerror(-rc)); + + libevdev_enable_event_code(dev, EV_REP, REP_DELAY, &delay); + libevdev_enable_event_code(dev, EV_REP, REP_PERIOD, &period); + + ck_assert_int_eq(libevdev_has_event_type(dev, EV_REP), 1); + ck_assert_int_eq(libevdev_has_event_code(dev, EV_REP, REP_DELAY), 1); + ck_assert_int_eq(libevdev_has_event_code(dev, EV_REP, REP_PERIOD), 1); + ck_assert_int_eq(libevdev_get_event_value(dev, EV_REP, REP_DELAY), 500); + ck_assert_int_eq(libevdev_get_event_value(dev, EV_REP, REP_PERIOD), 200); +} +END_TEST + START_TEST(test_event_value_setters) { struct uinput_device* uidev; @@ -1205,6 +1230,7 @@ libevdev_events(void) tcase_add_test(tc, test_event_values_invalid); tcase_add_test(tc, test_mt_event_values); tcase_add_test(tc, test_mt_event_values_invalid); + tcase_add_test(tc, test_ev_rep_values); suite_add_tcase(s, tc); tc = tcase_create("event value setters"); |