1a46c0ec8Sopenharmony_ci/* 2a46c0ec8Sopenharmony_ci * Copyright © 2013 Red Hat, Inc. 3a46c0ec8Sopenharmony_ci * 4a46c0ec8Sopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a 5a46c0ec8Sopenharmony_ci * copy of this software and associated documentation files (the "Software"), 6a46c0ec8Sopenharmony_ci * to deal in the Software without restriction, including without limitation 7a46c0ec8Sopenharmony_ci * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8a46c0ec8Sopenharmony_ci * and/or sell copies of the Software, and to permit persons to whom the 9a46c0ec8Sopenharmony_ci * Software is furnished to do so, subject to the following conditions: 10a46c0ec8Sopenharmony_ci * 11a46c0ec8Sopenharmony_ci * The above copyright notice and this permission notice (including the next 12a46c0ec8Sopenharmony_ci * paragraph) shall be included in all copies or substantial portions of the 13a46c0ec8Sopenharmony_ci * Software. 14a46c0ec8Sopenharmony_ci * 15a46c0ec8Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16a46c0ec8Sopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17a46c0ec8Sopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18a46c0ec8Sopenharmony_ci * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19a46c0ec8Sopenharmony_ci * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20a46c0ec8Sopenharmony_ci * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21a46c0ec8Sopenharmony_ci * DEALINGS IN THE SOFTWARE. 22a46c0ec8Sopenharmony_ci */ 23a46c0ec8Sopenharmony_ci 24a46c0ec8Sopenharmony_ci#include "config.h" 25a46c0ec8Sopenharmony_ci 26a46c0ec8Sopenharmony_ci#include "litest.h" 27a46c0ec8Sopenharmony_ci#include "litest-int.h" 28a46c0ec8Sopenharmony_ci 29a46c0ec8Sopenharmony_cistatic struct input_id input_id = { 30a46c0ec8Sopenharmony_ci .bustype = 0x11, 31a46c0ec8Sopenharmony_ci .vendor = 0x1, 32a46c0ec8Sopenharmony_ci .product = 0x1, 33a46c0ec8Sopenharmony_ci}; 34a46c0ec8Sopenharmony_ci 35a46c0ec8Sopenharmony_cistatic int events[] = { 36a46c0ec8Sopenharmony_ci EV_REL, REL_X, 37a46c0ec8Sopenharmony_ci EV_REL, REL_Y, 38a46c0ec8Sopenharmony_ci 39a46c0ec8Sopenharmony_ci EV_KEY, KEY_ESC, 40a46c0ec8Sopenharmony_ci EV_KEY, KEY_1, 41a46c0ec8Sopenharmony_ci EV_KEY, KEY_2, 42a46c0ec8Sopenharmony_ci EV_KEY, KEY_3, 43a46c0ec8Sopenharmony_ci EV_KEY, KEY_4, 44a46c0ec8Sopenharmony_ci EV_KEY, KEY_5, 45a46c0ec8Sopenharmony_ci EV_KEY, KEY_6, 46a46c0ec8Sopenharmony_ci EV_KEY, KEY_7, 47a46c0ec8Sopenharmony_ci EV_KEY, KEY_8, 48a46c0ec8Sopenharmony_ci EV_KEY, KEY_9, 49a46c0ec8Sopenharmony_ci EV_KEY, KEY_0, 50a46c0ec8Sopenharmony_ci EV_KEY, KEY_MINUS, 51a46c0ec8Sopenharmony_ci EV_KEY, KEY_EQUAL, 52a46c0ec8Sopenharmony_ci EV_KEY, KEY_BACKSPACE, 53a46c0ec8Sopenharmony_ci EV_KEY, KEY_TAB, 54a46c0ec8Sopenharmony_ci EV_KEY, KEY_Q, 55a46c0ec8Sopenharmony_ci EV_KEY, KEY_W, 56a46c0ec8Sopenharmony_ci EV_KEY, KEY_E, 57a46c0ec8Sopenharmony_ci EV_KEY, KEY_R, 58a46c0ec8Sopenharmony_ci EV_KEY, KEY_T, 59a46c0ec8Sopenharmony_ci EV_KEY, KEY_Y, 60a46c0ec8Sopenharmony_ci EV_KEY, KEY_U, 61a46c0ec8Sopenharmony_ci EV_KEY, KEY_I, 62a46c0ec8Sopenharmony_ci EV_KEY, KEY_O, 63a46c0ec8Sopenharmony_ci EV_KEY, KEY_P, 64a46c0ec8Sopenharmony_ci EV_KEY, KEY_LEFTBRACE, 65a46c0ec8Sopenharmony_ci EV_KEY, KEY_RIGHTBRACE, 66a46c0ec8Sopenharmony_ci EV_KEY, KEY_ENTER, 67a46c0ec8Sopenharmony_ci EV_KEY, KEY_LEFTCTRL, 68a46c0ec8Sopenharmony_ci EV_KEY, KEY_A, 69a46c0ec8Sopenharmony_ci EV_KEY, KEY_S, 70a46c0ec8Sopenharmony_ci EV_KEY, KEY_D, 71a46c0ec8Sopenharmony_ci EV_KEY, KEY_F, 72a46c0ec8Sopenharmony_ci EV_KEY, KEY_G, 73a46c0ec8Sopenharmony_ci EV_KEY, KEY_H, 74a46c0ec8Sopenharmony_ci EV_KEY, KEY_J, 75a46c0ec8Sopenharmony_ci EV_KEY, KEY_K, 76a46c0ec8Sopenharmony_ci EV_KEY, KEY_L, 77a46c0ec8Sopenharmony_ci EV_KEY, KEY_SEMICOLON, 78a46c0ec8Sopenharmony_ci EV_KEY, KEY_APOSTROPHE, 79a46c0ec8Sopenharmony_ci EV_KEY, KEY_GRAVE, 80a46c0ec8Sopenharmony_ci EV_KEY, KEY_LEFTSHIFT, 81a46c0ec8Sopenharmony_ci EV_KEY, KEY_BACKSLASH, 82a46c0ec8Sopenharmony_ci EV_KEY, KEY_Z, 83a46c0ec8Sopenharmony_ci EV_KEY, KEY_X, 84a46c0ec8Sopenharmony_ci EV_KEY, KEY_C, 85a46c0ec8Sopenharmony_ci EV_KEY, KEY_V, 86a46c0ec8Sopenharmony_ci EV_KEY, KEY_B, 87a46c0ec8Sopenharmony_ci EV_KEY, KEY_N, 88a46c0ec8Sopenharmony_ci EV_KEY, KEY_M, 89a46c0ec8Sopenharmony_ci EV_KEY, KEY_COMMA, 90a46c0ec8Sopenharmony_ci EV_KEY, KEY_DOT, 91a46c0ec8Sopenharmony_ci EV_KEY, KEY_SLASH, 92a46c0ec8Sopenharmony_ci EV_KEY, KEY_RIGHTSHIFT, 93a46c0ec8Sopenharmony_ci EV_KEY, KEY_KPASTERISK, 94a46c0ec8Sopenharmony_ci EV_KEY, KEY_LEFTALT, 95a46c0ec8Sopenharmony_ci EV_KEY, KEY_SPACE, 96a46c0ec8Sopenharmony_ci EV_KEY, KEY_CAPSLOCK, 97a46c0ec8Sopenharmony_ci EV_KEY, KEY_F1, 98a46c0ec8Sopenharmony_ci EV_KEY, KEY_F2, 99a46c0ec8Sopenharmony_ci EV_KEY, KEY_F3, 100a46c0ec8Sopenharmony_ci EV_KEY, KEY_F4, 101a46c0ec8Sopenharmony_ci EV_KEY, KEY_F5, 102a46c0ec8Sopenharmony_ci EV_KEY, KEY_F6, 103a46c0ec8Sopenharmony_ci EV_KEY, KEY_F7, 104a46c0ec8Sopenharmony_ci EV_KEY, KEY_F8, 105a46c0ec8Sopenharmony_ci EV_KEY, KEY_F9, 106a46c0ec8Sopenharmony_ci EV_KEY, KEY_F10, 107a46c0ec8Sopenharmony_ci EV_KEY, KEY_NUMLOCK, 108a46c0ec8Sopenharmony_ci EV_KEY, KEY_SCROLLLOCK, 109a46c0ec8Sopenharmony_ci EV_KEY, KEY_KP7, 110a46c0ec8Sopenharmony_ci EV_KEY, KEY_KP8, 111a46c0ec8Sopenharmony_ci EV_KEY, KEY_KP9, 112a46c0ec8Sopenharmony_ci EV_KEY, KEY_KPMINUS, 113a46c0ec8Sopenharmony_ci EV_KEY, KEY_KP4, 114a46c0ec8Sopenharmony_ci EV_KEY, KEY_KP5, 115a46c0ec8Sopenharmony_ci EV_KEY, KEY_KP6, 116a46c0ec8Sopenharmony_ci EV_KEY, KEY_KPPLUS, 117a46c0ec8Sopenharmony_ci EV_KEY, KEY_KP1, 118a46c0ec8Sopenharmony_ci EV_KEY, KEY_KP2, 119a46c0ec8Sopenharmony_ci EV_KEY, KEY_KP3, 120a46c0ec8Sopenharmony_ci EV_KEY, KEY_KP0, 121a46c0ec8Sopenharmony_ci EV_KEY, KEY_KPDOT, 122a46c0ec8Sopenharmony_ci EV_KEY, KEY_ZENKAKUHANKAKU, 123a46c0ec8Sopenharmony_ci EV_KEY, KEY_102ND, 124a46c0ec8Sopenharmony_ci EV_KEY, KEY_F11, 125a46c0ec8Sopenharmony_ci EV_KEY, KEY_F12, 126a46c0ec8Sopenharmony_ci EV_KEY, KEY_RO, 127a46c0ec8Sopenharmony_ci EV_KEY, KEY_KATAKANA, 128a46c0ec8Sopenharmony_ci EV_KEY, KEY_HIRAGANA, 129a46c0ec8Sopenharmony_ci EV_KEY, KEY_HENKAN, 130a46c0ec8Sopenharmony_ci EV_KEY, KEY_KATAKANAHIRAGANA, 131a46c0ec8Sopenharmony_ci EV_KEY, KEY_MUHENKAN, 132a46c0ec8Sopenharmony_ci EV_KEY, KEY_KPJPCOMMA, 133a46c0ec8Sopenharmony_ci EV_KEY, KEY_KPENTER, 134a46c0ec8Sopenharmony_ci EV_KEY, KEY_RIGHTCTRL, 135a46c0ec8Sopenharmony_ci EV_KEY, KEY_KPSLASH, 136a46c0ec8Sopenharmony_ci EV_KEY, KEY_SYSRQ, 137a46c0ec8Sopenharmony_ci EV_KEY, KEY_RIGHTALT, 138a46c0ec8Sopenharmony_ci EV_KEY, KEY_LINEFEED, 139a46c0ec8Sopenharmony_ci EV_KEY, KEY_HOME, 140a46c0ec8Sopenharmony_ci EV_KEY, KEY_UP, 141a46c0ec8Sopenharmony_ci EV_KEY, KEY_PAGEUP, 142a46c0ec8Sopenharmony_ci EV_KEY, KEY_LEFT, 143a46c0ec8Sopenharmony_ci EV_KEY, KEY_RIGHT, 144a46c0ec8Sopenharmony_ci EV_KEY, KEY_END, 145a46c0ec8Sopenharmony_ci EV_KEY, KEY_DOWN, 146a46c0ec8Sopenharmony_ci EV_KEY, KEY_PAGEDOWN, 147a46c0ec8Sopenharmony_ci EV_KEY, KEY_INSERT, 148a46c0ec8Sopenharmony_ci EV_KEY, KEY_DELETE, 149a46c0ec8Sopenharmony_ci EV_KEY, KEY_MACRO, 150a46c0ec8Sopenharmony_ci EV_KEY, KEY_MUTE, 151a46c0ec8Sopenharmony_ci EV_KEY, KEY_VOLUMEDOWN, 152a46c0ec8Sopenharmony_ci EV_KEY, KEY_VOLUMEUP, 153a46c0ec8Sopenharmony_ci EV_KEY, KEY_POWER, 154a46c0ec8Sopenharmony_ci EV_KEY, KEY_KPEQUAL, 155a46c0ec8Sopenharmony_ci EV_KEY, KEY_KPPLUSMINUS, 156a46c0ec8Sopenharmony_ci EV_KEY, KEY_PAUSE, 157a46c0ec8Sopenharmony_ci /* EV_KEY, KEY_SCALE, */ 158a46c0ec8Sopenharmony_ci EV_KEY, KEY_KPCOMMA, 159a46c0ec8Sopenharmony_ci EV_KEY, KEY_HANGEUL, 160a46c0ec8Sopenharmony_ci EV_KEY, KEY_HANJA, 161a46c0ec8Sopenharmony_ci EV_KEY, KEY_YEN, 162a46c0ec8Sopenharmony_ci EV_KEY, KEY_LEFTMETA, 163a46c0ec8Sopenharmony_ci EV_KEY, KEY_RIGHTMETA, 164a46c0ec8Sopenharmony_ci EV_KEY, KEY_COMPOSE, 165a46c0ec8Sopenharmony_ci EV_KEY, KEY_STOP, 166a46c0ec8Sopenharmony_ci 167a46c0ec8Sopenharmony_ci EV_KEY, KEY_MENU, 168a46c0ec8Sopenharmony_ci EV_KEY, KEY_CALC, 169a46c0ec8Sopenharmony_ci EV_KEY, KEY_SETUP, 170a46c0ec8Sopenharmony_ci EV_KEY, KEY_SLEEP, 171a46c0ec8Sopenharmony_ci EV_KEY, KEY_WAKEUP, 172a46c0ec8Sopenharmony_ci EV_KEY, KEY_SCREENLOCK, 173a46c0ec8Sopenharmony_ci EV_KEY, KEY_DIRECTION, 174a46c0ec8Sopenharmony_ci EV_KEY, KEY_CYCLEWINDOWS, 175a46c0ec8Sopenharmony_ci EV_KEY, KEY_MAIL, 176a46c0ec8Sopenharmony_ci EV_KEY, KEY_BOOKMARKS, 177a46c0ec8Sopenharmony_ci EV_KEY, KEY_COMPUTER, 178a46c0ec8Sopenharmony_ci EV_KEY, KEY_BACK, 179a46c0ec8Sopenharmony_ci EV_KEY, KEY_FORWARD, 180a46c0ec8Sopenharmony_ci EV_KEY, KEY_NEXTSONG, 181a46c0ec8Sopenharmony_ci EV_KEY, KEY_PLAYPAUSE, 182a46c0ec8Sopenharmony_ci EV_KEY, KEY_PREVIOUSSONG, 183a46c0ec8Sopenharmony_ci EV_KEY, KEY_STOPCD, 184a46c0ec8Sopenharmony_ci EV_KEY, KEY_HOMEPAGE, 185a46c0ec8Sopenharmony_ci EV_KEY, KEY_REFRESH, 186a46c0ec8Sopenharmony_ci EV_KEY, KEY_F14, 187a46c0ec8Sopenharmony_ci EV_KEY, KEY_F15, 188a46c0ec8Sopenharmony_ci EV_KEY, KEY_SEARCH, 189a46c0ec8Sopenharmony_ci EV_KEY, KEY_MEDIA, 190a46c0ec8Sopenharmony_ci EV_KEY, KEY_FN, 191a46c0ec8Sopenharmony_ci EV_LED, LED_NUML, 192a46c0ec8Sopenharmony_ci EV_LED, LED_CAPSL, 193a46c0ec8Sopenharmony_ci EV_LED, LED_SCROLLL, 194a46c0ec8Sopenharmony_ci 195a46c0ec8Sopenharmony_ci /* gets disabled */ 196a46c0ec8Sopenharmony_ci INPUT_PROP_MAX, INPUT_PROP_POINTING_STICK, 197a46c0ec8Sopenharmony_ci 198a46c0ec8Sopenharmony_ci -1, -1, 199a46c0ec8Sopenharmony_ci}; 200a46c0ec8Sopenharmony_ci 201a46c0ec8Sopenharmony_cistatic const char quirk_file[] = 202a46c0ec8Sopenharmony_ci"[litest Quirked Keyboard enable buttons]\n" 203a46c0ec8Sopenharmony_ci"MatchName=litest Quirked Keyboard\n" 204a46c0ec8Sopenharmony_ci"AttrEventCode=+BTN_RIGHT;+BTN_MIDDLE;+EV_KEY:0x110\n" /* BTN_LEFT */ 205a46c0ec8Sopenharmony_ci"\n" 206a46c0ec8Sopenharmony_ci"[litest Quirked Keyboard disable buttons]\n" 207a46c0ec8Sopenharmony_ci"MatchName=litest Quirked Keyboard\n" 208a46c0ec8Sopenharmony_ci"AttrEventCode=-BTN_MIDDLE;-BTN_RIGHT\n" 209a46c0ec8Sopenharmony_ci"\n" 210a46c0ec8Sopenharmony_ci"[litest Quirked Keyboard re-enable buttons]\n" 211a46c0ec8Sopenharmony_ci"MatchName=litest Quirked Keyboard\n" 212a46c0ec8Sopenharmony_ci"AttrEventCode=+BTN_RIGHT\n" 213a46c0ec8Sopenharmony_ci"\n" 214a46c0ec8Sopenharmony_ci"[litest Quirked keyboard disable F1-F3]\n" 215a46c0ec8Sopenharmony_ci"MatchName=litest Quirked Keyboard\n" 216a46c0ec8Sopenharmony_ci"AttrEventCode=-KEY_F1;-EV_KEY:0x3c;-KEY_F3\n" 217a46c0ec8Sopenharmony_ci#if HAVE_LIBEVDEV_DISABLE_PROPERTY 218a46c0ec8Sopenharmony_ci"\n" 219a46c0ec8Sopenharmony_ci"[litest Quirked keyboard enable buttonpad]\n" 220a46c0ec8Sopenharmony_ci"MatchName=litest Quirked Keyboard\n" 221a46c0ec8Sopenharmony_ci"AttrInputProp=+INPUT_PROP_BUTTONPAD\n" 222a46c0ec8Sopenharmony_ci"\n" 223a46c0ec8Sopenharmony_ci"[litest Quirked keyboard disable pointingstick]\n" 224a46c0ec8Sopenharmony_ci"MatchName=litest Quirked Keyboard\n" 225a46c0ec8Sopenharmony_ci"AttrInputProp=-INPUT_PROP_POINTING_STICK\n" 226a46c0ec8Sopenharmony_ci"\n" 227a46c0ec8Sopenharmony_ci"[litest Quirked keyboard enable direct]\n" 228a46c0ec8Sopenharmony_ci"MatchName=litest Quirked Keyboard\n" 229a46c0ec8Sopenharmony_ci"AttrInputProp=+INPUT_PROP_DIRECT\n" 230a46c0ec8Sopenharmony_ci"\n" 231a46c0ec8Sopenharmony_ci"[litest Quirked keyboard disable direct]\n" 232a46c0ec8Sopenharmony_ci"MatchName=litest Quirked Keyboard\n" 233a46c0ec8Sopenharmony_ci"AttrInputProp=-INPUT_PROP_DIRECT\n" 234a46c0ec8Sopenharmony_ci"\n" 235a46c0ec8Sopenharmony_ci"[litest Quirked keyboard disable semi-mt]\n" 236a46c0ec8Sopenharmony_ci"MatchName=litest Quirked Keyboard\n" 237a46c0ec8Sopenharmony_ci"AttrInputProp=-INPUT_PROP_SEMI_MT\n" 238a46c0ec8Sopenharmony_ci"\n" 239a46c0ec8Sopenharmony_ci"[litest Quirked keyboard enable semi-mt]\n" 240a46c0ec8Sopenharmony_ci"MatchName=litest Quirked Keyboard\n" 241a46c0ec8Sopenharmony_ci"AttrInputProp=+INPUT_PROP_SEMI_MT\n" 242a46c0ec8Sopenharmony_ci#endif 243a46c0ec8Sopenharmony_ci; 244a46c0ec8Sopenharmony_ci 245a46c0ec8Sopenharmony_ciTEST_DEVICE("keyboard-quirked", 246a46c0ec8Sopenharmony_ci .type = LITEST_KEYBOARD_QUIRKED, 247a46c0ec8Sopenharmony_ci .features = LITEST_KEYS | LITEST_IGNORED, /* Only use this keyboard in specific tests */ 248a46c0ec8Sopenharmony_ci .interface = NULL, 249a46c0ec8Sopenharmony_ci 250a46c0ec8Sopenharmony_ci .name = "Quirked Keyboard", 251a46c0ec8Sopenharmony_ci .id = &input_id, 252a46c0ec8Sopenharmony_ci .events = events, 253a46c0ec8Sopenharmony_ci .absinfo = NULL, 254a46c0ec8Sopenharmony_ci .quirk_file = quirk_file, 255a46c0ec8Sopenharmony_ci) 256