11da177e4SLinus Torvalds #ifndef _INPUT_H 21da177e4SLinus Torvalds #define _INPUT_H 31da177e4SLinus Torvalds 41da177e4SLinus Torvalds /* 51da177e4SLinus Torvalds * Copyright (c) 1999-2002 Vojtech Pavlik 61da177e4SLinus Torvalds * 71da177e4SLinus Torvalds * This program is free software; you can redistribute it and/or modify it 81da177e4SLinus Torvalds * under the terms of the GNU General Public License version 2 as published by 91da177e4SLinus Torvalds * the Free Software Foundation. 101da177e4SLinus Torvalds */ 111da177e4SLinus Torvalds 121da177e4SLinus Torvalds #ifdef __KERNEL__ 131da177e4SLinus Torvalds #include <linux/time.h> 141da177e4SLinus Torvalds #include <linux/list.h> 151da177e4SLinus Torvalds #else 161da177e4SLinus Torvalds #include <sys/time.h> 171da177e4SLinus Torvalds #include <sys/ioctl.h> 181da177e4SLinus Torvalds #include <asm/types.h> 191da177e4SLinus Torvalds #endif 201da177e4SLinus Torvalds 211da177e4SLinus Torvalds /* 221da177e4SLinus Torvalds * The event structure itself 231da177e4SLinus Torvalds */ 241da177e4SLinus Torvalds 251da177e4SLinus Torvalds struct input_event { 261da177e4SLinus Torvalds struct timeval time; 271da177e4SLinus Torvalds __u16 type; 281da177e4SLinus Torvalds __u16 code; 291da177e4SLinus Torvalds __s32 value; 301da177e4SLinus Torvalds }; 311da177e4SLinus Torvalds 321da177e4SLinus Torvalds /* 331da177e4SLinus Torvalds * Protocol version. 341da177e4SLinus Torvalds */ 351da177e4SLinus Torvalds 361da177e4SLinus Torvalds #define EV_VERSION 0x010000 371da177e4SLinus Torvalds 381da177e4SLinus Torvalds /* 391da177e4SLinus Torvalds * IOCTLs (0x00 - 0x7f) 401da177e4SLinus Torvalds */ 411da177e4SLinus Torvalds 421da177e4SLinus Torvalds struct input_id { 431da177e4SLinus Torvalds __u16 bustype; 441da177e4SLinus Torvalds __u16 vendor; 451da177e4SLinus Torvalds __u16 product; 461da177e4SLinus Torvalds __u16 version; 471da177e4SLinus Torvalds }; 481da177e4SLinus Torvalds 491da177e4SLinus Torvalds struct input_absinfo { 501da177e4SLinus Torvalds __s32 value; 511da177e4SLinus Torvalds __s32 minimum; 521da177e4SLinus Torvalds __s32 maximum; 531da177e4SLinus Torvalds __s32 fuzz; 541da177e4SLinus Torvalds __s32 flat; 551da177e4SLinus Torvalds }; 561da177e4SLinus Torvalds 571da177e4SLinus Torvalds #define EVIOCGVERSION _IOR('E', 0x01, int) /* get driver version */ 581da177e4SLinus Torvalds #define EVIOCGID _IOR('E', 0x02, struct input_id) /* get device ID */ 591da177e4SLinus Torvalds #define EVIOCGKEYCODE _IOR('E', 0x04, int[2]) /* get keycode */ 601da177e4SLinus Torvalds #define EVIOCSKEYCODE _IOW('E', 0x04, int[2]) /* set keycode */ 611da177e4SLinus Torvalds 621da177e4SLinus Torvalds #define EVIOCGNAME(len) _IOC(_IOC_READ, 'E', 0x06, len) /* get device name */ 631da177e4SLinus Torvalds #define EVIOCGPHYS(len) _IOC(_IOC_READ, 'E', 0x07, len) /* get physical location */ 641da177e4SLinus Torvalds #define EVIOCGUNIQ(len) _IOC(_IOC_READ, 'E', 0x08, len) /* get unique identifier */ 651da177e4SLinus Torvalds 661da177e4SLinus Torvalds #define EVIOCGKEY(len) _IOC(_IOC_READ, 'E', 0x18, len) /* get global keystate */ 671da177e4SLinus Torvalds #define EVIOCGLED(len) _IOC(_IOC_READ, 'E', 0x19, len) /* get all LEDs */ 681da177e4SLinus Torvalds #define EVIOCGSND(len) _IOC(_IOC_READ, 'E', 0x1a, len) /* get all sounds status */ 691da177e4SLinus Torvalds 701da177e4SLinus Torvalds #define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len) /* get event bits */ 711da177e4SLinus Torvalds #define EVIOCGABS(abs) _IOR('E', 0x40 + abs, struct input_absinfo) /* get abs value/limits */ 721da177e4SLinus Torvalds #define EVIOCSABS(abs) _IOW('E', 0xc0 + abs, struct input_absinfo) /* set abs value/limits */ 731da177e4SLinus Torvalds 741da177e4SLinus Torvalds #define EVIOCSFF _IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect)) /* send a force effect to a force feedback device */ 751da177e4SLinus Torvalds #define EVIOCRMFF _IOW('E', 0x81, int) /* Erase a force effect */ 761da177e4SLinus Torvalds #define EVIOCGEFFECTS _IOR('E', 0x84, int) /* Report number of effects playable at the same time */ 771da177e4SLinus Torvalds 781da177e4SLinus Torvalds #define EVIOCGRAB _IOW('E', 0x90, int) /* Grab/Release device */ 791da177e4SLinus Torvalds 801da177e4SLinus Torvalds /* 811da177e4SLinus Torvalds * Event types 821da177e4SLinus Torvalds */ 831da177e4SLinus Torvalds 841da177e4SLinus Torvalds #define EV_SYN 0x00 851da177e4SLinus Torvalds #define EV_KEY 0x01 861da177e4SLinus Torvalds #define EV_REL 0x02 871da177e4SLinus Torvalds #define EV_ABS 0x03 881da177e4SLinus Torvalds #define EV_MSC 0x04 891da177e4SLinus Torvalds #define EV_LED 0x11 901da177e4SLinus Torvalds #define EV_SND 0x12 911da177e4SLinus Torvalds #define EV_REP 0x14 921da177e4SLinus Torvalds #define EV_FF 0x15 931da177e4SLinus Torvalds #define EV_PWR 0x16 941da177e4SLinus Torvalds #define EV_FF_STATUS 0x17 951da177e4SLinus Torvalds #define EV_MAX 0x1f 961da177e4SLinus Torvalds 971da177e4SLinus Torvalds /* 981da177e4SLinus Torvalds * Synchronization events. 991da177e4SLinus Torvalds */ 1001da177e4SLinus Torvalds 1011da177e4SLinus Torvalds #define SYN_REPORT 0 1021da177e4SLinus Torvalds #define SYN_CONFIG 1 1031da177e4SLinus Torvalds 1041da177e4SLinus Torvalds /* 1051da177e4SLinus Torvalds * Keys and buttons 1061da177e4SLinus Torvalds */ 1071da177e4SLinus Torvalds 1081da177e4SLinus Torvalds #define KEY_RESERVED 0 1091da177e4SLinus Torvalds #define KEY_ESC 1 1101da177e4SLinus Torvalds #define KEY_1 2 1111da177e4SLinus Torvalds #define KEY_2 3 1121da177e4SLinus Torvalds #define KEY_3 4 1131da177e4SLinus Torvalds #define KEY_4 5 1141da177e4SLinus Torvalds #define KEY_5 6 1151da177e4SLinus Torvalds #define KEY_6 7 1161da177e4SLinus Torvalds #define KEY_7 8 1171da177e4SLinus Torvalds #define KEY_8 9 1181da177e4SLinus Torvalds #define KEY_9 10 1191da177e4SLinus Torvalds #define KEY_0 11 1201da177e4SLinus Torvalds #define KEY_MINUS 12 1211da177e4SLinus Torvalds #define KEY_EQUAL 13 1221da177e4SLinus Torvalds #define KEY_BACKSPACE 14 1231da177e4SLinus Torvalds #define KEY_TAB 15 1241da177e4SLinus Torvalds #define KEY_Q 16 1251da177e4SLinus Torvalds #define KEY_W 17 1261da177e4SLinus Torvalds #define KEY_E 18 1271da177e4SLinus Torvalds #define KEY_R 19 1281da177e4SLinus Torvalds #define KEY_T 20 1291da177e4SLinus Torvalds #define KEY_Y 21 1301da177e4SLinus Torvalds #define KEY_U 22 1311da177e4SLinus Torvalds #define KEY_I 23 1321da177e4SLinus Torvalds #define KEY_O 24 1331da177e4SLinus Torvalds #define KEY_P 25 1341da177e4SLinus Torvalds #define KEY_LEFTBRACE 26 1351da177e4SLinus Torvalds #define KEY_RIGHTBRACE 27 1361da177e4SLinus Torvalds #define KEY_ENTER 28 1371da177e4SLinus Torvalds #define KEY_LEFTCTRL 29 1381da177e4SLinus Torvalds #define KEY_A 30 1391da177e4SLinus Torvalds #define KEY_S 31 1401da177e4SLinus Torvalds #define KEY_D 32 1411da177e4SLinus Torvalds #define KEY_F 33 1421da177e4SLinus Torvalds #define KEY_G 34 1431da177e4SLinus Torvalds #define KEY_H 35 1441da177e4SLinus Torvalds #define KEY_J 36 1451da177e4SLinus Torvalds #define KEY_K 37 1461da177e4SLinus Torvalds #define KEY_L 38 1471da177e4SLinus Torvalds #define KEY_SEMICOLON 39 1481da177e4SLinus Torvalds #define KEY_APOSTROPHE 40 1491da177e4SLinus Torvalds #define KEY_GRAVE 41 1501da177e4SLinus Torvalds #define KEY_LEFTSHIFT 42 1511da177e4SLinus Torvalds #define KEY_BACKSLASH 43 1521da177e4SLinus Torvalds #define KEY_Z 44 1531da177e4SLinus Torvalds #define KEY_X 45 1541da177e4SLinus Torvalds #define KEY_C 46 1551da177e4SLinus Torvalds #define KEY_V 47 1561da177e4SLinus Torvalds #define KEY_B 48 1571da177e4SLinus Torvalds #define KEY_N 49 1581da177e4SLinus Torvalds #define KEY_M 50 1591da177e4SLinus Torvalds #define KEY_COMMA 51 1601da177e4SLinus Torvalds #define KEY_DOT 52 1611da177e4SLinus Torvalds #define KEY_SLASH 53 1621da177e4SLinus Torvalds #define KEY_RIGHTSHIFT 54 1631da177e4SLinus Torvalds #define KEY_KPASTERISK 55 1641da177e4SLinus Torvalds #define KEY_LEFTALT 56 1651da177e4SLinus Torvalds #define KEY_SPACE 57 1661da177e4SLinus Torvalds #define KEY_CAPSLOCK 58 1671da177e4SLinus Torvalds #define KEY_F1 59 1681da177e4SLinus Torvalds #define KEY_F2 60 1691da177e4SLinus Torvalds #define KEY_F3 61 1701da177e4SLinus Torvalds #define KEY_F4 62 1711da177e4SLinus Torvalds #define KEY_F5 63 1721da177e4SLinus Torvalds #define KEY_F6 64 1731da177e4SLinus Torvalds #define KEY_F7 65 1741da177e4SLinus Torvalds #define KEY_F8 66 1751da177e4SLinus Torvalds #define KEY_F9 67 1761da177e4SLinus Torvalds #define KEY_F10 68 1771da177e4SLinus Torvalds #define KEY_NUMLOCK 69 1781da177e4SLinus Torvalds #define KEY_SCROLLLOCK 70 1791da177e4SLinus Torvalds #define KEY_KP7 71 1801da177e4SLinus Torvalds #define KEY_KP8 72 1811da177e4SLinus Torvalds #define KEY_KP9 73 1821da177e4SLinus Torvalds #define KEY_KPMINUS 74 1831da177e4SLinus Torvalds #define KEY_KP4 75 1841da177e4SLinus Torvalds #define KEY_KP5 76 1851da177e4SLinus Torvalds #define KEY_KP6 77 1861da177e4SLinus Torvalds #define KEY_KPPLUS 78 1871da177e4SLinus Torvalds #define KEY_KP1 79 1881da177e4SLinus Torvalds #define KEY_KP2 80 1891da177e4SLinus Torvalds #define KEY_KP3 81 1901da177e4SLinus Torvalds #define KEY_KP0 82 1911da177e4SLinus Torvalds #define KEY_KPDOT 83 1921da177e4SLinus Torvalds 1931da177e4SLinus Torvalds #define KEY_ZENKAKUHANKAKU 85 1941da177e4SLinus Torvalds #define KEY_102ND 86 1951da177e4SLinus Torvalds #define KEY_F11 87 1961da177e4SLinus Torvalds #define KEY_F12 88 1971da177e4SLinus Torvalds #define KEY_RO 89 1981da177e4SLinus Torvalds #define KEY_KATAKANA 90 1991da177e4SLinus Torvalds #define KEY_HIRAGANA 91 2001da177e4SLinus Torvalds #define KEY_HENKAN 92 2011da177e4SLinus Torvalds #define KEY_KATAKANAHIRAGANA 93 2021da177e4SLinus Torvalds #define KEY_MUHENKAN 94 2031da177e4SLinus Torvalds #define KEY_KPJPCOMMA 95 2041da177e4SLinus Torvalds #define KEY_KPENTER 96 2051da177e4SLinus Torvalds #define KEY_RIGHTCTRL 97 2061da177e4SLinus Torvalds #define KEY_KPSLASH 98 2071da177e4SLinus Torvalds #define KEY_SYSRQ 99 2081da177e4SLinus Torvalds #define KEY_RIGHTALT 100 2091da177e4SLinus Torvalds #define KEY_LINEFEED 101 2101da177e4SLinus Torvalds #define KEY_HOME 102 2111da177e4SLinus Torvalds #define KEY_UP 103 2121da177e4SLinus Torvalds #define KEY_PAGEUP 104 2131da177e4SLinus Torvalds #define KEY_LEFT 105 2141da177e4SLinus Torvalds #define KEY_RIGHT 106 2151da177e4SLinus Torvalds #define KEY_END 107 2161da177e4SLinus Torvalds #define KEY_DOWN 108 2171da177e4SLinus Torvalds #define KEY_PAGEDOWN 109 2181da177e4SLinus Torvalds #define KEY_INSERT 110 2191da177e4SLinus Torvalds #define KEY_DELETE 111 2201da177e4SLinus Torvalds #define KEY_MACRO 112 2211da177e4SLinus Torvalds #define KEY_MUTE 113 2221da177e4SLinus Torvalds #define KEY_VOLUMEDOWN 114 2231da177e4SLinus Torvalds #define KEY_VOLUMEUP 115 2241da177e4SLinus Torvalds #define KEY_POWER 116 2251da177e4SLinus Torvalds #define KEY_KPEQUAL 117 2261da177e4SLinus Torvalds #define KEY_KPPLUSMINUS 118 2271da177e4SLinus Torvalds #define KEY_PAUSE 119 2281da177e4SLinus Torvalds 2291da177e4SLinus Torvalds #define KEY_KPCOMMA 121 2301da177e4SLinus Torvalds #define KEY_HANGUEL 122 2311da177e4SLinus Torvalds #define KEY_HANJA 123 2321da177e4SLinus Torvalds #define KEY_YEN 124 2331da177e4SLinus Torvalds #define KEY_LEFTMETA 125 2341da177e4SLinus Torvalds #define KEY_RIGHTMETA 126 2351da177e4SLinus Torvalds #define KEY_COMPOSE 127 2361da177e4SLinus Torvalds 2371da177e4SLinus Torvalds #define KEY_STOP 128 2381da177e4SLinus Torvalds #define KEY_AGAIN 129 2391da177e4SLinus Torvalds #define KEY_PROPS 130 2401da177e4SLinus Torvalds #define KEY_UNDO 131 2411da177e4SLinus Torvalds #define KEY_FRONT 132 2421da177e4SLinus Torvalds #define KEY_COPY 133 2431da177e4SLinus Torvalds #define KEY_OPEN 134 2441da177e4SLinus Torvalds #define KEY_PASTE 135 2451da177e4SLinus Torvalds #define KEY_FIND 136 2461da177e4SLinus Torvalds #define KEY_CUT 137 2471da177e4SLinus Torvalds #define KEY_HELP 138 2481da177e4SLinus Torvalds #define KEY_MENU 139 2491da177e4SLinus Torvalds #define KEY_CALC 140 2501da177e4SLinus Torvalds #define KEY_SETUP 141 2511da177e4SLinus Torvalds #define KEY_SLEEP 142 2521da177e4SLinus Torvalds #define KEY_WAKEUP 143 2531da177e4SLinus Torvalds #define KEY_FILE 144 2541da177e4SLinus Torvalds #define KEY_SENDFILE 145 2551da177e4SLinus Torvalds #define KEY_DELETEFILE 146 2561da177e4SLinus Torvalds #define KEY_XFER 147 2571da177e4SLinus Torvalds #define KEY_PROG1 148 2581da177e4SLinus Torvalds #define KEY_PROG2 149 2591da177e4SLinus Torvalds #define KEY_WWW 150 2601da177e4SLinus Torvalds #define KEY_MSDOS 151 2611da177e4SLinus Torvalds #define KEY_COFFEE 152 2621da177e4SLinus Torvalds #define KEY_DIRECTION 153 2631da177e4SLinus Torvalds #define KEY_CYCLEWINDOWS 154 2641da177e4SLinus Torvalds #define KEY_MAIL 155 2651da177e4SLinus Torvalds #define KEY_BOOKMARKS 156 2661da177e4SLinus Torvalds #define KEY_COMPUTER 157 2671da177e4SLinus Torvalds #define KEY_BACK 158 2681da177e4SLinus Torvalds #define KEY_FORWARD 159 2691da177e4SLinus Torvalds #define KEY_CLOSECD 160 2701da177e4SLinus Torvalds #define KEY_EJECTCD 161 2711da177e4SLinus Torvalds #define KEY_EJECTCLOSECD 162 2721da177e4SLinus Torvalds #define KEY_NEXTSONG 163 2731da177e4SLinus Torvalds #define KEY_PLAYPAUSE 164 2741da177e4SLinus Torvalds #define KEY_PREVIOUSSONG 165 2751da177e4SLinus Torvalds #define KEY_STOPCD 166 2761da177e4SLinus Torvalds #define KEY_RECORD 167 2771da177e4SLinus Torvalds #define KEY_REWIND 168 2781da177e4SLinus Torvalds #define KEY_PHONE 169 2791da177e4SLinus Torvalds #define KEY_ISO 170 2801da177e4SLinus Torvalds #define KEY_CONFIG 171 2811da177e4SLinus Torvalds #define KEY_HOMEPAGE 172 2821da177e4SLinus Torvalds #define KEY_REFRESH 173 2831da177e4SLinus Torvalds #define KEY_EXIT 174 2841da177e4SLinus Torvalds #define KEY_MOVE 175 2851da177e4SLinus Torvalds #define KEY_EDIT 176 2861da177e4SLinus Torvalds #define KEY_SCROLLUP 177 2871da177e4SLinus Torvalds #define KEY_SCROLLDOWN 178 2881da177e4SLinus Torvalds #define KEY_KPLEFTPAREN 179 2891da177e4SLinus Torvalds #define KEY_KPRIGHTPAREN 180 2901da177e4SLinus Torvalds 2911da177e4SLinus Torvalds #define KEY_F13 183 2921da177e4SLinus Torvalds #define KEY_F14 184 2931da177e4SLinus Torvalds #define KEY_F15 185 2941da177e4SLinus Torvalds #define KEY_F16 186 2951da177e4SLinus Torvalds #define KEY_F17 187 2961da177e4SLinus Torvalds #define KEY_F18 188 2971da177e4SLinus Torvalds #define KEY_F19 189 2981da177e4SLinus Torvalds #define KEY_F20 190 2991da177e4SLinus Torvalds #define KEY_F21 191 3001da177e4SLinus Torvalds #define KEY_F22 192 3011da177e4SLinus Torvalds #define KEY_F23 193 3021da177e4SLinus Torvalds #define KEY_F24 194 3031da177e4SLinus Torvalds 3041da177e4SLinus Torvalds #define KEY_PLAYCD 200 3051da177e4SLinus Torvalds #define KEY_PAUSECD 201 3061da177e4SLinus Torvalds #define KEY_PROG3 202 3071da177e4SLinus Torvalds #define KEY_PROG4 203 3081da177e4SLinus Torvalds #define KEY_SUSPEND 205 3091da177e4SLinus Torvalds #define KEY_CLOSE 206 3101da177e4SLinus Torvalds #define KEY_PLAY 207 3111da177e4SLinus Torvalds #define KEY_FASTFORWARD 208 3121da177e4SLinus Torvalds #define KEY_BASSBOOST 209 3131da177e4SLinus Torvalds #define KEY_PRINT 210 3141da177e4SLinus Torvalds #define KEY_HP 211 3151da177e4SLinus Torvalds #define KEY_CAMERA 212 3161da177e4SLinus Torvalds #define KEY_SOUND 213 3171da177e4SLinus Torvalds #define KEY_QUESTION 214 3181da177e4SLinus Torvalds #define KEY_EMAIL 215 3191da177e4SLinus Torvalds #define KEY_CHAT 216 3201da177e4SLinus Torvalds #define KEY_SEARCH 217 3211da177e4SLinus Torvalds #define KEY_CONNECT 218 3221da177e4SLinus Torvalds #define KEY_FINANCE 219 3231da177e4SLinus Torvalds #define KEY_SPORT 220 3241da177e4SLinus Torvalds #define KEY_SHOP 221 3251da177e4SLinus Torvalds #define KEY_ALTERASE 222 3261da177e4SLinus Torvalds #define KEY_CANCEL 223 3271da177e4SLinus Torvalds #define KEY_BRIGHTNESSDOWN 224 3281da177e4SLinus Torvalds #define KEY_BRIGHTNESSUP 225 3291da177e4SLinus Torvalds #define KEY_MEDIA 226 3301da177e4SLinus Torvalds 331*146a4b3bSAndreas Jaggi #define KEY_SWITCHVIDEOMODE 227 332*146a4b3bSAndreas Jaggi #define KEY_KBDILLUMTOGGLE 228 333*146a4b3bSAndreas Jaggi #define KEY_KBDILLUMDOWN 229 334*146a4b3bSAndreas Jaggi #define KEY_KBDILLUMUP 230 335*146a4b3bSAndreas Jaggi 3361da177e4SLinus Torvalds #define KEY_UNKNOWN 240 3371da177e4SLinus Torvalds 3381da177e4SLinus Torvalds #define BTN_MISC 0x100 3391da177e4SLinus Torvalds #define BTN_0 0x100 3401da177e4SLinus Torvalds #define BTN_1 0x101 3411da177e4SLinus Torvalds #define BTN_2 0x102 3421da177e4SLinus Torvalds #define BTN_3 0x103 3431da177e4SLinus Torvalds #define BTN_4 0x104 3441da177e4SLinus Torvalds #define BTN_5 0x105 3451da177e4SLinus Torvalds #define BTN_6 0x106 3461da177e4SLinus Torvalds #define BTN_7 0x107 3471da177e4SLinus Torvalds #define BTN_8 0x108 3481da177e4SLinus Torvalds #define BTN_9 0x109 3491da177e4SLinus Torvalds 3501da177e4SLinus Torvalds #define BTN_MOUSE 0x110 3511da177e4SLinus Torvalds #define BTN_LEFT 0x110 3521da177e4SLinus Torvalds #define BTN_RIGHT 0x111 3531da177e4SLinus Torvalds #define BTN_MIDDLE 0x112 3541da177e4SLinus Torvalds #define BTN_SIDE 0x113 3551da177e4SLinus Torvalds #define BTN_EXTRA 0x114 3561da177e4SLinus Torvalds #define BTN_FORWARD 0x115 3571da177e4SLinus Torvalds #define BTN_BACK 0x116 3581da177e4SLinus Torvalds #define BTN_TASK 0x117 3591da177e4SLinus Torvalds 3601da177e4SLinus Torvalds #define BTN_JOYSTICK 0x120 3611da177e4SLinus Torvalds #define BTN_TRIGGER 0x120 3621da177e4SLinus Torvalds #define BTN_THUMB 0x121 3631da177e4SLinus Torvalds #define BTN_THUMB2 0x122 3641da177e4SLinus Torvalds #define BTN_TOP 0x123 3651da177e4SLinus Torvalds #define BTN_TOP2 0x124 3661da177e4SLinus Torvalds #define BTN_PINKIE 0x125 3671da177e4SLinus Torvalds #define BTN_BASE 0x126 3681da177e4SLinus Torvalds #define BTN_BASE2 0x127 3691da177e4SLinus Torvalds #define BTN_BASE3 0x128 3701da177e4SLinus Torvalds #define BTN_BASE4 0x129 3711da177e4SLinus Torvalds #define BTN_BASE5 0x12a 3721da177e4SLinus Torvalds #define BTN_BASE6 0x12b 3731da177e4SLinus Torvalds #define BTN_DEAD 0x12f 3741da177e4SLinus Torvalds 3751da177e4SLinus Torvalds #define BTN_GAMEPAD 0x130 3761da177e4SLinus Torvalds #define BTN_A 0x130 3771da177e4SLinus Torvalds #define BTN_B 0x131 3781da177e4SLinus Torvalds #define BTN_C 0x132 3791da177e4SLinus Torvalds #define BTN_X 0x133 3801da177e4SLinus Torvalds #define BTN_Y 0x134 3811da177e4SLinus Torvalds #define BTN_Z 0x135 3821da177e4SLinus Torvalds #define BTN_TL 0x136 3831da177e4SLinus Torvalds #define BTN_TR 0x137 3841da177e4SLinus Torvalds #define BTN_TL2 0x138 3851da177e4SLinus Torvalds #define BTN_TR2 0x139 3861da177e4SLinus Torvalds #define BTN_SELECT 0x13a 3871da177e4SLinus Torvalds #define BTN_START 0x13b 3881da177e4SLinus Torvalds #define BTN_MODE 0x13c 3891da177e4SLinus Torvalds #define BTN_THUMBL 0x13d 3901da177e4SLinus Torvalds #define BTN_THUMBR 0x13e 3911da177e4SLinus Torvalds 3921da177e4SLinus Torvalds #define BTN_DIGI 0x140 3931da177e4SLinus Torvalds #define BTN_TOOL_PEN 0x140 3941da177e4SLinus Torvalds #define BTN_TOOL_RUBBER 0x141 3951da177e4SLinus Torvalds #define BTN_TOOL_BRUSH 0x142 3961da177e4SLinus Torvalds #define BTN_TOOL_PENCIL 0x143 3971da177e4SLinus Torvalds #define BTN_TOOL_AIRBRUSH 0x144 3981da177e4SLinus Torvalds #define BTN_TOOL_FINGER 0x145 3991da177e4SLinus Torvalds #define BTN_TOOL_MOUSE 0x146 4001da177e4SLinus Torvalds #define BTN_TOOL_LENS 0x147 4011da177e4SLinus Torvalds #define BTN_TOUCH 0x14a 4021da177e4SLinus Torvalds #define BTN_STYLUS 0x14b 4031da177e4SLinus Torvalds #define BTN_STYLUS2 0x14c 4041da177e4SLinus Torvalds #define BTN_TOOL_DOUBLETAP 0x14d 4051da177e4SLinus Torvalds #define BTN_TOOL_TRIPLETAP 0x14e 4061da177e4SLinus Torvalds 4071da177e4SLinus Torvalds #define BTN_WHEEL 0x150 4081da177e4SLinus Torvalds #define BTN_GEAR_DOWN 0x150 4091da177e4SLinus Torvalds #define BTN_GEAR_UP 0x151 4101da177e4SLinus Torvalds 4111da177e4SLinus Torvalds #define KEY_OK 0x160 4121da177e4SLinus Torvalds #define KEY_SELECT 0x161 4131da177e4SLinus Torvalds #define KEY_GOTO 0x162 4141da177e4SLinus Torvalds #define KEY_CLEAR 0x163 4151da177e4SLinus Torvalds #define KEY_POWER2 0x164 4161da177e4SLinus Torvalds #define KEY_OPTION 0x165 4171da177e4SLinus Torvalds #define KEY_INFO 0x166 4181da177e4SLinus Torvalds #define KEY_TIME 0x167 4191da177e4SLinus Torvalds #define KEY_VENDOR 0x168 4201da177e4SLinus Torvalds #define KEY_ARCHIVE 0x169 4211da177e4SLinus Torvalds #define KEY_PROGRAM 0x16a 4221da177e4SLinus Torvalds #define KEY_CHANNEL 0x16b 4231da177e4SLinus Torvalds #define KEY_FAVORITES 0x16c 4241da177e4SLinus Torvalds #define KEY_EPG 0x16d 4251da177e4SLinus Torvalds #define KEY_PVR 0x16e 4261da177e4SLinus Torvalds #define KEY_MHP 0x16f 4271da177e4SLinus Torvalds #define KEY_LANGUAGE 0x170 4281da177e4SLinus Torvalds #define KEY_TITLE 0x171 4291da177e4SLinus Torvalds #define KEY_SUBTITLE 0x172 4301da177e4SLinus Torvalds #define KEY_ANGLE 0x173 4311da177e4SLinus Torvalds #define KEY_ZOOM 0x174 4321da177e4SLinus Torvalds #define KEY_MODE 0x175 4331da177e4SLinus Torvalds #define KEY_KEYBOARD 0x176 4341da177e4SLinus Torvalds #define KEY_SCREEN 0x177 4351da177e4SLinus Torvalds #define KEY_PC 0x178 4361da177e4SLinus Torvalds #define KEY_TV 0x179 4371da177e4SLinus Torvalds #define KEY_TV2 0x17a 4381da177e4SLinus Torvalds #define KEY_VCR 0x17b 4391da177e4SLinus Torvalds #define KEY_VCR2 0x17c 4401da177e4SLinus Torvalds #define KEY_SAT 0x17d 4411da177e4SLinus Torvalds #define KEY_SAT2 0x17e 4421da177e4SLinus Torvalds #define KEY_CD 0x17f 4431da177e4SLinus Torvalds #define KEY_TAPE 0x180 4441da177e4SLinus Torvalds #define KEY_RADIO 0x181 4451da177e4SLinus Torvalds #define KEY_TUNER 0x182 4461da177e4SLinus Torvalds #define KEY_PLAYER 0x183 4471da177e4SLinus Torvalds #define KEY_TEXT 0x184 4481da177e4SLinus Torvalds #define KEY_DVD 0x185 4491da177e4SLinus Torvalds #define KEY_AUX 0x186 4501da177e4SLinus Torvalds #define KEY_MP3 0x187 4511da177e4SLinus Torvalds #define KEY_AUDIO 0x188 4521da177e4SLinus Torvalds #define KEY_VIDEO 0x189 4531da177e4SLinus Torvalds #define KEY_DIRECTORY 0x18a 4541da177e4SLinus Torvalds #define KEY_LIST 0x18b 4551da177e4SLinus Torvalds #define KEY_MEMO 0x18c 4561da177e4SLinus Torvalds #define KEY_CALENDAR 0x18d 4571da177e4SLinus Torvalds #define KEY_RED 0x18e 4581da177e4SLinus Torvalds #define KEY_GREEN 0x18f 4591da177e4SLinus Torvalds #define KEY_YELLOW 0x190 4601da177e4SLinus Torvalds #define KEY_BLUE 0x191 4611da177e4SLinus Torvalds #define KEY_CHANNELUP 0x192 4621da177e4SLinus Torvalds #define KEY_CHANNELDOWN 0x193 4631da177e4SLinus Torvalds #define KEY_FIRST 0x194 4641da177e4SLinus Torvalds #define KEY_LAST 0x195 4651da177e4SLinus Torvalds #define KEY_AB 0x196 4661da177e4SLinus Torvalds #define KEY_NEXT 0x197 4671da177e4SLinus Torvalds #define KEY_RESTART 0x198 4681da177e4SLinus Torvalds #define KEY_SLOW 0x199 4691da177e4SLinus Torvalds #define KEY_SHUFFLE 0x19a 4701da177e4SLinus Torvalds #define KEY_BREAK 0x19b 4711da177e4SLinus Torvalds #define KEY_PREVIOUS 0x19c 4721da177e4SLinus Torvalds #define KEY_DIGITS 0x19d 4731da177e4SLinus Torvalds #define KEY_TEEN 0x19e 4741da177e4SLinus Torvalds #define KEY_TWEN 0x19f 4751da177e4SLinus Torvalds 4761da177e4SLinus Torvalds #define KEY_DEL_EOL 0x1c0 4771da177e4SLinus Torvalds #define KEY_DEL_EOS 0x1c1 4781da177e4SLinus Torvalds #define KEY_INS_LINE 0x1c2 4791da177e4SLinus Torvalds #define KEY_DEL_LINE 0x1c3 4801da177e4SLinus Torvalds 4811da177e4SLinus Torvalds #define KEY_FN 0x1d0 4821da177e4SLinus Torvalds #define KEY_FN_ESC 0x1d1 4831da177e4SLinus Torvalds #define KEY_FN_F1 0x1d2 4841da177e4SLinus Torvalds #define KEY_FN_F2 0x1d3 4851da177e4SLinus Torvalds #define KEY_FN_F3 0x1d4 4861da177e4SLinus Torvalds #define KEY_FN_F4 0x1d5 4871da177e4SLinus Torvalds #define KEY_FN_F5 0x1d6 4881da177e4SLinus Torvalds #define KEY_FN_F6 0x1d7 4891da177e4SLinus Torvalds #define KEY_FN_F7 0x1d8 4901da177e4SLinus Torvalds #define KEY_FN_F8 0x1d9 4911da177e4SLinus Torvalds #define KEY_FN_F9 0x1da 4921da177e4SLinus Torvalds #define KEY_FN_F10 0x1db 4931da177e4SLinus Torvalds #define KEY_FN_F11 0x1dc 4941da177e4SLinus Torvalds #define KEY_FN_F12 0x1dd 4951da177e4SLinus Torvalds #define KEY_FN_1 0x1de 4961da177e4SLinus Torvalds #define KEY_FN_2 0x1df 4971da177e4SLinus Torvalds #define KEY_FN_D 0x1e0 4981da177e4SLinus Torvalds #define KEY_FN_E 0x1e1 4991da177e4SLinus Torvalds #define KEY_FN_F 0x1e2 5001da177e4SLinus Torvalds #define KEY_FN_S 0x1e3 5011da177e4SLinus Torvalds #define KEY_FN_B 0x1e4 5021da177e4SLinus Torvalds 5031da177e4SLinus Torvalds #define KEY_MAX 0x1ff 5041da177e4SLinus Torvalds 5051da177e4SLinus Torvalds /* 5061da177e4SLinus Torvalds * Relative axes 5071da177e4SLinus Torvalds */ 5081da177e4SLinus Torvalds 5091da177e4SLinus Torvalds #define REL_X 0x00 5101da177e4SLinus Torvalds #define REL_Y 0x01 5111da177e4SLinus Torvalds #define REL_Z 0x02 5121da177e4SLinus Torvalds #define REL_RX 0x03 5131da177e4SLinus Torvalds #define REL_RY 0x04 5141da177e4SLinus Torvalds #define REL_RZ 0x05 5151da177e4SLinus Torvalds #define REL_HWHEEL 0x06 5161da177e4SLinus Torvalds #define REL_DIAL 0x07 5171da177e4SLinus Torvalds #define REL_WHEEL 0x08 5181da177e4SLinus Torvalds #define REL_MISC 0x09 5191da177e4SLinus Torvalds #define REL_MAX 0x0f 5201da177e4SLinus Torvalds 5211da177e4SLinus Torvalds /* 5221da177e4SLinus Torvalds * Absolute axes 5231da177e4SLinus Torvalds */ 5241da177e4SLinus Torvalds 5251da177e4SLinus Torvalds #define ABS_X 0x00 5261da177e4SLinus Torvalds #define ABS_Y 0x01 5271da177e4SLinus Torvalds #define ABS_Z 0x02 5281da177e4SLinus Torvalds #define ABS_RX 0x03 5291da177e4SLinus Torvalds #define ABS_RY 0x04 5301da177e4SLinus Torvalds #define ABS_RZ 0x05 5311da177e4SLinus Torvalds #define ABS_THROTTLE 0x06 5321da177e4SLinus Torvalds #define ABS_RUDDER 0x07 5331da177e4SLinus Torvalds #define ABS_WHEEL 0x08 5341da177e4SLinus Torvalds #define ABS_GAS 0x09 5351da177e4SLinus Torvalds #define ABS_BRAKE 0x0a 5361da177e4SLinus Torvalds #define ABS_HAT0X 0x10 5371da177e4SLinus Torvalds #define ABS_HAT0Y 0x11 5381da177e4SLinus Torvalds #define ABS_HAT1X 0x12 5391da177e4SLinus Torvalds #define ABS_HAT1Y 0x13 5401da177e4SLinus Torvalds #define ABS_HAT2X 0x14 5411da177e4SLinus Torvalds #define ABS_HAT2Y 0x15 5421da177e4SLinus Torvalds #define ABS_HAT3X 0x16 5431da177e4SLinus Torvalds #define ABS_HAT3Y 0x17 5441da177e4SLinus Torvalds #define ABS_PRESSURE 0x18 5451da177e4SLinus Torvalds #define ABS_DISTANCE 0x19 5461da177e4SLinus Torvalds #define ABS_TILT_X 0x1a 5471da177e4SLinus Torvalds #define ABS_TILT_Y 0x1b 5481da177e4SLinus Torvalds #define ABS_TOOL_WIDTH 0x1c 5491da177e4SLinus Torvalds #define ABS_VOLUME 0x20 5501da177e4SLinus Torvalds #define ABS_MISC 0x28 5511da177e4SLinus Torvalds #define ABS_MAX 0x3f 5521da177e4SLinus Torvalds 5531da177e4SLinus Torvalds /* 5541da177e4SLinus Torvalds * Misc events 5551da177e4SLinus Torvalds */ 5561da177e4SLinus Torvalds 5571da177e4SLinus Torvalds #define MSC_SERIAL 0x00 5581da177e4SLinus Torvalds #define MSC_PULSELED 0x01 5591da177e4SLinus Torvalds #define MSC_GESTURE 0x02 5601da177e4SLinus Torvalds #define MSC_RAW 0x03 5611da177e4SLinus Torvalds #define MSC_SCAN 0x04 5621da177e4SLinus Torvalds #define MSC_MAX 0x07 5631da177e4SLinus Torvalds 5641da177e4SLinus Torvalds /* 5651da177e4SLinus Torvalds * LEDs 5661da177e4SLinus Torvalds */ 5671da177e4SLinus Torvalds 5681da177e4SLinus Torvalds #define LED_NUML 0x00 5691da177e4SLinus Torvalds #define LED_CAPSL 0x01 5701da177e4SLinus Torvalds #define LED_SCROLLL 0x02 5711da177e4SLinus Torvalds #define LED_COMPOSE 0x03 5721da177e4SLinus Torvalds #define LED_KANA 0x04 5731da177e4SLinus Torvalds #define LED_SLEEP 0x05 5741da177e4SLinus Torvalds #define LED_SUSPEND 0x06 5751da177e4SLinus Torvalds #define LED_MUTE 0x07 5761da177e4SLinus Torvalds #define LED_MISC 0x08 5771da177e4SLinus Torvalds #define LED_MAIL 0x09 5781da177e4SLinus Torvalds #define LED_CHARGING 0x0a 5791da177e4SLinus Torvalds #define LED_MAX 0x0f 5801da177e4SLinus Torvalds 5811da177e4SLinus Torvalds /* 5821da177e4SLinus Torvalds * Autorepeat values 5831da177e4SLinus Torvalds */ 5841da177e4SLinus Torvalds 5851da177e4SLinus Torvalds #define REP_DELAY 0x00 5861da177e4SLinus Torvalds #define REP_PERIOD 0x01 5871da177e4SLinus Torvalds #define REP_MAX 0x01 5881da177e4SLinus Torvalds 5891da177e4SLinus Torvalds /* 5901da177e4SLinus Torvalds * Sounds 5911da177e4SLinus Torvalds */ 5921da177e4SLinus Torvalds 5931da177e4SLinus Torvalds #define SND_CLICK 0x00 5941da177e4SLinus Torvalds #define SND_BELL 0x01 5951da177e4SLinus Torvalds #define SND_TONE 0x02 5961da177e4SLinus Torvalds #define SND_MAX 0x07 5971da177e4SLinus Torvalds 5981da177e4SLinus Torvalds /* 5991da177e4SLinus Torvalds * IDs. 6001da177e4SLinus Torvalds */ 6011da177e4SLinus Torvalds 6021da177e4SLinus Torvalds #define ID_BUS 0 6031da177e4SLinus Torvalds #define ID_VENDOR 1 6041da177e4SLinus Torvalds #define ID_PRODUCT 2 6051da177e4SLinus Torvalds #define ID_VERSION 3 6061da177e4SLinus Torvalds 6071da177e4SLinus Torvalds #define BUS_PCI 0x01 6081da177e4SLinus Torvalds #define BUS_ISAPNP 0x02 6091da177e4SLinus Torvalds #define BUS_USB 0x03 6101da177e4SLinus Torvalds #define BUS_HIL 0x04 6111da177e4SLinus Torvalds #define BUS_BLUETOOTH 0x05 6121da177e4SLinus Torvalds 6131da177e4SLinus Torvalds #define BUS_ISA 0x10 6141da177e4SLinus Torvalds #define BUS_I8042 0x11 6151da177e4SLinus Torvalds #define BUS_XTKBD 0x12 6161da177e4SLinus Torvalds #define BUS_RS232 0x13 6171da177e4SLinus Torvalds #define BUS_GAMEPORT 0x14 6181da177e4SLinus Torvalds #define BUS_PARPORT 0x15 6191da177e4SLinus Torvalds #define BUS_AMIGA 0x16 6201da177e4SLinus Torvalds #define BUS_ADB 0x17 6211da177e4SLinus Torvalds #define BUS_I2C 0x18 6221da177e4SLinus Torvalds #define BUS_HOST 0x19 6231da177e4SLinus Torvalds 6241da177e4SLinus Torvalds /* 6251da177e4SLinus Torvalds * Values describing the status of an effect 6261da177e4SLinus Torvalds */ 6271da177e4SLinus Torvalds #define FF_STATUS_STOPPED 0x00 6281da177e4SLinus Torvalds #define FF_STATUS_PLAYING 0x01 6291da177e4SLinus Torvalds #define FF_STATUS_MAX 0x01 6301da177e4SLinus Torvalds 6311da177e4SLinus Torvalds /* 6321da177e4SLinus Torvalds * Structures used in ioctls to upload effects to a device 6331da177e4SLinus Torvalds * The first structures are not passed directly by using ioctls. 6341da177e4SLinus Torvalds * They are sub-structures of the actually sent structure (called ff_effect) 6351da177e4SLinus Torvalds */ 6361da177e4SLinus Torvalds 6371da177e4SLinus Torvalds struct ff_replay { 6381da177e4SLinus Torvalds __u16 length; /* Duration of an effect in ms. All other times are also expressed in ms */ 6391da177e4SLinus Torvalds __u16 delay; /* Time to wait before to start playing an effect */ 6401da177e4SLinus Torvalds }; 6411da177e4SLinus Torvalds 6421da177e4SLinus Torvalds struct ff_trigger { 6431da177e4SLinus Torvalds __u16 button; /* Number of button triggering an effect */ 6441da177e4SLinus Torvalds __u16 interval; /* Time to wait before an effect can be re-triggered (ms) */ 6451da177e4SLinus Torvalds }; 6461da177e4SLinus Torvalds 6471da177e4SLinus Torvalds struct ff_envelope { 6481da177e4SLinus Torvalds __u16 attack_length; /* Duration of attack (ms) */ 6491da177e4SLinus Torvalds __u16 attack_level; /* Level at beginning of attack */ 6501da177e4SLinus Torvalds __u16 fade_length; /* Duration of fade (ms) */ 6511da177e4SLinus Torvalds __u16 fade_level; /* Level at end of fade */ 6521da177e4SLinus Torvalds }; 6531da177e4SLinus Torvalds 6541da177e4SLinus Torvalds /* FF_CONSTANT */ 6551da177e4SLinus Torvalds struct ff_constant_effect { 6561da177e4SLinus Torvalds __s16 level; /* Strength of effect. Negative values are OK */ 6571da177e4SLinus Torvalds struct ff_envelope envelope; 6581da177e4SLinus Torvalds }; 6591da177e4SLinus Torvalds 6601da177e4SLinus Torvalds /* FF_RAMP */ 6611da177e4SLinus Torvalds struct ff_ramp_effect { 6621da177e4SLinus Torvalds __s16 start_level; 6631da177e4SLinus Torvalds __s16 end_level; 6641da177e4SLinus Torvalds struct ff_envelope envelope; 6651da177e4SLinus Torvalds }; 6661da177e4SLinus Torvalds 6671da177e4SLinus Torvalds /* FF_SPRING of FF_FRICTION */ 6681da177e4SLinus Torvalds struct ff_condition_effect { 6691da177e4SLinus Torvalds __u16 right_saturation; /* Max level when joystick is on the right */ 6701da177e4SLinus Torvalds __u16 left_saturation; /* Max level when joystick in on the left */ 6711da177e4SLinus Torvalds 6721da177e4SLinus Torvalds __s16 right_coeff; /* Indicates how fast the force grows when the 6731da177e4SLinus Torvalds joystick moves to the right */ 6741da177e4SLinus Torvalds __s16 left_coeff; /* Same for left side */ 6751da177e4SLinus Torvalds 6761da177e4SLinus Torvalds __u16 deadband; /* Size of area where no force is produced */ 6771da177e4SLinus Torvalds __s16 center; /* Position of dead zone */ 6781da177e4SLinus Torvalds 6791da177e4SLinus Torvalds }; 6801da177e4SLinus Torvalds 6811da177e4SLinus Torvalds /* FF_PERIODIC */ 6821da177e4SLinus Torvalds struct ff_periodic_effect { 6831da177e4SLinus Torvalds __u16 waveform; /* Kind of wave (sine, square...) */ 6841da177e4SLinus Torvalds __u16 period; /* in ms */ 6851da177e4SLinus Torvalds __s16 magnitude; /* Peak value */ 6861da177e4SLinus Torvalds __s16 offset; /* Mean value of wave (roughly) */ 6871da177e4SLinus Torvalds __u16 phase; /* 'Horizontal' shift */ 6881da177e4SLinus Torvalds 6891da177e4SLinus Torvalds struct ff_envelope envelope; 6901da177e4SLinus Torvalds 6911da177e4SLinus Torvalds /* Only used if waveform == FF_CUSTOM */ 6921da177e4SLinus Torvalds __u32 custom_len; /* Number of samples */ 6931da177e4SLinus Torvalds __s16 *custom_data; /* Buffer of samples */ 6941da177e4SLinus Torvalds /* Note: the data pointed by custom_data is copied by the driver. You can 6951da177e4SLinus Torvalds * therefore dispose of the memory after the upload/update */ 6961da177e4SLinus Torvalds }; 6971da177e4SLinus Torvalds 6981da177e4SLinus Torvalds /* FF_RUMBLE */ 6991da177e4SLinus Torvalds /* Some rumble pads have two motors of different weight. 7001da177e4SLinus Torvalds strong_magnitude represents the magnitude of the vibration generated 7011da177e4SLinus Torvalds by the heavy motor. 7021da177e4SLinus Torvalds */ 7031da177e4SLinus Torvalds struct ff_rumble_effect { 7041da177e4SLinus Torvalds __u16 strong_magnitude; /* Magnitude of the heavy motor */ 7051da177e4SLinus Torvalds __u16 weak_magnitude; /* Magnitude of the light one */ 7061da177e4SLinus Torvalds }; 7071da177e4SLinus Torvalds 7081da177e4SLinus Torvalds /* 7091da177e4SLinus Torvalds * Structure sent through ioctl from the application to the driver 7101da177e4SLinus Torvalds */ 7111da177e4SLinus Torvalds struct ff_effect { 7121da177e4SLinus Torvalds __u16 type; 7131da177e4SLinus Torvalds /* Following field denotes the unique id assigned to an effect. 7141da177e4SLinus Torvalds * If user sets if to -1, a new effect is created, and its id is returned in the same field 7151da177e4SLinus Torvalds * Else, the user sets it to the effect id it wants to update. 7161da177e4SLinus Torvalds */ 7171da177e4SLinus Torvalds __s16 id; 7181da177e4SLinus Torvalds 7191da177e4SLinus Torvalds __u16 direction; /* Direction. 0 deg -> 0x0000 (down) 7201da177e4SLinus Torvalds 90 deg -> 0x4000 (left) 7211da177e4SLinus Torvalds 180 deg -> 0x8000 (up) 7221da177e4SLinus Torvalds 270 deg -> 0xC000 (right) 7231da177e4SLinus Torvalds */ 7241da177e4SLinus Torvalds 7251da177e4SLinus Torvalds struct ff_trigger trigger; 7261da177e4SLinus Torvalds struct ff_replay replay; 7271da177e4SLinus Torvalds 7281da177e4SLinus Torvalds union { 7291da177e4SLinus Torvalds struct ff_constant_effect constant; 7301da177e4SLinus Torvalds struct ff_ramp_effect ramp; 7311da177e4SLinus Torvalds struct ff_periodic_effect periodic; 7321da177e4SLinus Torvalds struct ff_condition_effect condition[2]; /* One for each axis */ 7331da177e4SLinus Torvalds struct ff_rumble_effect rumble; 7341da177e4SLinus Torvalds } u; 7351da177e4SLinus Torvalds }; 7361da177e4SLinus Torvalds 7371da177e4SLinus Torvalds /* 7381da177e4SLinus Torvalds * Force feedback effect types 7391da177e4SLinus Torvalds */ 7401da177e4SLinus Torvalds 7411da177e4SLinus Torvalds #define FF_RUMBLE 0x50 7421da177e4SLinus Torvalds #define FF_PERIODIC 0x51 7431da177e4SLinus Torvalds #define FF_CONSTANT 0x52 7441da177e4SLinus Torvalds #define FF_SPRING 0x53 7451da177e4SLinus Torvalds #define FF_FRICTION 0x54 7461da177e4SLinus Torvalds #define FF_DAMPER 0x55 7471da177e4SLinus Torvalds #define FF_INERTIA 0x56 7481da177e4SLinus Torvalds #define FF_RAMP 0x57 7491da177e4SLinus Torvalds 7501da177e4SLinus Torvalds /* 7511da177e4SLinus Torvalds * Force feedback periodic effect types 7521da177e4SLinus Torvalds */ 7531da177e4SLinus Torvalds 7541da177e4SLinus Torvalds #define FF_SQUARE 0x58 7551da177e4SLinus Torvalds #define FF_TRIANGLE 0x59 7561da177e4SLinus Torvalds #define FF_SINE 0x5a 7571da177e4SLinus Torvalds #define FF_SAW_UP 0x5b 7581da177e4SLinus Torvalds #define FF_SAW_DOWN 0x5c 7591da177e4SLinus Torvalds #define FF_CUSTOM 0x5d 7601da177e4SLinus Torvalds 7611da177e4SLinus Torvalds /* 7621da177e4SLinus Torvalds * Set ff device properties 7631da177e4SLinus Torvalds */ 7641da177e4SLinus Torvalds 7651da177e4SLinus Torvalds #define FF_GAIN 0x60 7661da177e4SLinus Torvalds #define FF_AUTOCENTER 0x61 7671da177e4SLinus Torvalds 7681da177e4SLinus Torvalds #define FF_MAX 0x7f 7691da177e4SLinus Torvalds 7701da177e4SLinus Torvalds #ifdef __KERNEL__ 7711da177e4SLinus Torvalds 7721da177e4SLinus Torvalds /* 7731da177e4SLinus Torvalds * In-kernel definitions. 7741da177e4SLinus Torvalds */ 7751da177e4SLinus Torvalds 7761da177e4SLinus Torvalds #include <linux/fs.h> 7771da177e4SLinus Torvalds #include <linux/timer.h> 7781da177e4SLinus Torvalds 7791da177e4SLinus Torvalds #define NBITS(x) (((x)/BITS_PER_LONG)+1) 7801da177e4SLinus Torvalds #define BIT(x) (1UL<<((x)%BITS_PER_LONG)) 7811da177e4SLinus Torvalds #define LONG(x) ((x)/BITS_PER_LONG) 7821da177e4SLinus Torvalds 7831da177e4SLinus Torvalds #define INPUT_KEYCODE(dev, scancode) ((dev->keycodesize == 1) ? ((u8*)dev->keycode)[scancode] : \ 7841da177e4SLinus Torvalds ((dev->keycodesize == 2) ? ((u16*)dev->keycode)[scancode] : (((u32*)dev->keycode)[scancode]))) 7851da177e4SLinus Torvalds 7861da177e4SLinus Torvalds #define SET_INPUT_KEYCODE(dev, scancode, val) \ 7871da177e4SLinus Torvalds ({ unsigned __old; \ 7881da177e4SLinus Torvalds switch (dev->keycodesize) { \ 7891da177e4SLinus Torvalds case 1: { \ 7901da177e4SLinus Torvalds u8 *k = (u8 *)dev->keycode; \ 7911da177e4SLinus Torvalds __old = k[scancode]; \ 7921da177e4SLinus Torvalds k[scancode] = val; \ 7931da177e4SLinus Torvalds break; \ 7941da177e4SLinus Torvalds } \ 7951da177e4SLinus Torvalds case 2: { \ 7961da177e4SLinus Torvalds u16 *k = (u16 *)dev->keycode; \ 7971da177e4SLinus Torvalds __old = k[scancode]; \ 7981da177e4SLinus Torvalds k[scancode] = val; \ 7991da177e4SLinus Torvalds break; \ 8001da177e4SLinus Torvalds } \ 8011da177e4SLinus Torvalds default: { \ 8021da177e4SLinus Torvalds u32 *k = (u32 *)dev->keycode; \ 8031da177e4SLinus Torvalds __old = k[scancode]; \ 8041da177e4SLinus Torvalds k[scancode] = val; \ 8051da177e4SLinus Torvalds break; \ 8061da177e4SLinus Torvalds } \ 8071da177e4SLinus Torvalds } \ 8081da177e4SLinus Torvalds __old; }) 8091da177e4SLinus Torvalds 8101da177e4SLinus Torvalds struct input_dev { 8111da177e4SLinus Torvalds 8121da177e4SLinus Torvalds void *private; 8131da177e4SLinus Torvalds 8141da177e4SLinus Torvalds char *name; 8151da177e4SLinus Torvalds char *phys; 8161da177e4SLinus Torvalds char *uniq; 8171da177e4SLinus Torvalds struct input_id id; 8181da177e4SLinus Torvalds 8191da177e4SLinus Torvalds unsigned long evbit[NBITS(EV_MAX)]; 8201da177e4SLinus Torvalds unsigned long keybit[NBITS(KEY_MAX)]; 8211da177e4SLinus Torvalds unsigned long relbit[NBITS(REL_MAX)]; 8221da177e4SLinus Torvalds unsigned long absbit[NBITS(ABS_MAX)]; 8231da177e4SLinus Torvalds unsigned long mscbit[NBITS(MSC_MAX)]; 8241da177e4SLinus Torvalds unsigned long ledbit[NBITS(LED_MAX)]; 8251da177e4SLinus Torvalds unsigned long sndbit[NBITS(SND_MAX)]; 8261da177e4SLinus Torvalds unsigned long ffbit[NBITS(FF_MAX)]; 8271da177e4SLinus Torvalds int ff_effects_max; 8281da177e4SLinus Torvalds 8291da177e4SLinus Torvalds unsigned int keycodemax; 8301da177e4SLinus Torvalds unsigned int keycodesize; 8311da177e4SLinus Torvalds void *keycode; 8321da177e4SLinus Torvalds 8331da177e4SLinus Torvalds unsigned int repeat_key; 8341da177e4SLinus Torvalds struct timer_list timer; 8351da177e4SLinus Torvalds 8361da177e4SLinus Torvalds struct pt_regs *regs; 8371da177e4SLinus Torvalds int state; 8381da177e4SLinus Torvalds 8391da177e4SLinus Torvalds int sync; 8401da177e4SLinus Torvalds 8411da177e4SLinus Torvalds int abs[ABS_MAX + 1]; 8421da177e4SLinus Torvalds int rep[REP_MAX + 1]; 8431da177e4SLinus Torvalds 8441da177e4SLinus Torvalds unsigned long key[NBITS(KEY_MAX)]; 8451da177e4SLinus Torvalds unsigned long led[NBITS(LED_MAX)]; 8461da177e4SLinus Torvalds unsigned long snd[NBITS(SND_MAX)]; 8471da177e4SLinus Torvalds 8481da177e4SLinus Torvalds int absmax[ABS_MAX + 1]; 8491da177e4SLinus Torvalds int absmin[ABS_MAX + 1]; 8501da177e4SLinus Torvalds int absfuzz[ABS_MAX + 1]; 8511da177e4SLinus Torvalds int absflat[ABS_MAX + 1]; 8521da177e4SLinus Torvalds 8531da177e4SLinus Torvalds int (*open)(struct input_dev *dev); 8541da177e4SLinus Torvalds void (*close)(struct input_dev *dev); 8551da177e4SLinus Torvalds int (*accept)(struct input_dev *dev, struct file *file); 8561da177e4SLinus Torvalds int (*flush)(struct input_dev *dev, struct file *file); 8571da177e4SLinus Torvalds int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value); 8581da177e4SLinus Torvalds int (*upload_effect)(struct input_dev *dev, struct ff_effect *effect); 8591da177e4SLinus Torvalds int (*erase_effect)(struct input_dev *dev, int effect_id); 8601da177e4SLinus Torvalds 8611da177e4SLinus Torvalds struct input_handle *grab; 8621da177e4SLinus Torvalds struct device *dev; 8631da177e4SLinus Torvalds 8641da177e4SLinus Torvalds struct list_head h_list; 8651da177e4SLinus Torvalds struct list_head node; 8661da177e4SLinus Torvalds }; 8671da177e4SLinus Torvalds 8681da177e4SLinus Torvalds /* 8691da177e4SLinus Torvalds * Structure for hotplug & device<->driver matching. 8701da177e4SLinus Torvalds */ 8711da177e4SLinus Torvalds 8721da177e4SLinus Torvalds #define INPUT_DEVICE_ID_MATCH_BUS 1 8731da177e4SLinus Torvalds #define INPUT_DEVICE_ID_MATCH_VENDOR 2 8741da177e4SLinus Torvalds #define INPUT_DEVICE_ID_MATCH_PRODUCT 4 8751da177e4SLinus Torvalds #define INPUT_DEVICE_ID_MATCH_VERSION 8 8761da177e4SLinus Torvalds 8771da177e4SLinus Torvalds #define INPUT_DEVICE_ID_MATCH_EVBIT 0x010 8781da177e4SLinus Torvalds #define INPUT_DEVICE_ID_MATCH_KEYBIT 0x020 8791da177e4SLinus Torvalds #define INPUT_DEVICE_ID_MATCH_RELBIT 0x040 8801da177e4SLinus Torvalds #define INPUT_DEVICE_ID_MATCH_ABSBIT 0x080 8811da177e4SLinus Torvalds #define INPUT_DEVICE_ID_MATCH_MSCIT 0x100 8821da177e4SLinus Torvalds #define INPUT_DEVICE_ID_MATCH_LEDBIT 0x200 8831da177e4SLinus Torvalds #define INPUT_DEVICE_ID_MATCH_SNDBIT 0x400 8841da177e4SLinus Torvalds #define INPUT_DEVICE_ID_MATCH_FFBIT 0x800 8851da177e4SLinus Torvalds 8861da177e4SLinus Torvalds #define INPUT_DEVICE_ID_MATCH_DEVICE\ 8871da177e4SLinus Torvalds (INPUT_DEVICE_ID_MATCH_BUS | INPUT_DEVICE_ID_MATCH_VENDOR | INPUT_DEVICE_ID_MATCH_PRODUCT) 8881da177e4SLinus Torvalds #define INPUT_DEVICE_ID_MATCH_DEVICE_AND_VERSION\ 8891da177e4SLinus Torvalds (INPUT_DEVICE_ID_MATCH_DEVICE | INPUT_DEVICE_ID_MATCH_VERSION) 8901da177e4SLinus Torvalds 8911da177e4SLinus Torvalds struct input_device_id { 8921da177e4SLinus Torvalds 8931da177e4SLinus Torvalds unsigned long flags; 8941da177e4SLinus Torvalds 8951da177e4SLinus Torvalds struct input_id id; 8961da177e4SLinus Torvalds 8971da177e4SLinus Torvalds unsigned long evbit[NBITS(EV_MAX)]; 8981da177e4SLinus Torvalds unsigned long keybit[NBITS(KEY_MAX)]; 8991da177e4SLinus Torvalds unsigned long relbit[NBITS(REL_MAX)]; 9001da177e4SLinus Torvalds unsigned long absbit[NBITS(ABS_MAX)]; 9011da177e4SLinus Torvalds unsigned long mscbit[NBITS(MSC_MAX)]; 9021da177e4SLinus Torvalds unsigned long ledbit[NBITS(LED_MAX)]; 9031da177e4SLinus Torvalds unsigned long sndbit[NBITS(SND_MAX)]; 9041da177e4SLinus Torvalds unsigned long ffbit[NBITS(FF_MAX)]; 9051da177e4SLinus Torvalds 9061da177e4SLinus Torvalds unsigned long driver_info; 9071da177e4SLinus Torvalds }; 9081da177e4SLinus Torvalds 9091da177e4SLinus Torvalds struct input_handle; 9101da177e4SLinus Torvalds 9111da177e4SLinus Torvalds struct input_handler { 9121da177e4SLinus Torvalds 9131da177e4SLinus Torvalds void *private; 9141da177e4SLinus Torvalds 9151da177e4SLinus Torvalds void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value); 9161da177e4SLinus Torvalds struct input_handle* (*connect)(struct input_handler *handler, struct input_dev *dev, struct input_device_id *id); 9171da177e4SLinus Torvalds void (*disconnect)(struct input_handle *handle); 9181da177e4SLinus Torvalds 9191da177e4SLinus Torvalds struct file_operations *fops; 9201da177e4SLinus Torvalds int minor; 9211da177e4SLinus Torvalds char *name; 9221da177e4SLinus Torvalds 9231da177e4SLinus Torvalds struct input_device_id *id_table; 9241da177e4SLinus Torvalds struct input_device_id *blacklist; 9251da177e4SLinus Torvalds 9261da177e4SLinus Torvalds struct list_head h_list; 9271da177e4SLinus Torvalds struct list_head node; 9281da177e4SLinus Torvalds }; 9291da177e4SLinus Torvalds 9301da177e4SLinus Torvalds struct input_handle { 9311da177e4SLinus Torvalds 9321da177e4SLinus Torvalds void *private; 9331da177e4SLinus Torvalds 9341da177e4SLinus Torvalds int open; 9351da177e4SLinus Torvalds char *name; 9361da177e4SLinus Torvalds 9371da177e4SLinus Torvalds struct input_dev *dev; 9381da177e4SLinus Torvalds struct input_handler *handler; 9391da177e4SLinus Torvalds 9401da177e4SLinus Torvalds struct list_head d_node; 9411da177e4SLinus Torvalds struct list_head h_node; 9421da177e4SLinus Torvalds }; 9431da177e4SLinus Torvalds 9441da177e4SLinus Torvalds #define to_dev(n) container_of(n,struct input_dev,node) 9451da177e4SLinus Torvalds #define to_handler(n) container_of(n,struct input_handler,node); 9461da177e4SLinus Torvalds #define to_handle(n) container_of(n,struct input_handle,d_node) 9471da177e4SLinus Torvalds #define to_handle_h(n) container_of(n,struct input_handle,h_node) 9481da177e4SLinus Torvalds 9491da177e4SLinus Torvalds static inline void init_input_dev(struct input_dev *dev) 9501da177e4SLinus Torvalds { 9511da177e4SLinus Torvalds INIT_LIST_HEAD(&dev->h_list); 9521da177e4SLinus Torvalds INIT_LIST_HEAD(&dev->node); 9531da177e4SLinus Torvalds } 9541da177e4SLinus Torvalds 9551da177e4SLinus Torvalds void input_register_device(struct input_dev *); 9561da177e4SLinus Torvalds void input_unregister_device(struct input_dev *); 9571da177e4SLinus Torvalds 9581da177e4SLinus Torvalds void input_register_handler(struct input_handler *); 9591da177e4SLinus Torvalds void input_unregister_handler(struct input_handler *); 9601da177e4SLinus Torvalds 9611da177e4SLinus Torvalds int input_grab_device(struct input_handle *); 9621da177e4SLinus Torvalds void input_release_device(struct input_handle *); 9631da177e4SLinus Torvalds 9641da177e4SLinus Torvalds int input_open_device(struct input_handle *); 9651da177e4SLinus Torvalds void input_close_device(struct input_handle *); 9661da177e4SLinus Torvalds 9671da177e4SLinus Torvalds int input_accept_process(struct input_handle *handle, struct file *file); 9681da177e4SLinus Torvalds int input_flush_device(struct input_handle* handle, struct file* file); 9691da177e4SLinus Torvalds 9701da177e4SLinus Torvalds void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value); 9711da177e4SLinus Torvalds 9721da177e4SLinus Torvalds static inline void input_report_key(struct input_dev *dev, unsigned int code, int value) 9731da177e4SLinus Torvalds { 9741da177e4SLinus Torvalds input_event(dev, EV_KEY, code, !!value); 9751da177e4SLinus Torvalds } 9761da177e4SLinus Torvalds 9771da177e4SLinus Torvalds static inline void input_report_rel(struct input_dev *dev, unsigned int code, int value) 9781da177e4SLinus Torvalds { 9791da177e4SLinus Torvalds input_event(dev, EV_REL, code, value); 9801da177e4SLinus Torvalds } 9811da177e4SLinus Torvalds 9821da177e4SLinus Torvalds static inline void input_report_abs(struct input_dev *dev, unsigned int code, int value) 9831da177e4SLinus Torvalds { 9841da177e4SLinus Torvalds input_event(dev, EV_ABS, code, value); 9851da177e4SLinus Torvalds } 9861da177e4SLinus Torvalds 9871da177e4SLinus Torvalds static inline void input_report_ff(struct input_dev *dev, unsigned int code, int value) 9881da177e4SLinus Torvalds { 9891da177e4SLinus Torvalds input_event(dev, EV_FF, code, value); 9901da177e4SLinus Torvalds } 9911da177e4SLinus Torvalds 9921da177e4SLinus Torvalds static inline void input_report_ff_status(struct input_dev *dev, unsigned int code, int value) 9931da177e4SLinus Torvalds { 9941da177e4SLinus Torvalds input_event(dev, EV_FF_STATUS, code, value); 9951da177e4SLinus Torvalds } 9961da177e4SLinus Torvalds 9971da177e4SLinus Torvalds static inline void input_regs(struct input_dev *dev, struct pt_regs *regs) 9981da177e4SLinus Torvalds { 9991da177e4SLinus Torvalds dev->regs = regs; 10001da177e4SLinus Torvalds } 10011da177e4SLinus Torvalds 10021da177e4SLinus Torvalds static inline void input_sync(struct input_dev *dev) 10031da177e4SLinus Torvalds { 10041da177e4SLinus Torvalds input_event(dev, EV_SYN, SYN_REPORT, 0); 10051da177e4SLinus Torvalds dev->regs = NULL; 10061da177e4SLinus Torvalds } 10071da177e4SLinus Torvalds 10081da177e4SLinus Torvalds static inline void input_set_abs_params(struct input_dev *dev, int axis, int min, int max, int fuzz, int flat) 10091da177e4SLinus Torvalds { 10101da177e4SLinus Torvalds dev->absmin[axis] = min; 10111da177e4SLinus Torvalds dev->absmax[axis] = max; 10121da177e4SLinus Torvalds dev->absfuzz[axis] = fuzz; 10131da177e4SLinus Torvalds dev->absflat[axis] = flat; 10141da177e4SLinus Torvalds 10151da177e4SLinus Torvalds dev->absbit[LONG(axis)] |= BIT(axis); 10161da177e4SLinus Torvalds } 10171da177e4SLinus Torvalds 10181da177e4SLinus Torvalds extern struct class_simple *input_class; 10191da177e4SLinus Torvalds 10201da177e4SLinus Torvalds #endif 10211da177e4SLinus Torvalds #endif 1022