diff options
author | Scott Jann <sjann@knight-rider.org> | 2020-10-17 03:03:17 -0500 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2020-10-19 14:47:07 +1000 |
commit | 4226c7801b4ea1b0c7d1eaac47ca24ece8f24809 (patch) | |
tree | 2cd10d7dfdbfe197afaa8cb909beacea40297a52 | |
parent | 8e94375bc60e3070d04258b31bac7d53882cc534 (diff) | |
download | libevdev-4226c7801b4ea1b0c7d1eaac47ca24ece8f24809.tar.gz |
Add libevdev_disable_property
On some devices, a kernel input property has been set in error and we need the
ability to disable that property.
Signed-off-by: Scott Jann <sjann@knight-rider.org>
-rw-r--r-- | libevdev/libevdev.c | 10 | ||||
-rw-r--r-- | libevdev/libevdev.h | 10 | ||||
-rw-r--r-- | libevdev/libevdev.sym | 7 | ||||
-rw-r--r-- | test/test-libevdev-has-event.c | 7 |
4 files changed, 34 insertions, 0 deletions
diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c index 7dea906..2b90a6c 100644 --- a/libevdev/libevdev.c +++ b/libevdev/libevdev.c @@ -1319,6 +1319,16 @@ libevdev_enable_property(struct libevdev *dev, unsigned int prop) } LIBEVDEV_EXPORT int +libevdev_disable_property(struct libevdev *dev, unsigned int prop) +{ + if (prop > INPUT_PROP_MAX) + return -1; + + clear_bit(dev->props, prop); + return 0; +} + +LIBEVDEV_EXPORT int libevdev_has_event_type(const struct libevdev *dev, unsigned int type) { return type == EV_SYN ||(type <= EV_MAX && bit_is_set(dev->bits, type)); diff --git a/libevdev/libevdev.h b/libevdev/libevdev.h index c94d391..6ffcda7 100644 --- a/libevdev/libevdev.h +++ b/libevdev/libevdev.h @@ -1389,6 +1389,16 @@ int libevdev_has_property(const struct libevdev *dev, unsigned int prop); int libevdev_enable_property(struct libevdev *dev, unsigned int prop); /** + * @ingroup kernel + * + * @param dev The evdev device + * @param prop The input property to disable, one of INPUT_PROP_... + * + * @return 0 on success or -1 on failure + */ +int libevdev_disable_property(struct libevdev *dev, unsigned int prop); + +/** * @ingroup bits * * @param dev The evdev device, already initialized with libevdev_set_fd() diff --git a/libevdev/libevdev.sym b/libevdev/libevdev.sym index d034669..30af65d 100644 --- a/libevdev/libevdev.sym +++ b/libevdev/libevdev.sym @@ -131,3 +131,10 @@ global: local: *; } LIBEVDEV_1_6; + +LIBEVDEV_1_10 { +global: + libevdev_disable_property; +local: + *; +} LIBEVDEV_1_7; diff --git a/test/test-libevdev-has-event.c b/test/test-libevdev-has-event.c index 7d23590..a1f2fec 100644 --- a/test/test-libevdev-has-event.c +++ b/test/test-libevdev-has-event.c @@ -313,6 +313,13 @@ START_TEST(test_set_input_props) ck_assert_int_eq(libevdev_has_property(dev, INPUT_PROP_DIRECT), 0); ck_assert_int_eq(libevdev_has_property(dev, INPUT_PROP_BUTTONPAD), 1); + /* Test disabling the properties too */ + ck_assert_int_eq(libevdev_disable_property(dev, INPUT_PROP_MAX + 1), -1); + ck_assert_int_eq(libevdev_disable_property(dev, INPUT_PROP_DIRECT), 0); + ck_assert_int_eq(libevdev_disable_property(dev, INPUT_PROP_BUTTONPAD), 0); + ck_assert_int_eq(libevdev_has_property(dev, INPUT_PROP_DIRECT), 0); + ck_assert_int_eq(libevdev_has_property(dev, INPUT_PROP_BUTTONPAD), 0); + uinput_device_free(uidev); libevdev_free(dev); } |