1c0abf9e6Sopenharmony_ci// SPDX-License-Identifier: MIT 2c0abf9e6Sopenharmony_ci/* 3c0abf9e6Sopenharmony_ci * Copyright © 2013 Red Hat, Inc. 4c0abf9e6Sopenharmony_ci */ 5c0abf9e6Sopenharmony_ci 6c0abf9e6Sopenharmony_ci#include "config.h" 7c0abf9e6Sopenharmony_ci#include <linux/input.h> 8c0abf9e6Sopenharmony_ci#include <errno.h> 9c0abf9e6Sopenharmony_ci#include <unistd.h> 10c0abf9e6Sopenharmony_ci#include <limits.h> 11c0abf9e6Sopenharmony_ci#include <fcntl.h> 12c0abf9e6Sopenharmony_ci 13c0abf9e6Sopenharmony_ci#include "test-common.h" 14c0abf9e6Sopenharmony_ci 15c0abf9e6Sopenharmony_cistatic int evbits[] = { 16c0abf9e6Sopenharmony_ci EV_SYN, EV_KEY, EV_REL, EV_ABS, EV_MSC, 17c0abf9e6Sopenharmony_ci EV_SW, EV_LED, EV_SND, EV_FF, 18c0abf9e6Sopenharmony_ci /* Intentionally skipping these, they're different 19c0abf9e6Sopenharmony_ci * EV_PWR, EV_FF_STATUS, EV_REP, */ 20c0abf9e6Sopenharmony_ci -1, 21c0abf9e6Sopenharmony_ci}; 22c0abf9e6Sopenharmony_ci 23c0abf9e6Sopenharmony_ciSTART_TEST(test_has_ev_bit) 24c0abf9e6Sopenharmony_ci{ 25c0abf9e6Sopenharmony_ci int *evbit = evbits; 26c0abf9e6Sopenharmony_ci 27c0abf9e6Sopenharmony_ci while(*evbit != -1) { 28c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 29c0abf9e6Sopenharmony_ci struct libevdev *dev; 30c0abf9e6Sopenharmony_ci int i; 31c0abf9e6Sopenharmony_ci 32c0abf9e6Sopenharmony_ci if (*evbit == EV_ABS) { 33c0abf9e6Sopenharmony_ci struct input_absinfo abs = { ABS_X, 0, 2, 0, 0, 0}; 34c0abf9e6Sopenharmony_ci test_create_abs_device(&uidev, &dev, 35c0abf9e6Sopenharmony_ci 1, &abs, 36c0abf9e6Sopenharmony_ci -1); 37c0abf9e6Sopenharmony_ci } else 38c0abf9e6Sopenharmony_ci test_create_device(&uidev, &dev, 39c0abf9e6Sopenharmony_ci *evbit, 0, 40c0abf9e6Sopenharmony_ci -1); 41c0abf9e6Sopenharmony_ci 42c0abf9e6Sopenharmony_ci ck_assert_msg(libevdev_has_event_type(dev, EV_SYN), "for event type %d\n", *evbit); 43c0abf9e6Sopenharmony_ci ck_assert_msg(libevdev_has_event_type(dev, *evbit), "for event type %d\n", *evbit); 44c0abf9e6Sopenharmony_ci 45c0abf9e6Sopenharmony_ci for (i = 0; i <= EV_MAX; i++) { 46c0abf9e6Sopenharmony_ci if (i == EV_SYN || i == *evbit) 47c0abf9e6Sopenharmony_ci continue; 48c0abf9e6Sopenharmony_ci 49c0abf9e6Sopenharmony_ci ck_assert_msg(!libevdev_has_event_type(dev, i), "for event type %d\n", i); 50c0abf9e6Sopenharmony_ci } 51c0abf9e6Sopenharmony_ci 52c0abf9e6Sopenharmony_ci libevdev_free(dev); 53c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 54c0abf9e6Sopenharmony_ci 55c0abf9e6Sopenharmony_ci evbit++; 56c0abf9e6Sopenharmony_ci } 57c0abf9e6Sopenharmony_ci} 58c0abf9e6Sopenharmony_ciEND_TEST 59c0abf9e6Sopenharmony_ci 60c0abf9e6Sopenharmony_ciSTART_TEST(test_ev_bit_limits) 61c0abf9e6Sopenharmony_ci{ 62c0abf9e6Sopenharmony_ci int *evbit = evbits; 63c0abf9e6Sopenharmony_ci 64c0abf9e6Sopenharmony_ci while(*evbit != -1) { 65c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 66c0abf9e6Sopenharmony_ci struct libevdev *dev; 67c0abf9e6Sopenharmony_ci 68c0abf9e6Sopenharmony_ci if (*evbit == EV_ABS) { 69c0abf9e6Sopenharmony_ci struct input_absinfo abs = { ABS_X, 0, 2, 0, 0, 0}; 70c0abf9e6Sopenharmony_ci test_create_abs_device(&uidev, &dev, 71c0abf9e6Sopenharmony_ci 1, &abs, 72c0abf9e6Sopenharmony_ci -1); 73c0abf9e6Sopenharmony_ci } else 74c0abf9e6Sopenharmony_ci test_create_device(&uidev, &dev, 75c0abf9e6Sopenharmony_ci *evbit, 0, 76c0abf9e6Sopenharmony_ci -1); 77c0abf9e6Sopenharmony_ci 78c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_has_event_type(dev, EV_MAX + 1), 0); 79c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_has_event_type(dev, INT_MAX), 0); 80c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_has_event_type(dev, UINT_MAX), 0); 81c0abf9e6Sopenharmony_ci 82c0abf9e6Sopenharmony_ci libevdev_free(dev); 83c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 84c0abf9e6Sopenharmony_ci 85c0abf9e6Sopenharmony_ci evbit++; 86c0abf9e6Sopenharmony_ci } 87c0abf9e6Sopenharmony_ci} 88c0abf9e6Sopenharmony_ciEND_TEST 89c0abf9e6Sopenharmony_ci 90c0abf9e6Sopenharmony_ciSTART_TEST(test_event_codes) 91c0abf9e6Sopenharmony_ci{ 92c0abf9e6Sopenharmony_ci int *evbit = evbits; 93c0abf9e6Sopenharmony_ci 94c0abf9e6Sopenharmony_ci while(*evbit != -1) { 95c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 96c0abf9e6Sopenharmony_ci struct libevdev *dev; 97c0abf9e6Sopenharmony_ci int code, max; 98c0abf9e6Sopenharmony_ci if (*evbit == EV_SYN) { 99c0abf9e6Sopenharmony_ci evbit++; 100c0abf9e6Sopenharmony_ci continue; 101c0abf9e6Sopenharmony_ci } 102c0abf9e6Sopenharmony_ci 103c0abf9e6Sopenharmony_ci#ifdef __FreeBSD__ 104c0abf9e6Sopenharmony_ci /* Force feedback events are not supported by FreeBSD */ 105c0abf9e6Sopenharmony_ci if (*evbit == EV_FF) { 106c0abf9e6Sopenharmony_ci evbit++; 107c0abf9e6Sopenharmony_ci continue; 108c0abf9e6Sopenharmony_ci } 109c0abf9e6Sopenharmony_ci#endif 110c0abf9e6Sopenharmony_ci 111c0abf9e6Sopenharmony_ci max = libevdev_event_type_get_max(*evbit); 112c0abf9e6Sopenharmony_ci 113c0abf9e6Sopenharmony_ci for (code = 1; code < max; code += 10) { 114c0abf9e6Sopenharmony_ci if (*evbit == EV_ABS) { 115c0abf9e6Sopenharmony_ci struct input_absinfo abs = { code, 0, 2, 0, 0, 0}; 116c0abf9e6Sopenharmony_ci test_create_abs_device(&uidev, &dev, 117c0abf9e6Sopenharmony_ci 1, &abs, 118c0abf9e6Sopenharmony_ci -1); 119c0abf9e6Sopenharmony_ci } else { 120c0abf9e6Sopenharmony_ci test_create_device(&uidev, &dev, 121c0abf9e6Sopenharmony_ci *evbit, code, 122c0abf9e6Sopenharmony_ci -1); 123c0abf9e6Sopenharmony_ci } 124c0abf9e6Sopenharmony_ci 125c0abf9e6Sopenharmony_ci ck_assert_msg(libevdev_has_event_type(dev, *evbit), "for event type %d\n", *evbit); 126c0abf9e6Sopenharmony_ci ck_assert_msg(libevdev_has_event_code(dev, *evbit, code), "for type %d code %d", *evbit, code); 127c0abf9e6Sopenharmony_ci ck_assert_msg(libevdev_has_event_code(dev, EV_SYN, SYN_REPORT), "for EV_SYN"); 128c0abf9e6Sopenharmony_ci /* always false */ 129c0abf9e6Sopenharmony_ci ck_assert_msg(!libevdev_has_event_code(dev, EV_PWR, 0), "for EV_PWR"); 130c0abf9e6Sopenharmony_ci 131c0abf9e6Sopenharmony_ci libevdev_free(dev); 132c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 133c0abf9e6Sopenharmony_ci } 134c0abf9e6Sopenharmony_ci 135c0abf9e6Sopenharmony_ci evbit++; 136c0abf9e6Sopenharmony_ci } 137c0abf9e6Sopenharmony_ci} 138c0abf9e6Sopenharmony_ciEND_TEST 139c0abf9e6Sopenharmony_ci 140c0abf9e6Sopenharmony_ciSTART_TEST(test_event_code_limits) 141c0abf9e6Sopenharmony_ci{ 142c0abf9e6Sopenharmony_ci int *evbit = evbits; 143c0abf9e6Sopenharmony_ci 144c0abf9e6Sopenharmony_ci while(*evbit != -1) { 145c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 146c0abf9e6Sopenharmony_ci struct libevdev *dev; 147c0abf9e6Sopenharmony_ci int max; 148c0abf9e6Sopenharmony_ci 149c0abf9e6Sopenharmony_ci if (*evbit == EV_SYN) { 150c0abf9e6Sopenharmony_ci evbit++; 151c0abf9e6Sopenharmony_ci continue; 152c0abf9e6Sopenharmony_ci } 153c0abf9e6Sopenharmony_ci 154c0abf9e6Sopenharmony_ci max = libevdev_event_type_get_max(*evbit); 155c0abf9e6Sopenharmony_ci ck_assert(max != -1); 156c0abf9e6Sopenharmony_ci 157c0abf9e6Sopenharmony_ci if (*evbit == EV_ABS) { 158c0abf9e6Sopenharmony_ci struct input_absinfo abs = { ABS_X, 0, 2, 0, 0, 0}; 159c0abf9e6Sopenharmony_ci test_create_abs_device(&uidev, &dev, 160c0abf9e6Sopenharmony_ci 1, &abs, 161c0abf9e6Sopenharmony_ci -1); 162c0abf9e6Sopenharmony_ci } else 163c0abf9e6Sopenharmony_ci test_create_device(&uidev, &dev, 164c0abf9e6Sopenharmony_ci *evbit, 1, 165c0abf9e6Sopenharmony_ci -1); 166c0abf9e6Sopenharmony_ci 167c0abf9e6Sopenharmony_ci ck_assert_msg(!libevdev_has_event_code(dev, *evbit, max), "for type %d code %d", *evbit, max); 168c0abf9e6Sopenharmony_ci ck_assert_msg(!libevdev_has_event_code(dev, *evbit, INT_MAX), "for type %d code %d", *evbit, INT_MAX); 169c0abf9e6Sopenharmony_ci ck_assert_msg(!libevdev_has_event_code(dev, *evbit, UINT_MAX), "for type %d code %d", *evbit, UINT_MAX); 170c0abf9e6Sopenharmony_ci 171c0abf9e6Sopenharmony_ci libevdev_free(dev); 172c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 173c0abf9e6Sopenharmony_ci 174c0abf9e6Sopenharmony_ci evbit++; 175c0abf9e6Sopenharmony_ci } 176c0abf9e6Sopenharmony_ci} 177c0abf9e6Sopenharmony_ciEND_TEST 178c0abf9e6Sopenharmony_ci 179c0abf9e6Sopenharmony_ciSTART_TEST(test_ev_rep) 180c0abf9e6Sopenharmony_ci{ 181c0abf9e6Sopenharmony_ci struct libevdev *dev; 182c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 183c0abf9e6Sopenharmony_ci int rc; 184c0abf9e6Sopenharmony_ci int rep, delay; 185c0abf9e6Sopenharmony_ci const int KERNEL_DEFAULT_REP = 250; 186c0abf9e6Sopenharmony_ci const int KERNEL_DEFAULT_DELAY = 33; 187c0abf9e6Sopenharmony_ci 188c0abf9e6Sopenharmony_ci /* EV_REP is special, it's always fully set if set at all, 189c0abf9e6Sopenharmony_ci can't test this through uinput though */ 190c0abf9e6Sopenharmony_ci uidev = uinput_device_new(TEST_DEVICE_NAME); 191c0abf9e6Sopenharmony_ci ck_assert(uidev != NULL); 192c0abf9e6Sopenharmony_ci rc = uinput_device_set_bit(uidev, EV_REP); 193c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, 0); 194c0abf9e6Sopenharmony_ci 195c0abf9e6Sopenharmony_ci rc = uinput_device_create(uidev); 196c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, 0); 197c0abf9e6Sopenharmony_ci 198c0abf9e6Sopenharmony_ci rc = libevdev_new_from_fd(uinput_device_get_fd(uidev), &dev); 199c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, 0); 200c0abf9e6Sopenharmony_ci 201c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_has_event_type(dev, EV_REP), 1); 202c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_has_event_code(dev, EV_REP, REP_DELAY), 1); 203c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_has_event_code(dev, EV_REP, REP_PERIOD), 1); 204c0abf9e6Sopenharmony_ci 205c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_repeat(dev, &rep, &delay), 0); 206c0abf9e6Sopenharmony_ci /* default values as set by the kernel, 207c0abf9e6Sopenharmony_ci see drivers/input/input.c:input_register_device() */ 208c0abf9e6Sopenharmony_ci ck_assert_int_eq(rep, KERNEL_DEFAULT_REP); 209c0abf9e6Sopenharmony_ci ck_assert_int_eq(delay, KERNEL_DEFAULT_DELAY); 210c0abf9e6Sopenharmony_ci 211c0abf9e6Sopenharmony_ci libevdev_free(dev); 212c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 213c0abf9e6Sopenharmony_ci} 214c0abf9e6Sopenharmony_ciEND_TEST 215c0abf9e6Sopenharmony_ci 216c0abf9e6Sopenharmony_ciSTART_TEST(test_ev_rep_values) 217c0abf9e6Sopenharmony_ci{ 218c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 219c0abf9e6Sopenharmony_ci struct libevdev *dev; 220c0abf9e6Sopenharmony_ci int delay = 0xab, period = 0xbc; 221c0abf9e6Sopenharmony_ci 222c0abf9e6Sopenharmony_ci /* EV_REP is special, it's always fully set if set at all, can't set 223c0abf9e6Sopenharmony_ci it through uinput though. */ 224c0abf9e6Sopenharmony_ci test_create_device(&uidev, &dev, -1); 225c0abf9e6Sopenharmony_ci 226c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_repeat(dev, NULL, NULL), -1); 227c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_repeat(dev, &delay, NULL), -1); 228c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_repeat(dev, NULL, &period), -1); 229c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_repeat(dev, &delay, &period), -1); 230c0abf9e6Sopenharmony_ci 231c0abf9e6Sopenharmony_ci ck_assert_int_eq(delay, 0xab); 232c0abf9e6Sopenharmony_ci ck_assert_int_eq(period, 0xbc); 233c0abf9e6Sopenharmony_ci 234c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 235c0abf9e6Sopenharmony_ci libevdev_free(dev); 236c0abf9e6Sopenharmony_ci} 237c0abf9e6Sopenharmony_ciEND_TEST 238c0abf9e6Sopenharmony_ci 239c0abf9e6Sopenharmony_ciSTART_TEST(test_input_props) 240c0abf9e6Sopenharmony_ci{ 241c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 242c0abf9e6Sopenharmony_ci struct libevdev *dev; 243c0abf9e6Sopenharmony_ci int rc, i; 244c0abf9e6Sopenharmony_ci struct input_absinfo abs = { .value = 0, .minimum = 0, .maximum = 2}; 245c0abf9e6Sopenharmony_ci 246c0abf9e6Sopenharmony_ci uidev = uinput_device_new(TEST_DEVICE_NAME); 247c0abf9e6Sopenharmony_ci rc = uinput_device_set_abs_bit(uidev, ABS_X, &abs); 248c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, 0); 249c0abf9e6Sopenharmony_ci uinput_device_set_prop(uidev, INPUT_PROP_DIRECT); 250c0abf9e6Sopenharmony_ci uinput_device_set_prop(uidev, INPUT_PROP_BUTTONPAD); 251c0abf9e6Sopenharmony_ci rc = uinput_device_create(uidev); 252c0abf9e6Sopenharmony_ci ck_assert_msg(rc == 0, "Failed to create uinput device: %s", strerror(-rc)); 253c0abf9e6Sopenharmony_ci 254c0abf9e6Sopenharmony_ci rc = libevdev_new_from_fd(uinput_device_get_fd(uidev), &dev); 255c0abf9e6Sopenharmony_ci ck_assert_msg(rc == 0, "Failed to create device: %s", strerror(-rc)); 256c0abf9e6Sopenharmony_ci 257c0abf9e6Sopenharmony_ci for (i = 0; i < INPUT_PROP_CNT; i++) { 258c0abf9e6Sopenharmony_ci if (i == INPUT_PROP_DIRECT || i == INPUT_PROP_BUTTONPAD) 259c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_has_property(dev, i), 1); 260c0abf9e6Sopenharmony_ci else 261c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_has_property(dev, i), 0); 262c0abf9e6Sopenharmony_ci } 263c0abf9e6Sopenharmony_ci 264c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_has_property(dev, INPUT_PROP_MAX + 1), 0); 265c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_has_property(dev, INPUT_PROP_MAX), 0); 266c0abf9e6Sopenharmony_ci 267c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 268c0abf9e6Sopenharmony_ci libevdev_free(dev); 269c0abf9e6Sopenharmony_ci} 270c0abf9e6Sopenharmony_ciEND_TEST 271c0abf9e6Sopenharmony_ci 272c0abf9e6Sopenharmony_ciSTART_TEST(test_set_input_props) 273c0abf9e6Sopenharmony_ci{ 274c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 275c0abf9e6Sopenharmony_ci struct libevdev *dev; 276c0abf9e6Sopenharmony_ci int rc, fd; 277c0abf9e6Sopenharmony_ci struct input_absinfo abs = { .value = 0, .minimum = 0, .maximum = 2}; 278c0abf9e6Sopenharmony_ci 279c0abf9e6Sopenharmony_ci dev = libevdev_new(); 280c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_enable_property(dev, INPUT_PROP_MAX + 1), -1); 281c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_enable_property(dev, INPUT_PROP_DIRECT), 0); 282c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_enable_property(dev, INPUT_PROP_BUTTONPAD), 0); 283c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_has_property(dev, INPUT_PROP_DIRECT), 1); 284c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_has_property(dev, INPUT_PROP_BUTTONPAD), 1); 285c0abf9e6Sopenharmony_ci 286c0abf9e6Sopenharmony_ci uidev = uinput_device_new(TEST_DEVICE_NAME); 287c0abf9e6Sopenharmony_ci rc = uinput_device_set_abs_bit(uidev, ABS_X, &abs); 288c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, 0); 289c0abf9e6Sopenharmony_ci uinput_device_set_prop(uidev, INPUT_PROP_BUTTONPAD); 290c0abf9e6Sopenharmony_ci rc = uinput_device_create(uidev); 291c0abf9e6Sopenharmony_ci ck_assert_msg(rc == 0, "Failed to create uinput device: %s", strerror(-rc)); 292c0abf9e6Sopenharmony_ci 293c0abf9e6Sopenharmony_ci fd = uinput_device_get_fd(uidev); 294c0abf9e6Sopenharmony_ci rc = libevdev_set_fd(dev, fd); 295c0abf9e6Sopenharmony_ci ck_assert_msg(rc == 0, "Failed to create device: %s", strerror(-rc)); 296c0abf9e6Sopenharmony_ci 297c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_has_property(dev, INPUT_PROP_DIRECT), 0); 298c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_has_property(dev, INPUT_PROP_BUTTONPAD), 1); 299c0abf9e6Sopenharmony_ci 300c0abf9e6Sopenharmony_ci /* Test disabling the properties too */ 301c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_disable_property(dev, INPUT_PROP_MAX + 1), -1); 302c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_disable_property(dev, INPUT_PROP_DIRECT), 0); 303c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_disable_property(dev, INPUT_PROP_BUTTONPAD), 0); 304c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_has_property(dev, INPUT_PROP_DIRECT), 0); 305c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_has_property(dev, INPUT_PROP_BUTTONPAD), 0); 306c0abf9e6Sopenharmony_ci 307c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 308c0abf9e6Sopenharmony_ci libevdev_free(dev); 309c0abf9e6Sopenharmony_ci} 310c0abf9e6Sopenharmony_ciEND_TEST 311c0abf9e6Sopenharmony_ci 312c0abf9e6Sopenharmony_ciSTART_TEST(test_slot_init_value) 313c0abf9e6Sopenharmony_ci{ 314c0abf9e6Sopenharmony_ci struct uinput_device *uidev; 315c0abf9e6Sopenharmony_ci struct libevdev *dev; 316c0abf9e6Sopenharmony_ci int rc; 317c0abf9e6Sopenharmony_ci const int nabs = 6; 318c0abf9e6Sopenharmony_ci int i; 319c0abf9e6Sopenharmony_ci int fd; 320c0abf9e6Sopenharmony_ci struct input_absinfo abs[] = { 321c0abf9e6Sopenharmony_ci { .value = ABS_X, .minimum = 0, .maximum = 1000 }, 322c0abf9e6Sopenharmony_ci { .value = ABS_Y, .minimum = 0, .maximum = 1000 }, 323c0abf9e6Sopenharmony_ci { .value = ABS_MT_POSITION_X, .minimum = 0, .maximum = 1000 }, 324c0abf9e6Sopenharmony_ci { .value = ABS_MT_POSITION_Y, .minimum = 0, .maximum = 1000 }, 325c0abf9e6Sopenharmony_ci { .value = ABS_MT_TRACKING_ID, .minimum = -1, .maximum = 2 }, 326c0abf9e6Sopenharmony_ci { .value = ABS_MT_SLOT, .minimum = 0, .maximum = 1 } 327c0abf9e6Sopenharmony_ci }; 328c0abf9e6Sopenharmony_ci 329c0abf9e6Sopenharmony_ci uidev = uinput_device_new(TEST_DEVICE_NAME); 330c0abf9e6Sopenharmony_ci 331c0abf9e6Sopenharmony_ci for (i = 0; i < nabs; i++) { 332c0abf9e6Sopenharmony_ci rc = uinput_device_set_abs_bit(uidev, abs[i].value, &abs[i]); 333c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, 0); 334c0abf9e6Sopenharmony_ci } 335c0abf9e6Sopenharmony_ci 336c0abf9e6Sopenharmony_ci rc = uinput_device_create(uidev); 337c0abf9e6Sopenharmony_ci ck_assert_msg(rc == 0, "Failed to create uinput device: %s", strerror(-rc)); 338c0abf9e6Sopenharmony_ci 339c0abf9e6Sopenharmony_ci fd = uinput_device_get_fd(uidev); 340c0abf9e6Sopenharmony_ci rc = fcntl(fd, F_SETFL, O_NONBLOCK); 341c0abf9e6Sopenharmony_ci ck_assert_msg(rc == 0, "fcntl failed: %s", strerror(errno)); 342c0abf9e6Sopenharmony_ci 343c0abf9e6Sopenharmony_ci uinput_device_event(uidev, EV_ABS, ABS_MT_SLOT, 0); 344c0abf9e6Sopenharmony_ci uinput_device_event(uidev, EV_ABS, ABS_X, 100); 345c0abf9e6Sopenharmony_ci uinput_device_event(uidev, EV_ABS, ABS_Y, 500); 346c0abf9e6Sopenharmony_ci uinput_device_event(uidev, EV_ABS, ABS_MT_POSITION_X, 100); 347c0abf9e6Sopenharmony_ci uinput_device_event(uidev, EV_ABS, ABS_MT_POSITION_Y, 500); 348c0abf9e6Sopenharmony_ci uinput_device_event(uidev, EV_ABS, ABS_MT_TRACKING_ID, 1); 349c0abf9e6Sopenharmony_ci uinput_device_event(uidev, EV_ABS, ABS_MT_SLOT, 1); 350c0abf9e6Sopenharmony_ci uinput_device_event(uidev, EV_ABS, ABS_X, 1); 351c0abf9e6Sopenharmony_ci uinput_device_event(uidev, EV_ABS, ABS_Y, 5); 352c0abf9e6Sopenharmony_ci uinput_device_event(uidev, EV_ABS, ABS_MT_POSITION_X, 1); 353c0abf9e6Sopenharmony_ci uinput_device_event(uidev, EV_ABS, ABS_MT_POSITION_Y, 5); 354c0abf9e6Sopenharmony_ci uinput_device_event(uidev, EV_ABS, ABS_MT_TRACKING_ID, 2); 355c0abf9e6Sopenharmony_ci uinput_device_event(uidev, EV_SYN, SYN_REPORT, 0); 356c0abf9e6Sopenharmony_ci 357c0abf9e6Sopenharmony_ci rc = libevdev_new_from_fd(fd, &dev); 358c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, 0); 359c0abf9e6Sopenharmony_ci 360c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_current_slot(dev), 1); 361c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_slot_value(dev, 0, ABS_MT_POSITION_X), 100); 362c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_slot_value(dev, 0, ABS_MT_POSITION_Y), 500); 363c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_slot_value(dev, 1, ABS_MT_POSITION_X), 1); 364c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_slot_value(dev, 1, ABS_MT_POSITION_Y), 5); 365c0abf9e6Sopenharmony_ci 366c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 367c0abf9e6Sopenharmony_ci libevdev_free(dev); 368c0abf9e6Sopenharmony_ci} 369c0abf9e6Sopenharmony_ciEND_TEST 370c0abf9e6Sopenharmony_ci 371c0abf9e6Sopenharmony_ciSTART_TEST(test_no_slots) 372c0abf9e6Sopenharmony_ci{ 373c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 374c0abf9e6Sopenharmony_ci struct libevdev *dev; 375c0abf9e6Sopenharmony_ci struct input_absinfo abs[] = { 376c0abf9e6Sopenharmony_ci { .value = ABS_X, .minimum = 0, .maximum = 2 }, 377c0abf9e6Sopenharmony_ci { .value = ABS_Y, .minimum = 0, .maximum = 2 }, 378c0abf9e6Sopenharmony_ci { .value = ABS_MT_POSITION_X, .minimum = 0, .maximum = 2 }, 379c0abf9e6Sopenharmony_ci { .value = ABS_MT_POSITION_Y, .minimum = 0, .maximum = 2 } 380c0abf9e6Sopenharmony_ci }; 381c0abf9e6Sopenharmony_ci 382c0abf9e6Sopenharmony_ci test_create_abs_device(&uidev, &dev, 4, abs, 383c0abf9e6Sopenharmony_ci -1); 384c0abf9e6Sopenharmony_ci 385c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_num_slots(dev), -1); 386c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_current_slot(dev), -1); 387c0abf9e6Sopenharmony_ci 388c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 389c0abf9e6Sopenharmony_ci libevdev_free(dev); 390c0abf9e6Sopenharmony_ci} 391c0abf9e6Sopenharmony_ciEND_TEST 392c0abf9e6Sopenharmony_ci 393c0abf9e6Sopenharmony_ciSTART_TEST(test_slot_number) 394c0abf9e6Sopenharmony_ci{ 395c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 396c0abf9e6Sopenharmony_ci struct libevdev *dev; 397c0abf9e6Sopenharmony_ci const int nslots = 4; 398c0abf9e6Sopenharmony_ci struct input_absinfo abs[] = { 399c0abf9e6Sopenharmony_ci { .value = ABS_X, .minimum = 0, .maximum = 2 }, 400c0abf9e6Sopenharmony_ci { .value = ABS_Y, .minimum = 0, .maximum = 2 }, 401c0abf9e6Sopenharmony_ci { .value = ABS_MT_POSITION_X, .minimum = 0, .maximum = 2 }, 402c0abf9e6Sopenharmony_ci { .value = ABS_MT_POSITION_Y, .minimum = 0, .maximum = 2 }, 403c0abf9e6Sopenharmony_ci { .value = ABS_MT_SLOT, .minimum = 0, .maximum = nslots - 1 } 404c0abf9e6Sopenharmony_ci }; 405c0abf9e6Sopenharmony_ci 406c0abf9e6Sopenharmony_ci test_create_abs_device(&uidev, &dev, 5, abs, 407c0abf9e6Sopenharmony_ci -1); 408c0abf9e6Sopenharmony_ci 409c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_num_slots(dev), nslots); 410c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_current_slot(dev), 0); 411c0abf9e6Sopenharmony_ci 412c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 413c0abf9e6Sopenharmony_ci libevdev_free(dev); 414c0abf9e6Sopenharmony_ci} 415c0abf9e6Sopenharmony_ciEND_TEST 416c0abf9e6Sopenharmony_ci 417c0abf9e6Sopenharmony_ciSTART_TEST(test_invalid_mt_device) 418c0abf9e6Sopenharmony_ci{ 419c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 420c0abf9e6Sopenharmony_ci struct libevdev *dev; 421c0abf9e6Sopenharmony_ci const int nslots = 4; 422c0abf9e6Sopenharmony_ci int value; 423c0abf9e6Sopenharmony_ci struct input_absinfo abs[] = { 424c0abf9e6Sopenharmony_ci { .value = ABS_X, .minimum = 0, .maximum = 2 }, 425c0abf9e6Sopenharmony_ci { .value = ABS_Y, .minimum = 0, .maximum = 2 }, 426c0abf9e6Sopenharmony_ci { .value = ABS_MT_POSITION_X, .minimum = 0, .maximum = 2 }, 427c0abf9e6Sopenharmony_ci { .value = ABS_MT_POSITION_Y, .minimum = 0, .maximum = 2 }, 428c0abf9e6Sopenharmony_ci { .value = ABS_MT_SLOT - 1, .minimum = 0, .maximum = 2 }, 429c0abf9e6Sopenharmony_ci { .value = ABS_MT_SLOT, .minimum = 0, .maximum = nslots - 1 } 430c0abf9e6Sopenharmony_ci }; 431c0abf9e6Sopenharmony_ci 432c0abf9e6Sopenharmony_ci test_create_abs_device(&uidev, &dev, 6, abs, 433c0abf9e6Sopenharmony_ci -1); 434c0abf9e6Sopenharmony_ci 435c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_num_slots(dev), -1); 436c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_current_slot(dev), -1); 437c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_set_slot_value(dev, 0, ABS_MT_POSITION_X, 0), -1); 438c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_fetch_slot_value(dev, 0, ABS_MT_POSITION_X, &value), 0); 439c0abf9e6Sopenharmony_ci 440c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_code(dev, EV_ABS, ABS_MT_SLOT - 1)); 441c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_code(dev, EV_ABS, ABS_MT_SLOT)); 442c0abf9e6Sopenharmony_ci 443c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_set_event_value(dev, EV_ABS, ABS_MT_SLOT, 1), 0); 444c0abf9e6Sopenharmony_ci ck_assert(libevdev_get_event_value(dev, EV_ABS, ABS_MT_SLOT) == 1); 445c0abf9e6Sopenharmony_ci 446c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 447c0abf9e6Sopenharmony_ci libevdev_free(dev); 448c0abf9e6Sopenharmony_ci} 449c0abf9e6Sopenharmony_ciEND_TEST 450c0abf9e6Sopenharmony_ci 451c0abf9e6Sopenharmony_ciSTART_TEST(test_device_name) 452c0abf9e6Sopenharmony_ci{ 453c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 454c0abf9e6Sopenharmony_ci struct libevdev *dev; 455c0abf9e6Sopenharmony_ci struct input_id ids = {1, 2, 3, 4}; 456c0abf9e6Sopenharmony_ci const char *str; 457c0abf9e6Sopenharmony_ci int rc; 458c0abf9e6Sopenharmony_ci 459c0abf9e6Sopenharmony_ci dev = libevdev_new(); 460c0abf9e6Sopenharmony_ci 461c0abf9e6Sopenharmony_ci str = libevdev_get_name(dev); 462c0abf9e6Sopenharmony_ci ck_assert(str != NULL); 463c0abf9e6Sopenharmony_ci ck_assert_int_eq(strlen(str), 0); 464c0abf9e6Sopenharmony_ci 465c0abf9e6Sopenharmony_ci rc = uinput_device_new_with_events(&uidev, TEST_DEVICE_NAME, &ids, 466c0abf9e6Sopenharmony_ci EV_REL, REL_X, 467c0abf9e6Sopenharmony_ci -1); 468c0abf9e6Sopenharmony_ci ck_assert_msg(rc == 0, "Failed to create uinput device: %s", strerror(-rc)); 469c0abf9e6Sopenharmony_ci rc = libevdev_set_fd(dev, uinput_device_get_fd(uidev)); 470c0abf9e6Sopenharmony_ci ck_assert_msg(rc == 0, "Failed to init device: %s", strerror(-rc));; 471c0abf9e6Sopenharmony_ci 472c0abf9e6Sopenharmony_ci str = libevdev_get_name(dev); 473c0abf9e6Sopenharmony_ci ck_assert_int_eq(strcmp(str, TEST_DEVICE_NAME), 0); 474c0abf9e6Sopenharmony_ci 475c0abf9e6Sopenharmony_ci str = libevdev_get_phys(dev); 476c0abf9e6Sopenharmony_ci ck_assert(str == NULL); 477c0abf9e6Sopenharmony_ci 478c0abf9e6Sopenharmony_ci str = libevdev_get_uniq(dev); 479c0abf9e6Sopenharmony_ci ck_assert(str == NULL); 480c0abf9e6Sopenharmony_ci 481c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_id_bustype(dev), ids.bustype); 482c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_id_vendor(dev), ids.vendor); 483c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_id_product(dev), ids.product); 484c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_id_version(dev), ids.version); 485c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_driver_version(dev), EV_VERSION); 486c0abf9e6Sopenharmony_ci 487c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 488c0abf9e6Sopenharmony_ci libevdev_free(dev); 489c0abf9e6Sopenharmony_ci} 490c0abf9e6Sopenharmony_ciEND_TEST 491c0abf9e6Sopenharmony_ci 492c0abf9e6Sopenharmony_ciSTART_TEST(test_device_set_name) 493c0abf9e6Sopenharmony_ci{ 494c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 495c0abf9e6Sopenharmony_ci struct libevdev *dev; 496c0abf9e6Sopenharmony_ci struct input_id ids = {1, 2, 3, 4}; 497c0abf9e6Sopenharmony_ci const char *str; 498c0abf9e6Sopenharmony_ci int rc; 499c0abf9e6Sopenharmony_ci 500c0abf9e6Sopenharmony_ci dev = libevdev_new(); 501c0abf9e6Sopenharmony_ci 502c0abf9e6Sopenharmony_ci libevdev_set_name(dev, "the name"); 503c0abf9e6Sopenharmony_ci libevdev_set_phys(dev, "the phys"); 504c0abf9e6Sopenharmony_ci libevdev_set_uniq(dev, "the uniq"); 505c0abf9e6Sopenharmony_ci 506c0abf9e6Sopenharmony_ci str = libevdev_get_name(dev); 507c0abf9e6Sopenharmony_ci ck_assert(str != NULL); 508c0abf9e6Sopenharmony_ci ck_assert_int_eq(strcmp(str, "the name"), 0); 509c0abf9e6Sopenharmony_ci 510c0abf9e6Sopenharmony_ci str = libevdev_get_phys(dev); 511c0abf9e6Sopenharmony_ci ck_assert(str != NULL); 512c0abf9e6Sopenharmony_ci ck_assert_int_eq(strcmp(str, "the phys"), 0); 513c0abf9e6Sopenharmony_ci 514c0abf9e6Sopenharmony_ci str = libevdev_get_uniq(dev); 515c0abf9e6Sopenharmony_ci ck_assert(str != NULL); 516c0abf9e6Sopenharmony_ci ck_assert_int_eq(strcmp(str, "the uniq"), 0); 517c0abf9e6Sopenharmony_ci 518c0abf9e6Sopenharmony_ci rc = uinput_device_new_with_events(&uidev, TEST_DEVICE_NAME, &ids, 519c0abf9e6Sopenharmony_ci EV_REL, REL_X, 520c0abf9e6Sopenharmony_ci -1); 521c0abf9e6Sopenharmony_ci ck_assert_msg(rc == 0, "Failed to create uinput device: %s", strerror(-rc)); 522c0abf9e6Sopenharmony_ci rc = libevdev_set_fd(dev, uinput_device_get_fd(uidev)); 523c0abf9e6Sopenharmony_ci ck_assert_msg(rc == 0, "Failed to init device: %s", strerror(-rc));; 524c0abf9e6Sopenharmony_ci 525c0abf9e6Sopenharmony_ci str = libevdev_get_name(dev); 526c0abf9e6Sopenharmony_ci ck_assert_int_eq(strcmp(str, TEST_DEVICE_NAME), 0); 527c0abf9e6Sopenharmony_ci 528c0abf9e6Sopenharmony_ci str = libevdev_get_phys(dev); 529c0abf9e6Sopenharmony_ci ck_assert(str == NULL); 530c0abf9e6Sopenharmony_ci 531c0abf9e6Sopenharmony_ci str = libevdev_get_uniq(dev); 532c0abf9e6Sopenharmony_ci ck_assert(str == NULL); 533c0abf9e6Sopenharmony_ci 534c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 535c0abf9e6Sopenharmony_ci libevdev_free(dev); 536c0abf9e6Sopenharmony_ci} 537c0abf9e6Sopenharmony_ciEND_TEST 538c0abf9e6Sopenharmony_ci 539c0abf9e6Sopenharmony_ciSTART_TEST(test_device_set_ids) 540c0abf9e6Sopenharmony_ci{ 541c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 542c0abf9e6Sopenharmony_ci struct libevdev *dev; 543c0abf9e6Sopenharmony_ci struct input_id ids = {1, 2, 3, 4}; 544c0abf9e6Sopenharmony_ci int rc; 545c0abf9e6Sopenharmony_ci 546c0abf9e6Sopenharmony_ci dev = libevdev_new(); 547c0abf9e6Sopenharmony_ci 548c0abf9e6Sopenharmony_ci libevdev_set_id_product(dev, 10); 549c0abf9e6Sopenharmony_ci libevdev_set_id_vendor(dev, 20); 550c0abf9e6Sopenharmony_ci libevdev_set_id_bustype(dev, 30); 551c0abf9e6Sopenharmony_ci libevdev_set_id_version(dev, 40); 552c0abf9e6Sopenharmony_ci 553c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_id_product(dev), 10); 554c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_id_vendor(dev), 20); 555c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_id_bustype(dev), 30); 556c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_id_version(dev), 40); 557c0abf9e6Sopenharmony_ci 558c0abf9e6Sopenharmony_ci rc = uinput_device_new_with_events(&uidev, TEST_DEVICE_NAME, &ids, 559c0abf9e6Sopenharmony_ci EV_REL, REL_X, 560c0abf9e6Sopenharmony_ci -1); 561c0abf9e6Sopenharmony_ci ck_assert_msg(rc == 0, "Failed to create uinput device: %s", strerror(-rc)); 562c0abf9e6Sopenharmony_ci rc = libevdev_set_fd(dev, uinput_device_get_fd(uidev)); 563c0abf9e6Sopenharmony_ci ck_assert_msg(rc == 0, "Failed to init device: %s", strerror(-rc));; 564c0abf9e6Sopenharmony_ci 565c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_id_bustype(dev), ids.bustype); 566c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_id_vendor(dev), ids.vendor); 567c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_id_product(dev), ids.product); 568c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_id_version(dev), ids.version); 569c0abf9e6Sopenharmony_ci 570c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 571c0abf9e6Sopenharmony_ci libevdev_free(dev); 572c0abf9e6Sopenharmony_ci} 573c0abf9e6Sopenharmony_ciEND_TEST 574c0abf9e6Sopenharmony_ci 575c0abf9e6Sopenharmony_ciSTART_TEST(test_device_get_abs_info) 576c0abf9e6Sopenharmony_ci{ 577c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 578c0abf9e6Sopenharmony_ci struct libevdev *dev; 579c0abf9e6Sopenharmony_ci struct input_absinfo abs; 580c0abf9e6Sopenharmony_ci const struct input_absinfo *a; 581c0abf9e6Sopenharmony_ci int rc; 582c0abf9e6Sopenharmony_ci 583c0abf9e6Sopenharmony_ci uidev = uinput_device_new(TEST_DEVICE_NAME); 584c0abf9e6Sopenharmony_ci ck_assert(uidev != NULL); 585c0abf9e6Sopenharmony_ci 586c0abf9e6Sopenharmony_ci abs.minimum = 0; 587c0abf9e6Sopenharmony_ci abs.maximum = 1000; 588c0abf9e6Sopenharmony_ci abs.fuzz = 1; 589c0abf9e6Sopenharmony_ci abs.flat = 2; 590c0abf9e6Sopenharmony_ci abs.resolution = 3; 591c0abf9e6Sopenharmony_ci abs.value = 0; 592c0abf9e6Sopenharmony_ci 593c0abf9e6Sopenharmony_ci uinput_device_set_abs_bit(uidev, ABS_X, &abs); 594c0abf9e6Sopenharmony_ci uinput_device_set_abs_bit(uidev, ABS_MT_POSITION_X, &abs); 595c0abf9e6Sopenharmony_ci 596c0abf9e6Sopenharmony_ci abs.minimum = -500; 597c0abf9e6Sopenharmony_ci abs.maximum = 500; 598c0abf9e6Sopenharmony_ci abs.fuzz = 10; 599c0abf9e6Sopenharmony_ci abs.flat = 20; 600c0abf9e6Sopenharmony_ci abs.resolution = 30; 601c0abf9e6Sopenharmony_ci abs.value = 0; 602c0abf9e6Sopenharmony_ci 603c0abf9e6Sopenharmony_ci uinput_device_set_abs_bit(uidev, ABS_Y, &abs); 604c0abf9e6Sopenharmony_ci uinput_device_set_abs_bit(uidev, ABS_MT_POSITION_Y, &abs); 605c0abf9e6Sopenharmony_ci 606c0abf9e6Sopenharmony_ci rc = uinput_device_create(uidev); 607c0abf9e6Sopenharmony_ci ck_assert_msg(rc == 0, "Failed to create device: %s", strerror(-rc)); 608c0abf9e6Sopenharmony_ci 609c0abf9e6Sopenharmony_ci rc = libevdev_new_from_fd(uinput_device_get_fd(uidev), &dev); 610c0abf9e6Sopenharmony_ci ck_assert_msg(rc == 0, "Failed to init device: %s", strerror(-rc));; 611c0abf9e6Sopenharmony_ci 612c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_minimum(dev, ABS_MAX + 1), 0); 613c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_maximum(dev, ABS_MAX + 1), 0); 614c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_fuzz(dev, ABS_MAX + 1), 0); 615c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_flat(dev, ABS_MAX + 1), 0); 616c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_resolution(dev, ABS_MAX + 1), 0); 617c0abf9e6Sopenharmony_ci ck_assert(!libevdev_get_abs_info(dev, ABS_MAX + 1)); 618c0abf9e6Sopenharmony_ci 619c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_minimum(dev, ABS_X), 0); 620c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_maximum(dev, ABS_X), 1000); 621c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_fuzz(dev, ABS_X), 1); 622c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_flat(dev, ABS_X), 2); 623c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_resolution(dev, ABS_X), 3); 624c0abf9e6Sopenharmony_ci a = libevdev_get_abs_info(dev, ABS_X); 625c0abf9e6Sopenharmony_ci ck_assert(a != NULL); 626c0abf9e6Sopenharmony_ci ck_assert_int_eq(a->minimum, 0); 627c0abf9e6Sopenharmony_ci ck_assert_int_eq(a->maximum, 1000); 628c0abf9e6Sopenharmony_ci ck_assert_int_eq(a->fuzz, 1); 629c0abf9e6Sopenharmony_ci ck_assert_int_eq(a->flat, 2); 630c0abf9e6Sopenharmony_ci ck_assert_int_eq(a->resolution, 3); 631c0abf9e6Sopenharmony_ci 632c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_minimum(dev, ABS_MT_POSITION_X), 0); 633c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_maximum(dev, ABS_MT_POSITION_X), 1000); 634c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_fuzz(dev, ABS_MT_POSITION_X), 1); 635c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_flat(dev, ABS_MT_POSITION_X), 2); 636c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_resolution(dev, ABS_MT_POSITION_X), 3); 637c0abf9e6Sopenharmony_ci a = libevdev_get_abs_info(dev, ABS_MT_POSITION_X); 638c0abf9e6Sopenharmony_ci ck_assert(a != NULL); 639c0abf9e6Sopenharmony_ci ck_assert_int_eq(a->minimum, 0); 640c0abf9e6Sopenharmony_ci ck_assert_int_eq(a->maximum, 1000); 641c0abf9e6Sopenharmony_ci ck_assert_int_eq(a->fuzz, 1); 642c0abf9e6Sopenharmony_ci ck_assert_int_eq(a->flat, 2); 643c0abf9e6Sopenharmony_ci ck_assert_int_eq(a->resolution, 3); 644c0abf9e6Sopenharmony_ci 645c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_minimum(dev, ABS_Y), -500); 646c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_maximum(dev, ABS_Y), 500); 647c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_fuzz(dev, ABS_Y), 10); 648c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_flat(dev, ABS_Y), 20); 649c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_resolution(dev, ABS_Y), 30); 650c0abf9e6Sopenharmony_ci a = libevdev_get_abs_info(dev, ABS_Y); 651c0abf9e6Sopenharmony_ci ck_assert(a != NULL); 652c0abf9e6Sopenharmony_ci ck_assert_int_eq(a->minimum, -500); 653c0abf9e6Sopenharmony_ci ck_assert_int_eq(a->maximum, 500); 654c0abf9e6Sopenharmony_ci ck_assert_int_eq(a->fuzz, 10); 655c0abf9e6Sopenharmony_ci ck_assert_int_eq(a->flat, 20); 656c0abf9e6Sopenharmony_ci ck_assert_int_eq(a->resolution, 30); 657c0abf9e6Sopenharmony_ci 658c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_minimum(dev, ABS_MT_POSITION_Y), -500); 659c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_maximum(dev, ABS_MT_POSITION_Y), 500); 660c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_fuzz(dev, ABS_MT_POSITION_Y), 10); 661c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_flat(dev, ABS_MT_POSITION_Y), 20); 662c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_resolution(dev, ABS_MT_POSITION_Y), 30); 663c0abf9e6Sopenharmony_ci a = libevdev_get_abs_info(dev, ABS_MT_POSITION_Y); 664c0abf9e6Sopenharmony_ci ck_assert(a != NULL); 665c0abf9e6Sopenharmony_ci ck_assert_int_eq(a->minimum, -500); 666c0abf9e6Sopenharmony_ci ck_assert_int_eq(a->maximum, 500); 667c0abf9e6Sopenharmony_ci ck_assert_int_eq(a->fuzz, 10); 668c0abf9e6Sopenharmony_ci ck_assert_int_eq(a->flat, 20); 669c0abf9e6Sopenharmony_ci ck_assert_int_eq(a->resolution, 30); 670c0abf9e6Sopenharmony_ci 671c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 672c0abf9e6Sopenharmony_ci libevdev_free(dev); 673c0abf9e6Sopenharmony_ci} 674c0abf9e6Sopenharmony_ciEND_TEST 675c0abf9e6Sopenharmony_ci 676c0abf9e6Sopenharmony_ciSTART_TEST(test_device_set_abs) 677c0abf9e6Sopenharmony_ci{ 678c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 679c0abf9e6Sopenharmony_ci struct libevdev *dev; 680c0abf9e6Sopenharmony_ci struct input_absinfo abs[2]; 681c0abf9e6Sopenharmony_ci struct input_absinfo a; 682c0abf9e6Sopenharmony_ci 683c0abf9e6Sopenharmony_ci memset(abs, 0, sizeof(abs)); 684c0abf9e6Sopenharmony_ci abs[0].value = ABS_X; 685c0abf9e6Sopenharmony_ci abs[0].maximum = 1000; 686c0abf9e6Sopenharmony_ci 687c0abf9e6Sopenharmony_ci abs[1].value = ABS_Y; 688c0abf9e6Sopenharmony_ci abs[1].maximum = 1000; 689c0abf9e6Sopenharmony_ci 690c0abf9e6Sopenharmony_ci test_create_abs_device(&uidev, &dev, 691c0abf9e6Sopenharmony_ci 2, abs, 692c0abf9e6Sopenharmony_ci EV_SYN, 693c0abf9e6Sopenharmony_ci -1); 694c0abf9e6Sopenharmony_ci 695c0abf9e6Sopenharmony_ci libevdev_set_abs_minimum(dev, ABS_X, 1); 696c0abf9e6Sopenharmony_ci libevdev_set_abs_minimum(dev, ABS_Y, 5); 697c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_minimum(dev, ABS_X), 1); 698c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_minimum(dev, ABS_Y), 5); 699c0abf9e6Sopenharmony_ci 700c0abf9e6Sopenharmony_ci libevdev_set_abs_maximum(dev, ABS_X, 3000); 701c0abf9e6Sopenharmony_ci libevdev_set_abs_maximum(dev, ABS_Y, 5000); 702c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_maximum(dev, ABS_X), 3000); 703c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_maximum(dev, ABS_Y), 5000); 704c0abf9e6Sopenharmony_ci 705c0abf9e6Sopenharmony_ci libevdev_set_abs_fuzz(dev, ABS_X, 3); 706c0abf9e6Sopenharmony_ci libevdev_set_abs_fuzz(dev, ABS_Y, 5); 707c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_fuzz(dev, ABS_X), 3); 708c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_fuzz(dev, ABS_Y), 5); 709c0abf9e6Sopenharmony_ci 710c0abf9e6Sopenharmony_ci libevdev_set_abs_flat(dev, ABS_X, 8); 711c0abf9e6Sopenharmony_ci libevdev_set_abs_flat(dev, ABS_Y, 15); 712c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_flat(dev, ABS_X), 8); 713c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_flat(dev, ABS_Y), 15); 714c0abf9e6Sopenharmony_ci 715c0abf9e6Sopenharmony_ci libevdev_set_abs_resolution(dev, ABS_X, 80); 716c0abf9e6Sopenharmony_ci libevdev_set_abs_resolution(dev, ABS_Y, 150); 717c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_resolution(dev, ABS_X), 80); 718c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_resolution(dev, ABS_Y), 150); 719c0abf9e6Sopenharmony_ci 720c0abf9e6Sopenharmony_ci a.value = 0; 721c0abf9e6Sopenharmony_ci a.minimum = 10; 722c0abf9e6Sopenharmony_ci a.maximum = 100; 723c0abf9e6Sopenharmony_ci a.fuzz = 13; 724c0abf9e6Sopenharmony_ci a.flat = 1; 725c0abf9e6Sopenharmony_ci a.resolution = 16; 726c0abf9e6Sopenharmony_ci 727c0abf9e6Sopenharmony_ci libevdev_set_abs_info(dev, ABS_X, &a); 728c0abf9e6Sopenharmony_ci ck_assert_int_eq(memcmp(&a, libevdev_get_abs_info(dev, ABS_X), sizeof(a)), 0); 729c0abf9e6Sopenharmony_ci 730c0abf9e6Sopenharmony_ci libevdev_set_abs_minimum(dev, ABS_Z, 10); 731c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_has_event_code(dev, EV_ABS, ABS_Z), 0); 732c0abf9e6Sopenharmony_ci 733c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 734c0abf9e6Sopenharmony_ci libevdev_free(dev); 735c0abf9e6Sopenharmony_ci} 736c0abf9e6Sopenharmony_ciEND_TEST 737c0abf9e6Sopenharmony_ci 738c0abf9e6Sopenharmony_ciSTART_TEST(test_device_enable_bit) 739c0abf9e6Sopenharmony_ci{ 740c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 741c0abf9e6Sopenharmony_ci struct libevdev *dev, *dev2; 742c0abf9e6Sopenharmony_ci struct input_absinfo abs = { .value = ABS_X, .minimum = 0, .maximum = 2 }; 743c0abf9e6Sopenharmony_ci int rc; 744c0abf9e6Sopenharmony_ci 745c0abf9e6Sopenharmony_ci test_create_abs_device(&uidev, &dev, 1, &abs, 746c0abf9e6Sopenharmony_ci -1); 747c0abf9e6Sopenharmony_ci 748c0abf9e6Sopenharmony_ci ck_assert(!libevdev_has_event_code(dev, EV_ABS, ABS_Y)); 749c0abf9e6Sopenharmony_ci ck_assert(!libevdev_has_event_type(dev, EV_REL)); 750c0abf9e6Sopenharmony_ci ck_assert(!libevdev_has_event_code(dev, EV_REL, REL_X)); 751c0abf9e6Sopenharmony_ci 752c0abf9e6Sopenharmony_ci abs.minimum = 0; 753c0abf9e6Sopenharmony_ci abs.maximum = 100; 754c0abf9e6Sopenharmony_ci abs.fuzz = 1; 755c0abf9e6Sopenharmony_ci abs.flat = 2; 756c0abf9e6Sopenharmony_ci abs.resolution = 3; 757c0abf9e6Sopenharmony_ci 758c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_enable_event_code(dev, EV_ABS, ABS_Y, &abs), 0); 759c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_code(dev, EV_ABS, ABS_Y)); 760c0abf9e6Sopenharmony_ci 761c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_enable_event_type(dev, EV_REL), 0); 762c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_type(dev, EV_REL)); 763c0abf9e6Sopenharmony_ci ck_assert(!libevdev_has_event_code(dev, EV_REL, REL_X)); 764c0abf9e6Sopenharmony_ci 765c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_enable_event_code(dev, EV_REL, REL_X, NULL), 0); 766c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_code(dev, EV_REL, REL_X)); 767c0abf9e6Sopenharmony_ci 768c0abf9e6Sopenharmony_ci /* make sure kernel device is unchanged */ 769c0abf9e6Sopenharmony_ci rc = libevdev_new_from_fd(uinput_device_get_fd(uidev), &dev2); 770c0abf9e6Sopenharmony_ci ck_assert_msg(rc == 0, "Failed to init device: %s", strerror(-rc)); 771c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_code(dev2, EV_ABS, ABS_X)); 772c0abf9e6Sopenharmony_ci ck_assert(!libevdev_has_event_code(dev2, EV_ABS, ABS_Y)); 773c0abf9e6Sopenharmony_ci ck_assert(!libevdev_has_event_type(dev2, EV_REL)); 774c0abf9e6Sopenharmony_ci ck_assert(!libevdev_has_event_code(dev2, EV_REL, REL_X)); 775c0abf9e6Sopenharmony_ci libevdev_free(dev2); 776c0abf9e6Sopenharmony_ci 777c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 778c0abf9e6Sopenharmony_ci libevdev_free(dev); 779c0abf9e6Sopenharmony_ci} 780c0abf9e6Sopenharmony_ciEND_TEST 781c0abf9e6Sopenharmony_ci 782c0abf9e6Sopenharmony_ciSTART_TEST(test_device_enable_bit_invalid) 783c0abf9e6Sopenharmony_ci{ 784c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 785c0abf9e6Sopenharmony_ci struct libevdev *dev; 786c0abf9e6Sopenharmony_ci struct input_absinfo abs = { .value = ABS_X, .minimum = 0, .maximum = 1 }; 787c0abf9e6Sopenharmony_ci 788c0abf9e6Sopenharmony_ci test_create_abs_device(&uidev, &dev, 1, &abs, 789c0abf9e6Sopenharmony_ci -1); 790c0abf9e6Sopenharmony_ci 791c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_enable_event_code(dev, EV_ABS, ABS_MAX + 1, &abs), -1); 792c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_enable_event_code(dev, EV_MAX + 1, ABS_MAX + 1, &abs), -1); 793c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_enable_event_type(dev, EV_MAX + 1), -1); 794c0abf9e6Sopenharmony_ci /* there's a gap between EV_SW and EV_LED */ 795c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_enable_event_type(dev, EV_LED - 1), -1); 796c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_enable_event_code(dev, EV_LED - 1, 0, NULL), -1); 797c0abf9e6Sopenharmony_ci 798c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_enable_event_code(dev, EV_ABS, ABS_Y, NULL), -1); 799c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_enable_event_code(dev, EV_REP, REP_DELAY, NULL), -1); 800c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_enable_event_code(dev, EV_REL, REL_X, &abs), -1); 801c0abf9e6Sopenharmony_ci 802c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 803c0abf9e6Sopenharmony_ci libevdev_free(dev); 804c0abf9e6Sopenharmony_ci} 805c0abf9e6Sopenharmony_ciEND_TEST 806c0abf9e6Sopenharmony_ci 807c0abf9e6Sopenharmony_ciSTART_TEST(test_device_disable_bit) 808c0abf9e6Sopenharmony_ci{ 809c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 810c0abf9e6Sopenharmony_ci struct libevdev *dev, *dev2; 811c0abf9e6Sopenharmony_ci int rc; 812c0abf9e6Sopenharmony_ci struct input_absinfo abs[2] = { 813c0abf9e6Sopenharmony_ci { .value = ABS_X, .minimum = 0, .maximum = 1 }, 814c0abf9e6Sopenharmony_ci { .value = ABS_Y, .minimum = 0, .maximum = 1 }, 815c0abf9e6Sopenharmony_ci }; 816c0abf9e6Sopenharmony_ci 817c0abf9e6Sopenharmony_ci test_create_abs_device(&uidev, &dev, 818c0abf9e6Sopenharmony_ci 2, abs, 819c0abf9e6Sopenharmony_ci EV_REL, REL_X, 820c0abf9e6Sopenharmony_ci EV_REL, REL_Y, 821c0abf9e6Sopenharmony_ci -1); 822c0abf9e6Sopenharmony_ci 823c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_code(dev, EV_ABS, ABS_X)); 824c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_code(dev, EV_ABS, ABS_Y)); 825c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_type(dev, EV_REL)); 826c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_code(dev, EV_REL, REL_X)); 827c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_code(dev, EV_REL, REL_Y)); 828c0abf9e6Sopenharmony_ci 829c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_disable_event_code(dev, EV_ABS, ABS_Y), 0); 830c0abf9e6Sopenharmony_ci ck_assert(!libevdev_has_event_code(dev, EV_ABS, ABS_Y)); 831c0abf9e6Sopenharmony_ci 832c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_disable_event_code(dev, EV_REL, REL_X), 0); 833c0abf9e6Sopenharmony_ci ck_assert(!libevdev_has_event_code(dev, EV_REL, REL_X)); 834c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_code(dev, EV_REL, REL_Y)); 835c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_type(dev, EV_REL)); 836c0abf9e6Sopenharmony_ci 837c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_disable_event_type(dev, EV_REL), 0); 838c0abf9e6Sopenharmony_ci ck_assert(!libevdev_has_event_type(dev, EV_REL)); 839c0abf9e6Sopenharmony_ci ck_assert(!libevdev_has_event_code(dev, EV_REL, REL_X)); 840c0abf9e6Sopenharmony_ci ck_assert(!libevdev_has_event_code(dev, EV_REL, REL_Y)); 841c0abf9e6Sopenharmony_ci 842c0abf9e6Sopenharmony_ci /* make sure kernel device is unchanged */ 843c0abf9e6Sopenharmony_ci rc = libevdev_new_from_fd(uinput_device_get_fd(uidev), &dev2); 844c0abf9e6Sopenharmony_ci ck_assert_msg(rc == 0, "Failed to init device: %s", strerror(-rc)); 845c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_code(dev2, EV_ABS, ABS_X)); 846c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_code(dev2, EV_ABS, ABS_Y)); 847c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_type(dev2, EV_REL)); 848c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_code(dev2, EV_REL, REL_X)); 849c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_code(dev2, EV_REL, REL_Y)); 850c0abf9e6Sopenharmony_ci libevdev_free(dev2); 851c0abf9e6Sopenharmony_ci 852c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 853c0abf9e6Sopenharmony_ci libevdev_free(dev); 854c0abf9e6Sopenharmony_ci} 855c0abf9e6Sopenharmony_ciEND_TEST 856c0abf9e6Sopenharmony_ci 857c0abf9e6Sopenharmony_ciSTART_TEST(test_device_disable_bit_invalid) 858c0abf9e6Sopenharmony_ci{ 859c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 860c0abf9e6Sopenharmony_ci struct libevdev *dev; 861c0abf9e6Sopenharmony_ci struct input_absinfo abs = { .value = ABS_X, .minimum = 0, .maximum = 1 }; 862c0abf9e6Sopenharmony_ci 863c0abf9e6Sopenharmony_ci test_create_abs_device(&uidev, &dev, 1, &abs, -1); 864c0abf9e6Sopenharmony_ci 865c0abf9e6Sopenharmony_ci /* there's a gap between EV_SW and EV_LED */ 866c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_disable_event_type(dev, EV_LED - 1), -1); 867c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_disable_event_code(dev, EV_LED - 1, 0), -1); 868c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_disable_event_code(dev, EV_ABS, ABS_MAX + 1), -1); 869c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_disable_event_code(dev, EV_MAX + 1, ABS_MAX + 1), -1); 870c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_disable_event_type(dev, EV_MAX + 1), -1); 871c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_disable_event_type(dev, EV_SYN), -1); 872c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_disable_event_code(dev, EV_SYN, SYN_REPORT), -1); 873c0abf9e6Sopenharmony_ci 874c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 875c0abf9e6Sopenharmony_ci libevdev_free(dev); 876c0abf9e6Sopenharmony_ci} 877c0abf9e6Sopenharmony_ciEND_TEST 878c0abf9e6Sopenharmony_ci 879c0abf9e6Sopenharmony_ciSTART_TEST(test_device_kernel_change_axis) 880c0abf9e6Sopenharmony_ci{ 881c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 882c0abf9e6Sopenharmony_ci struct libevdev *dev, *dev2; 883c0abf9e6Sopenharmony_ci struct input_absinfo abs; 884c0abf9e6Sopenharmony_ci int rc; 885c0abf9e6Sopenharmony_ci 886c0abf9e6Sopenharmony_ci uidev = uinput_device_new(TEST_DEVICE_NAME); 887c0abf9e6Sopenharmony_ci ck_assert(uidev != NULL); 888c0abf9e6Sopenharmony_ci 889c0abf9e6Sopenharmony_ci abs.minimum = 0; 890c0abf9e6Sopenharmony_ci abs.maximum = 1000; 891c0abf9e6Sopenharmony_ci abs.fuzz = 1; 892c0abf9e6Sopenharmony_ci abs.flat = 2; 893c0abf9e6Sopenharmony_ci abs.resolution = 3; 894c0abf9e6Sopenharmony_ci abs.value = 0; 895c0abf9e6Sopenharmony_ci 896c0abf9e6Sopenharmony_ci uinput_device_set_abs_bit(uidev, ABS_X, &abs); 897c0abf9e6Sopenharmony_ci 898c0abf9e6Sopenharmony_ci rc = uinput_device_create(uidev); 899c0abf9e6Sopenharmony_ci ck_assert_msg(rc == 0, "Failed to create device: %s", strerror(-rc)); 900c0abf9e6Sopenharmony_ci 901c0abf9e6Sopenharmony_ci rc = libevdev_new_from_fd(uinput_device_get_fd(uidev), &dev); 902c0abf9e6Sopenharmony_ci ck_assert_msg(rc == 0, "Failed to init device: %s", strerror(-rc));; 903c0abf9e6Sopenharmony_ci 904c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_minimum(dev, ABS_X), 0); 905c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_maximum(dev, ABS_X), 1000); 906c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_fuzz(dev, ABS_X), 1); 907c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_flat(dev, ABS_X), 2); 908c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_resolution(dev, ABS_X), 3); 909c0abf9e6Sopenharmony_ci 910c0abf9e6Sopenharmony_ci abs.minimum = 500; 911c0abf9e6Sopenharmony_ci abs.maximum = 5000; 912c0abf9e6Sopenharmony_ci abs.fuzz = 10; 913c0abf9e6Sopenharmony_ci abs.flat = 20; 914c0abf9e6Sopenharmony_ci abs.resolution = 30; 915c0abf9e6Sopenharmony_ci rc = libevdev_kernel_set_abs_info(dev, ABS_X, &abs); 916c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, 0); 917c0abf9e6Sopenharmony_ci 918c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_minimum(dev, ABS_X), 500); 919c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_maximum(dev, ABS_X), 5000); 920c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_fuzz(dev, ABS_X), 10); 921c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_flat(dev, ABS_X), 20); 922c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_resolution(dev, ABS_X), 30); 923c0abf9e6Sopenharmony_ci 924c0abf9e6Sopenharmony_ci /* make sure kernel device is changed */ 925c0abf9e6Sopenharmony_ci rc = libevdev_new_from_fd(uinput_device_get_fd(uidev), &dev2); 926c0abf9e6Sopenharmony_ci ck_assert_msg(rc == 0, "Failed to init device: %s", strerror(-rc)); 927c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_minimum(dev2, ABS_X), 500); 928c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_maximum(dev2, ABS_X), 5000); 929c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_fuzz(dev2, ABS_X), 10); 930c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_flat(dev2, ABS_X), 20); 931c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_abs_resolution(dev2, ABS_X), 30); 932c0abf9e6Sopenharmony_ci libevdev_free(dev2); 933c0abf9e6Sopenharmony_ci 934c0abf9e6Sopenharmony_ci libevdev_free(dev); 935c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 936c0abf9e6Sopenharmony_ci} 937c0abf9e6Sopenharmony_ciEND_TEST 938c0abf9e6Sopenharmony_ci 939c0abf9e6Sopenharmony_ciSTART_TEST(test_device_kernel_change_axis_invalid) 940c0abf9e6Sopenharmony_ci{ 941c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 942c0abf9e6Sopenharmony_ci struct libevdev *dev; 943c0abf9e6Sopenharmony_ci struct input_absinfo abs; 944c0abf9e6Sopenharmony_ci int rc; 945c0abf9e6Sopenharmony_ci 946c0abf9e6Sopenharmony_ci uidev = uinput_device_new(TEST_DEVICE_NAME); 947c0abf9e6Sopenharmony_ci ck_assert(uidev != NULL); 948c0abf9e6Sopenharmony_ci 949c0abf9e6Sopenharmony_ci abs.minimum = 0; 950c0abf9e6Sopenharmony_ci abs.maximum = 1000; 951c0abf9e6Sopenharmony_ci abs.fuzz = 1; 952c0abf9e6Sopenharmony_ci abs.flat = 2; 953c0abf9e6Sopenharmony_ci abs.resolution = 3; /* FIXME: value is unused, we can't test resolution */ 954c0abf9e6Sopenharmony_ci abs.value = 0; 955c0abf9e6Sopenharmony_ci 956c0abf9e6Sopenharmony_ci uinput_device_set_abs_bit(uidev, ABS_X, &abs); 957c0abf9e6Sopenharmony_ci 958c0abf9e6Sopenharmony_ci rc = uinput_device_create(uidev); 959c0abf9e6Sopenharmony_ci ck_assert_msg(rc == 0, "Failed to create device: %s", strerror(-rc)); 960c0abf9e6Sopenharmony_ci 961c0abf9e6Sopenharmony_ci rc = libevdev_new_from_fd(uinput_device_get_fd(uidev), &dev); 962c0abf9e6Sopenharmony_ci ck_assert_msg(rc == 0, "Failed to init device: %s", strerror(-rc));; 963c0abf9e6Sopenharmony_ci 964c0abf9e6Sopenharmony_ci rc = libevdev_kernel_set_abs_info(dev, ABS_MAX + 1, &abs); 965c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, -EINVAL); 966c0abf9e6Sopenharmony_ci 967c0abf9e6Sopenharmony_ci libevdev_free(dev); 968c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 969c0abf9e6Sopenharmony_ci} 970c0abf9e6Sopenharmony_ciEND_TEST 971c0abf9e6Sopenharmony_ci 972c0abf9e6Sopenharmony_ciSTART_TEST(test_device_kernel_set_abs_invalid_fd) 973c0abf9e6Sopenharmony_ci{ 974c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 975c0abf9e6Sopenharmony_ci struct libevdev *dev; 976c0abf9e6Sopenharmony_ci struct input_absinfo abs[2]; 977c0abf9e6Sopenharmony_ci struct input_absinfo a; 978c0abf9e6Sopenharmony_ci int rc; 979c0abf9e6Sopenharmony_ci 980c0abf9e6Sopenharmony_ci libevdev_set_log_function(test_logfunc_ignore_error, NULL); 981c0abf9e6Sopenharmony_ci 982c0abf9e6Sopenharmony_ci memset(abs, 0, sizeof(abs)); 983c0abf9e6Sopenharmony_ci abs[0].value = ABS_X; 984c0abf9e6Sopenharmony_ci abs[0].maximum = 1000; 985c0abf9e6Sopenharmony_ci 986c0abf9e6Sopenharmony_ci abs[1].value = ABS_Y; 987c0abf9e6Sopenharmony_ci abs[1].maximum = 1000; 988c0abf9e6Sopenharmony_ci 989c0abf9e6Sopenharmony_ci dev = libevdev_new(); 990c0abf9e6Sopenharmony_ci rc = libevdev_kernel_set_abs_info(dev, ABS_X, &a); 991c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, -EBADF); 992c0abf9e6Sopenharmony_ci libevdev_free(dev); 993c0abf9e6Sopenharmony_ci 994c0abf9e6Sopenharmony_ci test_create_abs_device(&uidev, &dev, 995c0abf9e6Sopenharmony_ci 2, abs, 996c0abf9e6Sopenharmony_ci EV_SYN, 997c0abf9e6Sopenharmony_ci -1); 998c0abf9e6Sopenharmony_ci 999c0abf9e6Sopenharmony_ci libevdev_change_fd(dev, -2); 1000c0abf9e6Sopenharmony_ci rc = libevdev_kernel_set_abs_info(dev, ABS_X, &a); 1001c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, -EBADF); 1002c0abf9e6Sopenharmony_ci 1003c0abf9e6Sopenharmony_ci libevdev_set_log_function(test_logfunc_abort_on_error, NULL); 1004c0abf9e6Sopenharmony_ci 1005c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 1006c0abf9e6Sopenharmony_ci libevdev_free(dev); 1007c0abf9e6Sopenharmony_ci} 1008c0abf9e6Sopenharmony_ciEND_TEST 1009c0abf9e6Sopenharmony_ci 1010c0abf9e6Sopenharmony_ciSTART_TEST(test_led_valid) 1011c0abf9e6Sopenharmony_ci{ 1012c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 1013c0abf9e6Sopenharmony_ci struct libevdev *dev; 1014c0abf9e6Sopenharmony_ci int rc; 1015c0abf9e6Sopenharmony_ci 1016c0abf9e6Sopenharmony_ci test_create_device(&uidev, &dev, 1017c0abf9e6Sopenharmony_ci EV_LED, LED_NUML, 1018c0abf9e6Sopenharmony_ci EV_LED, LED_CAPSL, 1019c0abf9e6Sopenharmony_ci EV_LED, LED_COMPOSE, 1020c0abf9e6Sopenharmony_ci -1); 1021c0abf9e6Sopenharmony_ci 1022c0abf9e6Sopenharmony_ci rc = libevdev_kernel_set_led_value(dev, LED_NUML, LIBEVDEV_LED_ON); 1023c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, 0); 1024c0abf9e6Sopenharmony_ci rc = libevdev_kernel_set_led_value(dev, LED_NUML, LIBEVDEV_LED_OFF); 1025c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, 0); 1026c0abf9e6Sopenharmony_ci 1027c0abf9e6Sopenharmony_ci rc = libevdev_kernel_set_led_values(dev, 1028c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_OFF, 1029c0abf9e6Sopenharmony_ci LED_CAPSL, LIBEVDEV_LED_ON, 1030c0abf9e6Sopenharmony_ci LED_COMPOSE, LIBEVDEV_LED_OFF, 1031c0abf9e6Sopenharmony_ci -1); 1032c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, 0); 1033c0abf9e6Sopenharmony_ci ck_assert_int_eq(0, libevdev_get_event_value(dev, EV_LED, LED_NUML)); 1034c0abf9e6Sopenharmony_ci ck_assert_int_eq(1, libevdev_get_event_value(dev, EV_LED, LED_CAPSL)); 1035c0abf9e6Sopenharmony_ci ck_assert_int_eq(0, libevdev_get_event_value(dev, EV_LED, LED_COMPOSE)); 1036c0abf9e6Sopenharmony_ci 1037c0abf9e6Sopenharmony_ci rc = libevdev_kernel_set_led_values(dev, 1038c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_ON, 1039c0abf9e6Sopenharmony_ci LED_CAPSL, LIBEVDEV_LED_OFF, 1040c0abf9e6Sopenharmony_ci LED_COMPOSE, LIBEVDEV_LED_ON, 1041c0abf9e6Sopenharmony_ci -1); 1042c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, 0); 1043c0abf9e6Sopenharmony_ci ck_assert_int_eq(1, libevdev_get_event_value(dev, EV_LED, LED_NUML)); 1044c0abf9e6Sopenharmony_ci ck_assert_int_eq(0, libevdev_get_event_value(dev, EV_LED, LED_CAPSL)); 1045c0abf9e6Sopenharmony_ci ck_assert_int_eq(1, libevdev_get_event_value(dev, EV_LED, LED_COMPOSE)); 1046c0abf9e6Sopenharmony_ci 1047c0abf9e6Sopenharmony_ci /* make sure we ignore unset leds */ 1048c0abf9e6Sopenharmony_ci rc = libevdev_kernel_set_led_values(dev, 1049c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_ON, 1050c0abf9e6Sopenharmony_ci LED_CAPSL, LIBEVDEV_LED_OFF, 1051c0abf9e6Sopenharmony_ci LED_SCROLLL, LIBEVDEV_LED_OFF, 1052c0abf9e6Sopenharmony_ci LED_COMPOSE, LIBEVDEV_LED_ON, 1053c0abf9e6Sopenharmony_ci -1); 1054c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, 0); 1055c0abf9e6Sopenharmony_ci ck_assert_int_eq(1, libevdev_get_event_value(dev, EV_LED, LED_NUML)); 1056c0abf9e6Sopenharmony_ci ck_assert_int_eq(0, libevdev_get_event_value(dev, EV_LED, LED_CAPSL)); 1057c0abf9e6Sopenharmony_ci ck_assert_int_eq(1, libevdev_get_event_value(dev, EV_LED, LED_COMPOSE)); 1058c0abf9e6Sopenharmony_ci 1059c0abf9e6Sopenharmony_ci libevdev_free(dev); 1060c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 1061c0abf9e6Sopenharmony_ci} 1062c0abf9e6Sopenharmony_ciEND_TEST 1063c0abf9e6Sopenharmony_ci 1064c0abf9e6Sopenharmony_ciSTART_TEST(test_led_invalid) 1065c0abf9e6Sopenharmony_ci{ 1066c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 1067c0abf9e6Sopenharmony_ci struct libevdev *dev; 1068c0abf9e6Sopenharmony_ci int rc; 1069c0abf9e6Sopenharmony_ci 1070c0abf9e6Sopenharmony_ci test_create_device(&uidev, &dev, 1071c0abf9e6Sopenharmony_ci EV_LED, LED_NUML, 1072c0abf9e6Sopenharmony_ci EV_LED, LED_CAPSL, 1073c0abf9e6Sopenharmony_ci EV_LED, LED_COMPOSE, 1074c0abf9e6Sopenharmony_ci -1); 1075c0abf9e6Sopenharmony_ci 1076c0abf9e6Sopenharmony_ci rc = libevdev_kernel_set_led_value(dev, LED_MAX + 1, LIBEVDEV_LED_ON); 1077c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, -EINVAL); 1078c0abf9e6Sopenharmony_ci 1079c0abf9e6Sopenharmony_ci rc = libevdev_kernel_set_led_value(dev, LED_NUML, LIBEVDEV_LED_OFF + 1); 1080c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, -EINVAL); 1081c0abf9e6Sopenharmony_ci 1082c0abf9e6Sopenharmony_ci rc = libevdev_kernel_set_led_value(dev, LED_SCROLLL, LIBEVDEV_LED_ON); 1083c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, 0); 1084c0abf9e6Sopenharmony_ci 1085c0abf9e6Sopenharmony_ci rc = libevdev_kernel_set_led_values(dev, 1086c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_OFF + 1, 1087c0abf9e6Sopenharmony_ci -1); 1088c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, -EINVAL); 1089c0abf9e6Sopenharmony_ci 1090c0abf9e6Sopenharmony_ci rc = libevdev_kernel_set_led_values(dev, 1091c0abf9e6Sopenharmony_ci LED_MAX + 1, LIBEVDEV_LED_ON, 1092c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_OFF + 1, 1093c0abf9e6Sopenharmony_ci -1); 1094c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, -EINVAL); 1095c0abf9e6Sopenharmony_ci 1096c0abf9e6Sopenharmony_ci rc = libevdev_kernel_set_led_values(dev, 1097c0abf9e6Sopenharmony_ci LED_SCROLLL, LIBEVDEV_LED_OFF, 1098c0abf9e6Sopenharmony_ci -1); 1099c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, 0); 1100c0abf9e6Sopenharmony_ci 1101c0abf9e6Sopenharmony_ci libevdev_free(dev); 1102c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 1103c0abf9e6Sopenharmony_ci} 1104c0abf9e6Sopenharmony_ciEND_TEST 1105c0abf9e6Sopenharmony_ci 1106c0abf9e6Sopenharmony_ciSTART_TEST(test_led_same) 1107c0abf9e6Sopenharmony_ci{ 1108c0abf9e6Sopenharmony_ci struct uinput_device* uidev; 1109c0abf9e6Sopenharmony_ci struct libevdev *dev; 1110c0abf9e6Sopenharmony_ci int rc; 1111c0abf9e6Sopenharmony_ci 1112c0abf9e6Sopenharmony_ci test_create_device(&uidev, &dev, 1113c0abf9e6Sopenharmony_ci EV_LED, LED_NUML, 1114c0abf9e6Sopenharmony_ci EV_LED, LED_CAPSL, 1115c0abf9e6Sopenharmony_ci EV_LED, LED_COMPOSE, 1116c0abf9e6Sopenharmony_ci -1); 1117c0abf9e6Sopenharmony_ci 1118c0abf9e6Sopenharmony_ci rc = libevdev_kernel_set_led_values(dev, 1119c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_OFF, 1120c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_ON, 1121c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_OFF, 1122c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_ON, 1123c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_OFF, 1124c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_ON, 1125c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_OFF, 1126c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_ON, 1127c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_OFF, 1128c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_ON, 1129c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_OFF, 1130c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_ON, 1131c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_OFF, 1132c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_ON, 1133c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_OFF, 1134c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_ON, 1135c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_OFF, 1136c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_ON, 1137c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_OFF, 1138c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_ON, 1139c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_OFF, 1140c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_ON, 1141c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_OFF, 1142c0abf9e6Sopenharmony_ci LED_NUML, LIBEVDEV_LED_ON, 1143c0abf9e6Sopenharmony_ci /* more than LED_CNT */ 1144c0abf9e6Sopenharmony_ci -1); 1145c0abf9e6Sopenharmony_ci ck_assert_int_eq(rc, 0); 1146c0abf9e6Sopenharmony_ci ck_assert_int_eq(1, libevdev_get_event_value(dev, EV_LED, LED_NUML)); 1147c0abf9e6Sopenharmony_ci ck_assert_int_eq(0, libevdev_get_event_value(dev, EV_LED, LED_CAPSL)); 1148c0abf9e6Sopenharmony_ci ck_assert_int_eq(0, libevdev_get_event_value(dev, EV_LED, LED_COMPOSE)); 1149c0abf9e6Sopenharmony_ci 1150c0abf9e6Sopenharmony_ci libevdev_free(dev); 1151c0abf9e6Sopenharmony_ci uinput_device_free(uidev); 1152c0abf9e6Sopenharmony_ci} 1153c0abf9e6Sopenharmony_ciEND_TEST 1154c0abf9e6Sopenharmony_ci 1155c0abf9e6Sopenharmony_ciTEST_SUITE_ROOT_PRIVILEGES(has_events) 1156c0abf9e6Sopenharmony_ci{ 1157c0abf9e6Sopenharmony_ci Suite *s = suite_create("libevdev_has_event tests"); 1158c0abf9e6Sopenharmony_ci 1159c0abf9e6Sopenharmony_ci add_test(s, test_ev_bit_limits); 1160c0abf9e6Sopenharmony_ci add_test(s, test_has_ev_bit); 1161c0abf9e6Sopenharmony_ci 1162c0abf9e6Sopenharmony_ci add_test(s, test_event_codes); 1163c0abf9e6Sopenharmony_ci add_test(s, test_event_code_limits); 1164c0abf9e6Sopenharmony_ci 1165c0abf9e6Sopenharmony_ci add_test(s, test_ev_rep); 1166c0abf9e6Sopenharmony_ci add_test(s, test_ev_rep_values); 1167c0abf9e6Sopenharmony_ci 1168c0abf9e6Sopenharmony_ci add_test(s, test_input_props); 1169c0abf9e6Sopenharmony_ci add_test(s, test_set_input_props); 1170c0abf9e6Sopenharmony_ci 1171c0abf9e6Sopenharmony_ci add_test(s, test_no_slots); 1172c0abf9e6Sopenharmony_ci add_test(s, test_slot_number); 1173c0abf9e6Sopenharmony_ci add_test(s, test_slot_init_value); 1174c0abf9e6Sopenharmony_ci add_test(s, test_invalid_mt_device); 1175c0abf9e6Sopenharmony_ci 1176c0abf9e6Sopenharmony_ci add_test(s, test_device_name); 1177c0abf9e6Sopenharmony_ci add_test(s, test_device_set_name); 1178c0abf9e6Sopenharmony_ci add_test(s, test_device_set_ids); 1179c0abf9e6Sopenharmony_ci add_test(s, test_device_get_abs_info); 1180c0abf9e6Sopenharmony_ci 1181c0abf9e6Sopenharmony_ci add_test(s, test_device_set_abs); 1182c0abf9e6Sopenharmony_ci add_test(s, test_device_enable_bit); 1183c0abf9e6Sopenharmony_ci add_test(s, test_device_enable_bit_invalid); 1184c0abf9e6Sopenharmony_ci add_test(s, test_device_disable_bit); 1185c0abf9e6Sopenharmony_ci add_test(s, test_device_disable_bit_invalid); 1186c0abf9e6Sopenharmony_ci add_test(s, test_device_kernel_change_axis); 1187c0abf9e6Sopenharmony_ci add_test(s, test_device_kernel_change_axis_invalid); 1188c0abf9e6Sopenharmony_ci add_test(s, test_device_kernel_set_abs_invalid_fd); 1189c0abf9e6Sopenharmony_ci 1190c0abf9e6Sopenharmony_ci add_test(s, test_led_valid); 1191c0abf9e6Sopenharmony_ci add_test(s, test_led_invalid); 1192c0abf9e6Sopenharmony_ci add_test(s, test_led_same); 1193c0abf9e6Sopenharmony_ci 1194c0abf9e6Sopenharmony_ci return s; 1195c0abf9e6Sopenharmony_ci} 1196