uinput.h revision ead3cde4bac0c3e32cd31f149093f004eef8ceeb
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
23extern "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
563struct uinput_id {
564    uint16_t bustype;
565    uint16_t vendor;
566    uint16_t product;
567    uint16_t version;
568};
569
570struct 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
580struct 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