Home | History | Annotate | Download | only in include
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 2009-2012 Broadcom Corporation
      4  *
      5  *  Licensed under the Apache License, Version 2.0 (the "License");
      6  *  you may not use this file except in compliance with the License.
      7  *  You may obtain a copy of the License at:
      8  *
      9  *  http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  *
     17  ******************************************************************************/
     18 
     19 #ifndef __UINPUT_H
     20 #define __UINPUT_H
     21 
     22 #ifdef __cplusplus
     23 extern "C" {
     24 #endif
     25 
     26 #include <stdint.h>
     27 #include <sys/time.h>
     28 #include <sys/ioctl.h>
     29 
     30 /*******************************************************************************
     31 **  Constants & Macros
     32 ********************************************************************************/
     33 
     34 /* Events */
     35 
     36 #define EV_SYN          0x00
     37 #define EV_KEY          0x01
     38 #define EV_REL          0x02
     39 #define EV_ABS          0x03
     40 #define EV_MSC          0x04
     41 #define EV_LED          0x11
     42 #define EV_SND          0x12
     43 #define EV_REP          0x14
     44 #define EV_FF           0x15
     45 #define EV_PWR          0x16
     46 #define EV_FF_STATUS        0x17
     47 #define EV_MAX          0x1f
     48 
     49 /* Synchronization events */
     50 
     51 #define SYN_REPORT      0
     52 #define SYN_CONFIG      1
     53 
     54 /* Keys and buttons */
     55 
     56 #define KEY_RESERVED        0
     57 #define KEY_ESC         1
     58 #define KEY_1           2
     59 #define KEY_2           3
     60 #define KEY_3           4
     61 #define KEY_4           5
     62 #define KEY_5           6
     63 #define KEY_6           7
     64 #define KEY_7           8
     65 #define KEY_8           9
     66 #define KEY_9           10
     67 #define KEY_0           11
     68 #define KEY_MINUS       12
     69 #define KEY_EQUAL       13
     70 #define KEY_BACKSPACE       14
     71 #define KEY_TAB         15
     72 #define KEY_Q           16
     73 #define KEY_W           17
     74 #define KEY_E           18
     75 #define KEY_R           19
     76 #define KEY_T           20
     77 #define KEY_Y           21
     78 #define KEY_U           22
     79 #define KEY_I           23
     80 #define KEY_O           24
     81 #define KEY_P           25
     82 #define KEY_LEFTBRACE       26
     83 #define KEY_RIGHTBRACE      27
     84 #define KEY_ENTER       28
     85 #define KEY_LEFTCTRL        29
     86 #define KEY_A           30
     87 #define KEY_S           31
     88 #define KEY_D           32
     89 #define KEY_F           33
     90 #define KEY_G           34
     91 #define KEY_H           35
     92 #define KEY_J           36
     93 #define KEY_K           37
     94 #define KEY_L           38
     95 #define KEY_SEMICOLON       39
     96 #define KEY_APOSTROPHE      40
     97 #define KEY_GRAVE       41
     98 #define KEY_LEFTSHIFT       42
     99 #define KEY_BACKSLASH       43
    100 #define KEY_Z           44
    101 #define KEY_X           45
    102 #define KEY_C           46
    103 #define KEY_V           47
    104 #define KEY_B           48
    105 #define KEY_N           49
    106 #define KEY_M           50
    107 #define KEY_COMMA       51
    108 #define KEY_DOT         52
    109 #define KEY_SLASH       53
    110 #define KEY_RIGHTSHIFT      54
    111 #define KEY_KPASTERISK      55
    112 #define KEY_LEFTALT     56
    113 #define KEY_SPACE       57
    114 #define KEY_CAPSLOCK        58
    115 #define KEY_F1          59
    116 #define KEY_F2          60
    117 #define KEY_F3          61
    118 #define KEY_F4          62
    119 #define KEY_F5          63
    120 #define KEY_F6          64
    121 #define KEY_F7          65
    122 #define KEY_F8          66
    123 #define KEY_F9          67
    124 #define KEY_F10         68
    125 #define KEY_NUMLOCK     69
    126 #define KEY_SCROLLLOCK      70
    127 #define KEY_KP7         71
    128 #define KEY_KP8         72
    129 #define KEY_KP9         73
    130 #define KEY_KPMINUS     74
    131 #define KEY_KP4         75
    132 #define KEY_KP5         76
    133 #define KEY_KP6         77
    134 #define KEY_KPPLUS      78
    135 #define KEY_KP1         79
    136 #define KEY_KP2         80
    137 #define KEY_KP3         81
    138 #define KEY_KP0         82
    139 #define KEY_KPDOT       83
    140 #define KEY_103RD       84
    141 #define KEY_F13         85
    142 #define KEY_102ND       86
    143 #define KEY_F11         87
    144 #define KEY_F12         88
    145 #define KEY_F14         89
    146 #define KEY_F15         90
    147 #define KEY_F16         91
    148 #define KEY_F17         92
    149 #define KEY_F18         93
    150 #define KEY_F19         94
    151 #define KEY_F20         95
    152 #define KEY_KPENTER     96
    153 #define KEY_RIGHTCTRL       97
    154 #define KEY_KPSLASH     98
    155 #define KEY_SYSRQ       99
    156 #define KEY_RIGHTALT        100
    157 #define KEY_LINEFEED        101
    158 #define KEY_HOME        102
    159 #define KEY_UP          103
    160 #define KEY_PAGEUP      104
    161 #define KEY_LEFT        105
    162 #define KEY_RIGHT       106
    163 #define KEY_END         107
    164 #define KEY_DOWN        108
    165 #define KEY_PAGEDOWN        109
    166 #define KEY_INSERT      110
    167 #define KEY_DELETE      111
    168 #define KEY_MACRO       112
    169 #define KEY_MUTE        113
    170 #define KEY_VOLUMEDOWN      114
    171 #define KEY_VOLUMEUP        115
    172 #define KEY_POWER       116
    173 #define KEY_KPEQUAL     117
    174 #define KEY_KPPLUSMINUS     118
    175 #define KEY_PAUSE       119
    176 #define KEY_F21         120
    177 #define KEY_F22         121
    178 #define KEY_F23         122
    179 #define KEY_F24         123
    180 #define KEY_KPCOMMA     124
    181 #define KEY_LEFTMETA        125
    182 #define KEY_RIGHTMETA       126
    183 #define KEY_COMPOSE     127
    184 
    185 #define KEY_STOP        128
    186 #define KEY_AGAIN       129
    187 #define KEY_PROPS       130
    188 #define KEY_UNDO        131
    189 #define KEY_FRONT       132
    190 #define KEY_COPY        133
    191 #define KEY_OPEN        134
    192 #define KEY_PASTE       135
    193 #define KEY_FIND        136
    194 #define KEY_CUT         137
    195 #define KEY_HELP        138
    196 #define KEY_MENU        139
    197 #define KEY_CALC        140
    198 #define KEY_SETUP       141
    199 #define KEY_SLEEP       142
    200 #define KEY_WAKEUP      143
    201 #define KEY_FILE        144
    202 #define KEY_SENDFILE        145
    203 #define KEY_DELETEFILE      146
    204 #define KEY_XFER        147
    205 #define KEY_PROG1       148
    206 #define KEY_PROG2       149
    207 #define KEY_WWW         150
    208 #define KEY_MSDOS       151
    209 #define KEY_COFFEE      152
    210 #define KEY_DIRECTION       153
    211 #define KEY_CYCLEWINDOWS    154
    212 #define KEY_MAIL        155
    213 #define KEY_BOOKMARKS       156
    214 #define KEY_COMPUTER        157
    215 #define KEY_BACK        158
    216 #define KEY_FORWARD     159
    217 #define KEY_CLOSECD     160
    218 #define KEY_EJECTCD     161
    219 #define KEY_EJECTCLOSECD    162
    220 #define KEY_NEXTSONG        163
    221 #define KEY_PLAYPAUSE       164
    222 #define KEY_PREVIOUSSONG    165
    223 #define KEY_STOPCD      166
    224 #define KEY_RECORD      167
    225 #define KEY_REWIND      168
    226 #define KEY_PHONE       169
    227 #define KEY_ISO         170
    228 #define KEY_CONFIG      171
    229 #define KEY_HOMEPAGE        172
    230 #define KEY_REFRESH     173
    231 #define KEY_EXIT        174
    232 #define KEY_MOVE        175
    233 #define KEY_EDIT        176
    234 #define KEY_SCROLLUP        177
    235 #define KEY_SCROLLDOWN      178
    236 #define KEY_KPLEFTPAREN     179
    237 #define KEY_KPRIGHTPAREN    180
    238 
    239 #define KEY_INTL1       181
    240 #define KEY_INTL2       182
    241 #define KEY_INTL3       183
    242 #define KEY_INTL4       184
    243 #define KEY_INTL5       185
    244 #define KEY_INTL6       186
    245 #define KEY_INTL7       187
    246 #define KEY_INTL8       188
    247 #define KEY_INTL9       189
    248 #define KEY_LANG1       190
    249 #define KEY_LANG2       191
    250 #define KEY_LANG3       192
    251 #define KEY_LANG4       193
    252 #define KEY_LANG5       194
    253 #define KEY_LANG6       195
    254 #define KEY_LANG7       196
    255 #define KEY_LANG8       197
    256 #define KEY_LANG9       198
    257 
    258 #define KEY_PLAYCD      200
    259 #define KEY_PAUSECD     201
    260 #define KEY_PROG3       202
    261 #define KEY_PROG4       203
    262 #define KEY_SUSPEND     205
    263 #define KEY_CLOSE       206
    264 #define KEY_PLAY        207
    265 #define KEY_FAST_FORWARD  208
    266 
    267 #define KEY_UNKNOWN     220
    268 
    269 #define KEY_BRIGHTNESSDOWN  224
    270 #define KEY_BRIGHTNESSUP    225
    271 
    272 #define BTN_MISC        0x100
    273 #define BTN_0           0x100
    274 #define BTN_1           0x101
    275 #define BTN_2           0x102
    276 #define BTN_3           0x103
    277 #define BTN_4           0x104
    278 #define BTN_5           0x105
    279 #define BTN_6           0x106
    280 #define BTN_7           0x107
    281 #define BTN_8           0x108
    282 #define BTN_9           0x109
    283 
    284 #define BTN_MOUSE       0x110
    285 #define BTN_LEFT        0x110
    286 #define BTN_RIGHT       0x111
    287 #define BTN_MIDDLE      0x112
    288 #define BTN_SIDE        0x113
    289 #define BTN_EXTRA       0x114
    290 #define BTN_FORWARD     0x115
    291 #define BTN_BACK        0x116
    292 #define BTN_TASK        0x117
    293 
    294 #define BTN_JOYSTICK        0x120
    295 #define BTN_TRIGGER     0x120
    296 #define BTN_THUMB       0x121
    297 #define BTN_THUMB2      0x122
    298 #define BTN_TOP         0x123
    299 #define BTN_TOP2        0x124
    300 #define BTN_PINKIE      0x125
    301 #define BTN_BASE        0x126
    302 #define BTN_BASE2       0x127
    303 #define BTN_BASE3       0x128
    304 #define BTN_BASE4       0x129
    305 #define BTN_BASE5       0x12a
    306 #define BTN_BASE6       0x12b
    307 #define BTN_DEAD        0x12f
    308 
    309 #define BTN_GAMEPAD     0x130
    310 #define BTN_A           0x130
    311 #define BTN_B           0x131
    312 #define BTN_C           0x132
    313 #define BTN_X           0x133
    314 #define BTN_Y           0x134
    315 #define BTN_Z           0x135
    316 #define BTN_TL          0x136
    317 #define BTN_TR          0x137
    318 #define BTN_TL2         0x138
    319 #define BTN_TR2         0x139
    320 #define BTN_SELECT      0x13a
    321 #define BTN_START       0x13b
    322 #define BTN_MODE        0x13c
    323 #define BTN_THUMBL      0x13d
    324 #define BTN_THUMBR      0x13e
    325 
    326 #define BTN_DIGI        0x140
    327 #define BTN_TOOL_PEN        0x140
    328 #define BTN_TOOL_RUBBER     0x141
    329 #define BTN_TOOL_BRUSH      0x142
    330 #define BTN_TOOL_PENCIL     0x143
    331 #define BTN_TOOL_AIRBRUSH   0x144
    332 #define BTN_TOOL_FINGER     0x145
    333 #define BTN_TOOL_MOUSE      0x146
    334 #define BTN_TOOL_LENS       0x147
    335 #define BTN_TOUCH       0x14a
    336 #define BTN_STYLUS      0x14b
    337 #define BTN_STYLUS2     0x14c
    338 #define BTN_TOOL_DOUBLETAP  0x14d
    339 #define BTN_TOOL_TRIPLETAP  0x14e
    340 
    341 #define BTN_WHEEL       0x150
    342 #define BTN_GEAR_DOWN       0x150
    343 #define BTN_GEAR_UP     0x151
    344 
    345 #define KEY_OK          0x160
    346 #define KEY_SELECT      0x161
    347 #define KEY_GOTO        0x162
    348 #define KEY_CLEAR       0x163
    349 #define KEY_POWER2      0x164
    350 #define KEY_OPTION      0x165
    351 #define KEY_INFO        0x166
    352 #define KEY_TIME        0x167
    353 #define KEY_VENDOR      0x168
    354 #define KEY_ARCHIVE     0x169
    355 #define KEY_PROGRAM     0x16a
    356 #define KEY_CHANNEL     0x16b
    357 #define KEY_FAVORITES       0x16c
    358 #define KEY_EPG         0x16d
    359 #define KEY_PVR         0x16e
    360 #define KEY_MHP         0x16f
    361 #define KEY_LANGUAGE        0x170
    362 #define KEY_TITLE       0x171
    363 #define KEY_SUBTITLE        0x172
    364 #define KEY_ANGLE       0x173
    365 #define KEY_ZOOM        0x174
    366 #define KEY_MODE        0x175
    367 #define KEY_KEYBOARD        0x176
    368 #define KEY_SCREEN      0x177
    369 #define KEY_PC          0x178
    370 #define KEY_TV          0x179
    371 #define KEY_TV2         0x17a
    372 #define KEY_VCR         0x17b
    373 #define KEY_VCR2        0x17c
    374 #define KEY_SAT         0x17d
    375 #define KEY_SAT2        0x17e
    376 #define KEY_CD          0x17f
    377 #define KEY_TAPE        0x180
    378 #define KEY_RADIO       0x181
    379 #define KEY_TUNER       0x182
    380 #define KEY_PLAYER      0x183
    381 #define KEY_TEXT        0x184
    382 #define KEY_DVD         0x185
    383 #define KEY_AUX         0x186
    384 #define KEY_MP3         0x187
    385 #define KEY_AUDIO       0x188
    386 #define KEY_VIDEO       0x189
    387 #define KEY_DIRECTORY       0x18a
    388 #define KEY_LIST        0x18b
    389 #define KEY_MEMO        0x18c
    390 #define KEY_CALENDAR        0x18d
    391 #define KEY_RED         0x18e
    392 #define KEY_GREEN       0x18f
    393 #define KEY_YELLOW      0x190
    394 #define KEY_BLUE        0x191
    395 #define KEY_CHANNELUP       0x192
    396 #define KEY_CHANNELDOWN     0x193
    397 #define KEY_FIRST       0x194
    398 #define KEY_LAST        0x195
    399 #define KEY_AB          0x196
    400 #define KEY_NEXT        0x197
    401 #define KEY_RESTART     0x198
    402 #define KEY_SLOW        0x199
    403 #define KEY_SHUFFLE     0x19a
    404 #define KEY_BREAK       0x19b
    405 #define KEY_PREVIOUS        0x19c
    406 #define KEY_DIGITS      0x19d
    407 #define KEY_TEEN        0x19e
    408 #define KEY_TWEN        0x19f
    409 
    410 #define KEY_FRAMEBACK       0x1b2
    411 #define KEY_FRAMEFORWARD    0x1b3
    412 #define KEY_CONTEXT_MENU    0x1fb
    413 
    414 #define KEY_MAX         0x1ff
    415 
    416 /* Relative axes */
    417 
    418 #define REL_X           0x00
    419 #define REL_Y           0x01
    420 #define REL_Z           0x02
    421 #define REL_RX          0x03
    422 #define REL_RY          0x04
    423 #define REL_RZ          0x05
    424 #define REL_HWHEEL      0x06
    425 #define REL_DIAL        0x07
    426 #define REL_WHEEL       0x08
    427 #define REL_MISC        0x09
    428 #define REL_MAX         0x0f
    429 
    430 /* Absolute axes */
    431 
    432 #define ABS_X           0x00
    433 #define ABS_Y           0x01
    434 #define ABS_Z           0x02
    435 #define ABS_RX          0x03
    436 #define ABS_RY          0x04
    437 #define ABS_RZ          0x05
    438 #define ABS_THROTTLE        0x06
    439 #define ABS_RUDDER      0x07
    440 #define ABS_WHEEL       0x08
    441 #define ABS_GAS         0x09
    442 #define ABS_BRAKE       0x0a
    443 #define ABS_HAT0X       0x10
    444 #define ABS_HAT0Y       0x11
    445 #define ABS_HAT1X       0x12
    446 #define ABS_HAT1Y       0x13
    447 #define ABS_HAT2X       0x14
    448 #define ABS_HAT2Y       0x15
    449 #define ABS_HAT3X       0x16
    450 #define ABS_HAT3Y       0x17
    451 #define ABS_PRESSURE        0x18
    452 #define ABS_DISTANCE        0x19
    453 #define ABS_TILT_X      0x1a
    454 #define ABS_TILT_Y      0x1b
    455 #define ABS_TOOL_WIDTH      0x1c
    456 #define ABS_VOLUME      0x20
    457 #define ABS_MISC        0x28
    458 #define ABS_MAX         0x3f
    459 
    460 /* Switch events */
    461 
    462 #define SW_0            0x00
    463 #define SW_1            0x01
    464 #define SW_2            0x02
    465 #define SW_3            0x03
    466 #define SW_4            0x04
    467 #define SW_5            0x05
    468 #define SW_6            0x06
    469 #define SW_7            0x07
    470 #define SW_MAX          0x0f
    471 
    472 /* Misc events */
    473 
    474 #define MSC_SERIAL      0x00
    475 #define MSC_PULSELED        0x01
    476 #define MSC_GESTURE     0x02
    477 #define MSC_RAW         0x03
    478 #define MSC_SCAN        0x04
    479 #define MSC_MAX         0x07
    480 
    481 /* LEDs */
    482 
    483 #define LED_NUML        0x00
    484 #define LED_CAPSL       0x01
    485 #define LED_SCROLLL     0x02
    486 #define LED_COMPOSE     0x03
    487 #define LED_KANA        0x04
    488 #define LED_SLEEP       0x05
    489 #define LED_SUSPEND     0x06
    490 #define LED_MUTE        0x07
    491 #define LED_MISC        0x08
    492 #define LED_MAIL        0x09
    493 #define LED_CHARGING        0x0a
    494 #define LED_MAX         0x0f
    495 
    496 /* Autorepeat values */
    497 
    498 #define REP_DELAY       0x00
    499 #define REP_PERIOD      0x01
    500 #define REP_MAX         0x01
    501 
    502 /* Sounds */
    503 
    504 #define SND_CLICK       0x00
    505 #define SND_BELL        0x01
    506 #define SND_TONE        0x02
    507 #define SND_MAX         0x07
    508 
    509 /* Identifiers */
    510 
    511 #define ID_BUS          0
    512 #define ID_VENDOR       1
    513 #define ID_PRODUCT      2
    514 #define ID_VERSION      3
    515 
    516 #define BUS_PCI         0x01
    517 #define BUS_ISAPNP      0x02
    518 #define BUS_USB         0x03
    519 #define BUS_HIL         0x04
    520 #define BUS_BLUETOOTH       0x05
    521 
    522 #define BUS_ISA         0x10
    523 #define BUS_I8042       0x11
    524 #define BUS_XTKBD       0x12
    525 #define BUS_RS232       0x13
    526 #define BUS_GAMEPORT        0x14
    527 #define BUS_PARPORT     0x15
    528 #define BUS_AMIGA       0x16
    529 #define BUS_ADB         0x17
    530 #define BUS_I2C         0x18
    531 #define BUS_HOST        0x19
    532 #define BUS_GSC         0x1A
    533 
    534 /* User input interface */
    535 
    536 #define UINPUT_IOCTL_BASE   'U'
    537 
    538 #define UI_DEV_CREATE       _IO(UINPUT_IOCTL_BASE, 1)
    539 #define UI_DEV_DESTROY      _IO(UINPUT_IOCTL_BASE, 2)
    540 
    541 #define UI_SET_EVBIT        _IOW(UINPUT_IOCTL_BASE, 100, int)
    542 #define UI_SET_KEYBIT       _IOW(UINPUT_IOCTL_BASE, 101, int)
    543 #define UI_SET_RELBIT       _IOW(UINPUT_IOCTL_BASE, 102, int)
    544 #define UI_SET_ABSBIT       _IOW(UINPUT_IOCTL_BASE, 103, int)
    545 #define UI_SET_MSCBIT       _IOW(UINPUT_IOCTL_BASE, 104, int)
    546 #define UI_SET_LEDBIT       _IOW(UINPUT_IOCTL_BASE, 105, int)
    547 #define UI_SET_SNDBIT       _IOW(UINPUT_IOCTL_BASE, 106, int)
    548 #define UI_SET_FFBIT        _IOW(UINPUT_IOCTL_BASE, 107, int)
    549 #define UI_SET_PHYS     _IOW(UINPUT_IOCTL_BASE, 108, char*)
    550 #define UI_SET_SWBIT        _IOW(UINPUT_IOCTL_BASE, 109, int)
    551 
    552 #ifndef NBITS
    553 #define NBITS(x) ((((x) - 1) / (sizeof(long) * 8)) + 1)
    554 #endif
    555 
    556 #define UINPUT_MAX_NAME_SIZE    80
    557 
    558 
    559 /*******************************************************************************
    560 **  Type definitions and return values
    561 ********************************************************************************/
    562 
    563 struct uinput_id {
    564     uint16_t bustype;
    565     uint16_t vendor;
    566     uint16_t product;
    567     uint16_t version;
    568 };
    569 
    570 struct uinput_dev {
    571     char name[UINPUT_MAX_NAME_SIZE];
    572     struct uinput_id id;
    573     int ff_effects_max;
    574     int absmax[ABS_MAX + 1];
    575     int absmin[ABS_MAX + 1];
    576     int absfuzz[ABS_MAX + 1];
    577     int absflat[ABS_MAX + 1];
    578 };
    579 
    580 struct uinput_event {
    581     struct timeval time;
    582     uint16_t type;
    583     uint16_t code;
    584     int32_t value;
    585 };
    586 
    587 #ifdef __cplusplus
    588 }
    589 #endif
    590 
    591 #endif /* __UINPUT_H */
    592