1#ifndef _INPUT_H
2#define _INPUT_H
3
4
5
6
7
8
9
10
11
12#ifdef __KERNEL__
13#include <linux/time.h>
14#include <linux/list.h>
15#else
16#include <sys/time.h>
17#include <sys/ioctl.h>
18#include <sys/types.h>
19#include <linux/types.h>
20#endif
21
22
23
24
25
26struct input_event {
27 struct timeval time;
28 __u16 type;
29 __u16 code;
30 __s32 value;
31};
32
33
34
35
36
37#define EV_VERSION 0x010000
38
39
40
41
42
43struct input_id {
44 __u16 bustype;
45 __u16 vendor;
46 __u16 product;
47 __u16 version;
48};
49
50struct input_absinfo {
51 __s32 value;
52 __s32 minimum;
53 __s32 maximum;
54 __s32 fuzz;
55 __s32 flat;
56 __s32 resolution;
57};
58
59#define EVIOCGVERSION _IOR('E', 0x01, int)
60#define EVIOCGID _IOR('E', 0x02, struct input_id)
61#define EVIOCGREP _IOR('E', 0x03, unsigned int[2])
62#define EVIOCSREP _IOW('E', 0x03, unsigned int[2])
63#define EVIOCGKEYCODE _IOR('E', 0x04, unsigned int[2])
64#define EVIOCSKEYCODE _IOW('E', 0x04, unsigned int[2])
65
66#define EVIOCGNAME(len) _IOC(_IOC_READ, 'E', 0x06, len)
67#define EVIOCGPHYS(len) _IOC(_IOC_READ, 'E', 0x07, len)
68#define EVIOCGUNIQ(len) _IOC(_IOC_READ, 'E', 0x08, len)
69
70#define EVIOCGKEY(len) _IOC(_IOC_READ, 'E', 0x18, len)
71#define EVIOCGLED(len) _IOC(_IOC_READ, 'E', 0x19, len)
72#define EVIOCGSND(len) _IOC(_IOC_READ, 'E', 0x1a, len)
73#define EVIOCGSW(len) _IOC(_IOC_READ, 'E', 0x1b, len)
74
75#define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len)
76#define EVIOCGABS(abs) _IOR('E', 0x40 + abs, struct input_absinfo)
77#define EVIOCSABS(abs) _IOW('E', 0xc0 + abs, struct input_absinfo)
78
79#define EVIOCSFF _IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect))
80#define EVIOCRMFF _IOW('E', 0x81, int)
81#define EVIOCGEFFECTS _IOR('E', 0x84, int)
82
83#define EVIOCGRAB _IOW('E', 0x90, int)
84
85
86
87
88
89#define EV_SYN 0x00
90#define EV_KEY 0x01
91#define EV_REL 0x02
92#define EV_ABS 0x03
93#define EV_MSC 0x04
94#define EV_SW 0x05
95#define EV_LED 0x11
96#define EV_SND 0x12
97#define EV_REP 0x14
98#define EV_FF 0x15
99#define EV_PWR 0x16
100#define EV_FF_STATUS 0x17
101#define EV_MAX 0x1f
102#define EV_CNT (EV_MAX+1)
103
104
105
106
107
108#define SYN_REPORT 0
109#define SYN_CONFIG 1
110#define SYN_MT_REPORT 2
111
112
113
114
115
116
117
118
119
120
121
122
123#define KEY_RESERVED 0
124#define KEY_ESC 1
125#define KEY_1 2
126#define KEY_2 3
127#define KEY_3 4
128#define KEY_4 5
129#define KEY_5 6
130#define KEY_6 7
131#define KEY_7 8
132#define KEY_8 9
133#define KEY_9 10
134#define KEY_0 11
135#define KEY_MINUS 12
136#define KEY_EQUAL 13
137#define KEY_BACKSPACE 14
138#define KEY_TAB 15
139#define KEY_Q 16
140#define KEY_W 17
141#define KEY_E 18
142#define KEY_R 19
143#define KEY_T 20
144#define KEY_Y 21
145#define KEY_U 22
146#define KEY_I 23
147#define KEY_O 24
148#define KEY_P 25
149#define KEY_LEFTBRACE 26
150#define KEY_RIGHTBRACE 27
151#define KEY_ENTER 28
152#define KEY_LEFTCTRL 29
153#define KEY_A 30
154#define KEY_S 31
155#define KEY_D 32
156#define KEY_F 33
157#define KEY_G 34
158#define KEY_H 35
159#define KEY_J 36
160#define KEY_K 37
161#define KEY_L 38
162#define KEY_SEMICOLON 39
163#define KEY_APOSTROPHE 40
164#define KEY_GRAVE 41
165#define KEY_LEFTSHIFT 42
166#define KEY_BACKSLASH 43
167#define KEY_Z 44
168#define KEY_X 45
169#define KEY_C 46
170#define KEY_V 47
171#define KEY_B 48
172#define KEY_N 49
173#define KEY_M 50
174#define KEY_COMMA 51
175#define KEY_DOT 52
176#define KEY_SLASH 53
177#define KEY_RIGHTSHIFT 54
178#define KEY_KPASTERISK 55
179#define KEY_LEFTALT 56
180#define KEY_SPACE 57
181#define KEY_CAPSLOCK 58
182#define KEY_F1 59
183#define KEY_F2 60
184#define KEY_F3 61
185#define KEY_F4 62
186#define KEY_F5 63
187#define KEY_F6 64
188#define KEY_F7 65
189#define KEY_F8 66
190#define KEY_F9 67
191#define KEY_F10 68
192#define KEY_NUMLOCK 69
193#define KEY_SCROLLLOCK 70
194#define KEY_KP7 71
195#define KEY_KP8 72
196#define KEY_KP9 73
197#define KEY_KPMINUS 74
198#define KEY_KP4 75
199#define KEY_KP5 76
200#define KEY_KP6 77
201#define KEY_KPPLUS 78
202#define KEY_KP1 79
203#define KEY_KP2 80
204#define KEY_KP3 81
205#define KEY_KP0 82
206#define KEY_KPDOT 83
207
208#define KEY_ZENKAKUHANKAKU 85
209#define KEY_102ND 86
210#define KEY_F11 87
211#define KEY_F12 88
212#define KEY_RO 89
213#define KEY_KATAKANA 90
214#define KEY_HIRAGANA 91
215#define KEY_HENKAN 92
216#define KEY_KATAKANAHIRAGANA 93
217#define KEY_MUHENKAN 94
218#define KEY_KPJPCOMMA 95
219#define KEY_KPENTER 96
220#define KEY_RIGHTCTRL 97
221#define KEY_KPSLASH 98
222#define KEY_SYSRQ 99
223#define KEY_RIGHTALT 100
224#define KEY_LINEFEED 101
225#define KEY_HOME 102
226#define KEY_UP 103
227#define KEY_PAGEUP 104
228#define KEY_LEFT 105
229#define KEY_RIGHT 106
230#define KEY_END 107
231#define KEY_DOWN 108
232#define KEY_PAGEDOWN 109
233#define KEY_INSERT 110
234#define KEY_DELETE 111
235#define KEY_MACRO 112
236#define KEY_MUTE 113
237#define KEY_VOLUMEDOWN 114
238#define KEY_VOLUMEUP 115
239#define KEY_POWER 116
240#define KEY_KPEQUAL 117
241#define KEY_KPPLUSMINUS 118
242#define KEY_PAUSE 119
243#define KEY_SCALE 120
244
245#define KEY_KPCOMMA 121
246#define KEY_HANGEUL 122
247#define KEY_HANGUEL KEY_HANGEUL
248#define KEY_HANJA 123
249#define KEY_YEN 124
250#define KEY_LEFTMETA 125
251#define KEY_RIGHTMETA 126
252#define KEY_COMPOSE 127
253
254#define KEY_STOP 128
255#define KEY_AGAIN 129
256#define KEY_PROPS 130
257#define KEY_UNDO 131
258#define KEY_FRONT 132
259#define KEY_COPY 133
260#define KEY_OPEN 134
261#define KEY_PASTE 135
262#define KEY_FIND 136
263#define KEY_CUT 137
264#define KEY_HELP 138
265#define KEY_MENU 139
266#define KEY_CALC 140
267#define KEY_SETUP 141
268#define KEY_SLEEP 142
269#define KEY_WAKEUP 143
270#define KEY_FILE 144
271#define KEY_SENDFILE 145
272#define KEY_DELETEFILE 146
273#define KEY_XFER 147
274#define KEY_PROG1 148
275#define KEY_PROG2 149
276#define KEY_WWW 150
277#define KEY_MSDOS 151
278#define KEY_COFFEE 152
279#define KEY_SCREENLOCK KEY_COFFEE
280#define KEY_DIRECTION 153
281#define KEY_CYCLEWINDOWS 154
282#define KEY_MAIL 155
283#define KEY_BOOKMARKS 156
284#define KEY_COMPUTER 157
285#define KEY_BACK 158
286#define KEY_FORWARD 159
287#define KEY_CLOSECD 160
288#define KEY_EJECTCD 161
289#define KEY_EJECTCLOSECD 162
290#define KEY_NEXTSONG 163
291#define KEY_PLAYPAUSE 164
292#define KEY_PREVIOUSSONG 165
293#define KEY_STOPCD 166
294#define KEY_RECORD 167
295#define KEY_REWIND 168
296#define KEY_PHONE 169
297#define KEY_ISO 170
298#define KEY_CONFIG 171
299#define KEY_HOMEPAGE 172
300#define KEY_REFRESH 173
301#define KEY_EXIT 174
302#define KEY_MOVE 175
303#define KEY_EDIT 176
304#define KEY_SCROLLUP 177
305#define KEY_SCROLLDOWN 178
306#define KEY_KPLEFTPAREN 179
307#define KEY_KPRIGHTPAREN 180
308#define KEY_NEW 181
309#define KEY_REDO 182
310
311#define KEY_F13 183
312#define KEY_F14 184
313#define KEY_F15 185
314#define KEY_F16 186
315#define KEY_F17 187
316#define KEY_F18 188
317#define KEY_F19 189
318#define KEY_F20 190
319#define KEY_F21 191
320#define KEY_F22 192
321#define KEY_F23 193
322#define KEY_F24 194
323
324#define KEY_PLAYCD 200
325#define KEY_PAUSECD 201
326#define KEY_PROG3 202
327#define KEY_PROG4 203
328#define KEY_DASHBOARD 204
329#define KEY_SUSPEND 205
330#define KEY_CLOSE 206
331#define KEY_PLAY 207
332#define KEY_FASTFORWARD 208
333#define KEY_BASSBOOST 209
334#define KEY_PRINT 210
335#define KEY_HP 211
336#define KEY_CAMERA 212
337#define KEY_SOUND 213
338#define KEY_QUESTION 214
339#define KEY_EMAIL 215
340#define KEY_CHAT 216
341#define KEY_SEARCH 217
342#define KEY_CONNECT 218
343#define KEY_FINANCE 219
344#define KEY_SPORT 220
345#define KEY_SHOP 221
346#define KEY_ALTERASE 222
347#define KEY_CANCEL 223
348#define KEY_BRIGHTNESSDOWN 224
349#define KEY_BRIGHTNESSUP 225
350#define KEY_MEDIA 226
351
352#define KEY_SWITCHVIDEOMODE 227
353
354#define KEY_KBDILLUMTOGGLE 228
355#define KEY_KBDILLUMDOWN 229
356#define KEY_KBDILLUMUP 230
357
358#define KEY_SEND 231
359#define KEY_REPLY 232
360#define KEY_FORWARDMAIL 233
361#define KEY_SAVE 234
362#define KEY_DOCUMENTS 235
363
364#define KEY_BATTERY 236
365
366#define KEY_BLUETOOTH 237
367#define KEY_WLAN 238
368#define KEY_UWB 239
369
370#define KEY_UNKNOWN 240
371
372#define KEY_VIDEO_NEXT 241
373#define KEY_VIDEO_PREV 242
374#define KEY_BRIGHTNESS_CYCLE 243
375#define KEY_BRIGHTNESS_ZERO 244
376#define KEY_DISPLAY_OFF 245
377
378#define KEY_WIMAX 246
379#define KEY_RFKILL 247
380
381
382
383#define BTN_MISC 0x100
384#define BTN_0 0x100
385#define BTN_1 0x101
386#define BTN_2 0x102
387#define BTN_3 0x103
388#define BTN_4 0x104
389#define BTN_5 0x105
390#define BTN_6 0x106
391#define BTN_7 0x107
392#define BTN_8 0x108
393#define BTN_9 0x109
394
395#define BTN_MOUSE 0x110
396#define BTN_LEFT 0x110
397#define BTN_RIGHT 0x111
398#define BTN_MIDDLE 0x112
399#define BTN_SIDE 0x113
400#define BTN_EXTRA 0x114
401#define BTN_FORWARD 0x115
402#define BTN_BACK 0x116
403#define BTN_TASK 0x117
404
405#define BTN_JOYSTICK 0x120
406#define BTN_TRIGGER 0x120
407#define BTN_THUMB 0x121
408#define BTN_THUMB2 0x122
409#define BTN_TOP 0x123
410#define BTN_TOP2 0x124
411#define BTN_PINKIE 0x125
412#define BTN_BASE 0x126
413#define BTN_BASE2 0x127
414#define BTN_BASE3 0x128
415#define BTN_BASE4 0x129
416#define BTN_BASE5 0x12a
417#define BTN_BASE6 0x12b
418#define BTN_DEAD 0x12f
419
420#define BTN_GAMEPAD 0x130
421#define BTN_A 0x130
422#define BTN_B 0x131
423#define BTN_C 0x132
424#define BTN_X 0x133
425#define BTN_Y 0x134
426#define BTN_Z 0x135
427#define BTN_TL 0x136
428#define BTN_TR 0x137
429#define BTN_TL2 0x138
430#define BTN_TR2 0x139
431#define BTN_SELECT 0x13a
432#define BTN_START 0x13b
433#define BTN_MODE 0x13c
434#define BTN_THUMBL 0x13d
435#define BTN_THUMBR 0x13e
436
437#define BTN_DIGI 0x140
438#define BTN_TOOL_PEN 0x140
439#define BTN_TOOL_RUBBER 0x141
440#define BTN_TOOL_BRUSH 0x142
441#define BTN_TOOL_PENCIL 0x143
442#define BTN_TOOL_AIRBRUSH 0x144
443#define BTN_TOOL_FINGER 0x145
444#define BTN_TOOL_MOUSE 0x146
445#define BTN_TOOL_LENS 0x147
446#define BTN_TOUCH 0x14a
447#define BTN_STYLUS 0x14b
448#define BTN_STYLUS2 0x14c
449#define BTN_TOOL_DOUBLETAP 0x14d
450#define BTN_TOOL_TRIPLETAP 0x14e
451#define BTN_TOOL_QUADTAP 0x14f
452
453#define BTN_WHEEL 0x150
454#define BTN_GEAR_DOWN 0x150
455#define BTN_GEAR_UP 0x151
456
457#define KEY_OK 0x160
458#define KEY_SELECT 0x161
459#define KEY_GOTO 0x162
460#define KEY_CLEAR 0x163
461#define KEY_POWER2 0x164
462#define KEY_OPTION 0x165
463#define KEY_INFO 0x166
464#define KEY_TIME 0x167
465#define KEY_VENDOR 0x168
466#define KEY_ARCHIVE 0x169
467#define KEY_PROGRAM 0x16a
468#define KEY_CHANNEL 0x16b
469#define KEY_FAVORITES 0x16c
470#define KEY_EPG 0x16d
471#define KEY_PVR 0x16e
472#define KEY_MHP 0x16f
473#define KEY_LANGUAGE 0x170
474#define KEY_TITLE 0x171
475#define KEY_SUBTITLE 0x172
476#define KEY_ANGLE 0x173
477#define KEY_ZOOM 0x174
478#define KEY_MODE 0x175
479#define KEY_KEYBOARD 0x176
480#define KEY_SCREEN 0x177
481#define KEY_PC 0x178
482#define KEY_TV 0x179
483#define KEY_TV2 0x17a
484#define KEY_VCR 0x17b
485#define KEY_VCR2 0x17c
486#define KEY_SAT 0x17d
487#define KEY_SAT2 0x17e
488#define KEY_CD 0x17f
489#define KEY_TAPE 0x180
490#define KEY_RADIO 0x181
491#define KEY_TUNER 0x182
492#define KEY_PLAYER 0x183
493#define KEY_TEXT 0x184
494#define KEY_DVD 0x185
495#define KEY_AUX 0x186
496#define KEY_MP3 0x187
497#define KEY_AUDIO 0x188
498#define KEY_VIDEO 0x189
499#define KEY_DIRECTORY 0x18a
500#define KEY_LIST 0x18b
501#define KEY_MEMO 0x18c
502#define KEY_CALENDAR 0x18d
503#define KEY_RED 0x18e
504#define KEY_GREEN 0x18f
505#define KEY_YELLOW 0x190
506#define KEY_BLUE 0x191
507#define KEY_CHANNELUP 0x192
508#define KEY_CHANNELDOWN 0x193
509#define KEY_FIRST 0x194
510#define KEY_LAST 0x195
511#define KEY_AB 0x196
512#define KEY_NEXT 0x197
513#define KEY_RESTART 0x198
514#define KEY_SLOW 0x199
515#define KEY_SHUFFLE 0x19a
516#define KEY_BREAK 0x19b
517#define KEY_PREVIOUS 0x19c
518#define KEY_DIGITS 0x19d
519#define KEY_TEEN 0x19e
520#define KEY_TWEN 0x19f
521#define KEY_VIDEOPHONE 0x1a0
522#define KEY_GAMES 0x1a1
523#define KEY_ZOOMIN 0x1a2
524#define KEY_ZOOMOUT 0x1a3
525#define KEY_ZOOMRESET 0x1a4
526#define KEY_WORDPROCESSOR 0x1a5
527#define KEY_EDITOR 0x1a6
528#define KEY_SPREADSHEET 0x1a7
529#define KEY_GRAPHICSEDITOR 0x1a8
530#define KEY_PRESENTATION 0x1a9
531#define KEY_DATABASE 0x1aa
532#define KEY_NEWS 0x1ab
533#define KEY_VOICEMAIL 0x1ac
534#define KEY_ADDRESSBOOK 0x1ad
535#define KEY_MESSENGER 0x1ae
536#define KEY_DISPLAYTOGGLE 0x1af
537#define KEY_SPELLCHECK 0x1b0
538#define KEY_LOGOFF 0x1b1
539
540#define KEY_DOLLAR 0x1b2
541#define KEY_EURO 0x1b3
542
543#define KEY_FRAMEBACK 0x1b4
544#define KEY_FRAMEFORWARD 0x1b5
545#define KEY_CONTEXT_MENU 0x1b6
546#define KEY_MEDIA_REPEAT 0x1b7
547
548#define KEY_DEL_EOL 0x1c0
549#define KEY_DEL_EOS 0x1c1
550#define KEY_INS_LINE 0x1c2
551#define KEY_DEL_LINE 0x1c3
552
553#define KEY_FN 0x1d0
554#define KEY_FN_ESC 0x1d1
555#define KEY_FN_F1 0x1d2
556#define KEY_FN_F2 0x1d3
557#define KEY_FN_F3 0x1d4
558#define KEY_FN_F4 0x1d5
559#define KEY_FN_F5 0x1d6
560#define KEY_FN_F6 0x1d7
561#define KEY_FN_F7 0x1d8
562#define KEY_FN_F8 0x1d9
563#define KEY_FN_F9 0x1da
564#define KEY_FN_F10 0x1db
565#define KEY_FN_F11 0x1dc
566#define KEY_FN_F12 0x1dd
567#define KEY_FN_1 0x1de
568#define KEY_FN_2 0x1df
569#define KEY_FN_D 0x1e0
570#define KEY_FN_E 0x1e1
571#define KEY_FN_F 0x1e2
572#define KEY_FN_S 0x1e3
573#define KEY_FN_B 0x1e4
574
575#define KEY_BRL_DOT1 0x1f1
576#define KEY_BRL_DOT2 0x1f2
577#define KEY_BRL_DOT3 0x1f3
578#define KEY_BRL_DOT4 0x1f4
579#define KEY_BRL_DOT5 0x1f5
580#define KEY_BRL_DOT6 0x1f6
581#define KEY_BRL_DOT7 0x1f7
582#define KEY_BRL_DOT8 0x1f8
583#define KEY_BRL_DOT9 0x1f9
584#define KEY_BRL_DOT10 0x1fa
585
586#define KEY_NUMERIC_0 0x200
587#define KEY_NUMERIC_1 0x201
588#define KEY_NUMERIC_2 0x202
589#define KEY_NUMERIC_3 0x203
590#define KEY_NUMERIC_4 0x204
591#define KEY_NUMERIC_5 0x205
592#define KEY_NUMERIC_6 0x206
593#define KEY_NUMERIC_7 0x207
594#define KEY_NUMERIC_8 0x208
595#define KEY_NUMERIC_9 0x209
596#define KEY_NUMERIC_STAR 0x20a
597#define KEY_NUMERIC_POUND 0x20b
598
599#define KEY_CAMERA_FOCUS 0x210
600#define KEY_WPS_BUTTON 0x211
601
602#define BTN_TRIGGER_HAPPY 0x2c0
603#define BTN_TRIGGER_HAPPY1 0x2c0
604#define BTN_TRIGGER_HAPPY2 0x2c1
605#define BTN_TRIGGER_HAPPY3 0x2c2
606#define BTN_TRIGGER_HAPPY4 0x2c3
607#define BTN_TRIGGER_HAPPY5 0x2c4
608#define BTN_TRIGGER_HAPPY6 0x2c5
609#define BTN_TRIGGER_HAPPY7 0x2c6
610#define BTN_TRIGGER_HAPPY8 0x2c7
611#define BTN_TRIGGER_HAPPY9 0x2c8
612#define BTN_TRIGGER_HAPPY10 0x2c9
613#define BTN_TRIGGER_HAPPY11 0x2ca
614#define BTN_TRIGGER_HAPPY12 0x2cb
615#define BTN_TRIGGER_HAPPY13 0x2cc
616#define BTN_TRIGGER_HAPPY14 0x2cd
617#define BTN_TRIGGER_HAPPY15 0x2ce
618#define BTN_TRIGGER_HAPPY16 0x2cf
619#define BTN_TRIGGER_HAPPY17 0x2d0
620#define BTN_TRIGGER_HAPPY18 0x2d1
621#define BTN_TRIGGER_HAPPY19 0x2d2
622#define BTN_TRIGGER_HAPPY20 0x2d3
623#define BTN_TRIGGER_HAPPY21 0x2d4
624#define BTN_TRIGGER_HAPPY22 0x2d5
625#define BTN_TRIGGER_HAPPY23 0x2d6
626#define BTN_TRIGGER_HAPPY24 0x2d7
627#define BTN_TRIGGER_HAPPY25 0x2d8
628#define BTN_TRIGGER_HAPPY26 0x2d9
629#define BTN_TRIGGER_HAPPY27 0x2da
630#define BTN_TRIGGER_HAPPY28 0x2db
631#define BTN_TRIGGER_HAPPY29 0x2dc
632#define BTN_TRIGGER_HAPPY30 0x2dd
633#define BTN_TRIGGER_HAPPY31 0x2de
634#define BTN_TRIGGER_HAPPY32 0x2df
635#define BTN_TRIGGER_HAPPY33 0x2e0
636#define BTN_TRIGGER_HAPPY34 0x2e1
637#define BTN_TRIGGER_HAPPY35 0x2e2
638#define BTN_TRIGGER_HAPPY36 0x2e3
639#define BTN_TRIGGER_HAPPY37 0x2e4
640#define BTN_TRIGGER_HAPPY38 0x2e5
641#define BTN_TRIGGER_HAPPY39 0x2e6
642#define BTN_TRIGGER_HAPPY40 0x2e7
643
644
645#define KEY_MIN_INTERESTING KEY_MUTE
646#define KEY_MAX 0x2ff
647#define KEY_CNT (KEY_MAX+1)
648
649
650
651
652
653#define REL_X 0x00
654#define REL_Y 0x01
655#define REL_Z 0x02
656#define REL_RX 0x03
657#define REL_RY 0x04
658#define REL_RZ 0x05
659#define REL_HWHEEL 0x06
660#define REL_DIAL 0x07
661#define REL_WHEEL 0x08
662#define REL_MISC 0x09
663#define REL_MAX 0x0f
664#define REL_CNT (REL_MAX+1)
665
666
667
668
669
670#define ABS_X 0x00
671#define ABS_Y 0x01
672#define ABS_Z 0x02
673#define ABS_RX 0x03
674#define ABS_RY 0x04
675#define ABS_RZ 0x05
676#define ABS_THROTTLE 0x06
677#define ABS_RUDDER 0x07
678#define ABS_WHEEL 0x08
679#define ABS_GAS 0x09
680#define ABS_BRAKE 0x0a
681#define ABS_HAT0X 0x10
682#define ABS_HAT0Y 0x11
683#define ABS_HAT1X 0x12
684#define ABS_HAT1Y 0x13
685#define ABS_HAT2X 0x14
686#define ABS_HAT2Y 0x15
687#define ABS_HAT3X 0x16
688#define ABS_HAT3Y 0x17
689#define ABS_PRESSURE 0x18
690#define ABS_DISTANCE 0x19
691#define ABS_TILT_X 0x1a
692#define ABS_TILT_Y 0x1b
693#define ABS_TOOL_WIDTH 0x1c
694#define ABS_VOLUME 0x20
695#define ABS_MISC 0x28
696
697#define ABS_MT_TOUCH_MAJOR 0x30
698#define ABS_MT_TOUCH_MINOR 0x31
699#define ABS_MT_WIDTH_MAJOR 0x32
700#define ABS_MT_WIDTH_MINOR 0x33
701#define ABS_MT_ORIENTATION 0x34
702#define ABS_MT_POSITION_X 0x35
703#define ABS_MT_POSITION_Y 0x36
704#define ABS_MT_TOOL_TYPE 0x37
705#define ABS_MT_BLOB_ID 0x38
706#define ABS_MT_TRACKING_ID 0x39
707#define ABS_MT_PRESSURE 0x3a
708
709#define ABS_MAX 0x3f
710#define ABS_CNT (ABS_MAX+1)
711
712
713
714
715
716#define SW_LID 0x00
717#define SW_TABLET_MODE 0x01
718#define SW_HEADPHONE_INSERT 0x02
719#define SW_RFKILL_ALL 0x03
720
721#define SW_RADIO SW_RFKILL_ALL
722#define SW_MICROPHONE_INSERT 0x04
723#define SW_DOCK 0x05
724#define SW_LINEOUT_INSERT 0x06
725#define SW_JACK_PHYSICAL_INSERT 0x07
726#define SW_VIDEOOUT_INSERT 0x08
727#define SW_CAMERA_LENS_COVER 0x09
728#define SW_KEYPAD_SLIDE 0x0a
729#define SW_FRONT_PROXIMITY 0x0b
730#define SW_MAX 0x0f
731#define SW_CNT (SW_MAX+1)
732
733
734
735
736
737#define MSC_SERIAL 0x00
738#define MSC_PULSELED 0x01
739#define MSC_GESTURE 0x02
740#define MSC_RAW 0x03
741#define MSC_SCAN 0x04
742#define MSC_MAX 0x07
743#define MSC_CNT (MSC_MAX+1)
744
745
746
747
748
749#define LED_NUML 0x00
750#define LED_CAPSL 0x01
751#define LED_SCROLLL 0x02
752#define LED_COMPOSE 0x03
753#define LED_KANA 0x04
754#define LED_SLEEP 0x05
755#define LED_SUSPEND 0x06
756#define LED_MUTE 0x07
757#define LED_MISC 0x08
758#define LED_MAIL 0x09
759#define LED_CHARGING 0x0a
760#define LED_MAX 0x0f
761#define LED_CNT (LED_MAX+1)
762
763
764
765
766
767#define REP_DELAY 0x00
768#define REP_PERIOD 0x01
769#define REP_MAX 0x01
770
771
772
773
774
775#define SND_CLICK 0x00
776#define SND_BELL 0x01
777#define SND_TONE 0x02
778#define SND_MAX 0x07
779#define SND_CNT (SND_MAX+1)
780
781
782
783
784
785#define ID_BUS 0
786#define ID_VENDOR 1
787#define ID_PRODUCT 2
788#define ID_VERSION 3
789
790#define BUS_PCI 0x01
791#define BUS_ISAPNP 0x02
792#define BUS_USB 0x03
793#define BUS_HIL 0x04
794#define BUS_BLUETOOTH 0x05
795#define BUS_VIRTUAL 0x06
796
797#define BUS_ISA 0x10
798#define BUS_I8042 0x11
799#define BUS_XTKBD 0x12
800#define BUS_RS232 0x13
801#define BUS_GAMEPORT 0x14
802#define BUS_PARPORT 0x15
803#define BUS_AMIGA 0x16
804#define BUS_ADB 0x17
805#define BUS_I2C 0x18
806#define BUS_HOST 0x19
807#define BUS_GSC 0x1A
808#define BUS_ATARI 0x1B
809#define BUS_SPI 0x1C
810
811
812
813
814#define MT_TOOL_FINGER 0
815#define MT_TOOL_PEN 1
816
817
818
819
820#define FF_STATUS_STOPPED 0x00
821#define FF_STATUS_PLAYING 0x01
822#define FF_STATUS_MAX 0x01
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839struct ff_replay {
840 __u16 length;
841 __u16 delay;
842};
843
844
845
846
847
848
849struct ff_trigger {
850 __u16 button;
851 __u16 interval;
852};
853
854
855
856
857
858
859
860
861
862
863
864
865
866struct ff_envelope {
867 __u16 attack_length;
868 __u16 attack_level;
869 __u16 fade_length;
870 __u16 fade_level;
871};
872
873
874
875
876
877
878struct ff_constant_effect {
879 __s16 level;
880 struct ff_envelope envelope;
881};
882
883
884
885
886
887
888
889struct ff_ramp_effect {
890 __s16 start_level;
891 __s16 end_level;
892 struct ff_envelope envelope;
893};
894
895
896
897
898
899
900
901
902
903
904
905struct ff_condition_effect {
906 __u16 right_saturation;
907 __u16 left_saturation;
908
909 __s16 right_coeff;
910 __s16 left_coeff;
911
912 __u16 deadband;
913 __s16 center;
914};
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934struct ff_periodic_effect {
935 __u16 waveform;
936 __u16 period;
937 __s16 magnitude;
938 __s16 offset;
939 __u16 phase;
940
941 struct ff_envelope envelope;
942
943 __u32 custom_len;
944 __s16 __user *custom_data;
945};
946
947
948
949
950
951
952
953
954
955struct ff_rumble_effect {
956 __u16 strong_magnitude;
957 __u16 weak_magnitude;
958};
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983struct ff_effect {
984 __u16 type;
985 __s16 id;
986 __u16 direction;
987 struct ff_trigger trigger;
988 struct ff_replay replay;
989
990 union {
991 struct ff_constant_effect constant;
992 struct ff_ramp_effect ramp;
993 struct ff_periodic_effect periodic;
994 struct ff_condition_effect condition[2];
995 struct ff_rumble_effect rumble;
996 } u;
997};
998
999
1000
1001
1002
1003#define FF_RUMBLE 0x50
1004#define FF_PERIODIC 0x51
1005#define FF_CONSTANT 0x52
1006#define FF_SPRING 0x53
1007#define FF_FRICTION 0x54
1008#define FF_DAMPER 0x55
1009#define FF_INERTIA 0x56
1010#define FF_RAMP 0x57
1011
1012#define FF_EFFECT_MIN FF_RUMBLE
1013#define FF_EFFECT_MAX FF_RAMP
1014
1015
1016
1017
1018
1019#define FF_SQUARE 0x58
1020#define FF_TRIANGLE 0x59
1021#define FF_SINE 0x5a
1022#define FF_SAW_UP 0x5b
1023#define FF_SAW_DOWN 0x5c
1024#define FF_CUSTOM 0x5d
1025
1026#define FF_WAVEFORM_MIN FF_SQUARE
1027#define FF_WAVEFORM_MAX FF_CUSTOM
1028
1029
1030
1031
1032
1033#define FF_GAIN 0x60
1034#define FF_AUTOCENTER 0x61
1035
1036#define FF_MAX 0x7f
1037#define FF_CNT (FF_MAX+1)
1038
1039#ifdef __KERNEL__
1040
1041
1042
1043
1044
1045#include <linux/device.h>
1046#include <linux/fs.h>
1047#include <linux/timer.h>
1048#include <linux/mod_devicetable.h>
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127struct input_dev {
1128 const char *name;
1129 const char *phys;
1130 const char *uniq;
1131 struct input_id id;
1132
1133 unsigned long evbit[BITS_TO_LONGS(EV_CNT)];
1134 unsigned long keybit[BITS_TO_LONGS(KEY_CNT)];
1135 unsigned long relbit[BITS_TO_LONGS(REL_CNT)];
1136 unsigned long absbit[BITS_TO_LONGS(ABS_CNT)];
1137 unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)];
1138 unsigned long ledbit[BITS_TO_LONGS(LED_CNT)];
1139 unsigned long sndbit[BITS_TO_LONGS(SND_CNT)];
1140 unsigned long ffbit[BITS_TO_LONGS(FF_CNT)];
1141 unsigned long swbit[BITS_TO_LONGS(SW_CNT)];
1142
1143 unsigned int keycodemax;
1144 unsigned int keycodesize;
1145 void *keycode;
1146 int (*setkeycode)(struct input_dev *dev,
1147 unsigned int scancode, unsigned int keycode);
1148 int (*getkeycode)(struct input_dev *dev,
1149 unsigned int scancode, unsigned int *keycode);
1150
1151 struct ff_device *ff;
1152
1153 unsigned int repeat_key;
1154 struct timer_list timer;
1155
1156 int sync;
1157
1158 int abs[ABS_CNT];
1159 int rep[REP_MAX + 1];
1160
1161 unsigned long key[BITS_TO_LONGS(KEY_CNT)];
1162 unsigned long led[BITS_TO_LONGS(LED_CNT)];
1163 unsigned long snd[BITS_TO_LONGS(SND_CNT)];
1164 unsigned long sw[BITS_TO_LONGS(SW_CNT)];
1165
1166 int absmax[ABS_CNT];
1167 int absmin[ABS_CNT];
1168 int absfuzz[ABS_CNT];
1169 int absflat[ABS_CNT];
1170 int absres[ABS_CNT];
1171
1172 int (*open)(struct input_dev *dev);
1173 void (*close)(struct input_dev *dev);
1174 int (*flush)(struct input_dev *dev, struct file *file);
1175 int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);
1176
1177 struct input_handle *grab;
1178
1179 spinlock_t event_lock;
1180 struct mutex mutex;
1181
1182 unsigned int users;
1183 bool going_away;
1184
1185 struct device dev;
1186
1187 struct list_head h_list;
1188 struct list_head node;
1189};
1190#define to_input_dev(d) container_of(d, struct input_dev, dev)
1191
1192
1193
1194
1195
1196#if EV_MAX != INPUT_DEVICE_ID_EV_MAX
1197#error "EV_MAX and INPUT_DEVICE_ID_EV_MAX do not match"
1198#endif
1199
1200#if KEY_MIN_INTERESTING != INPUT_DEVICE_ID_KEY_MIN_INTERESTING
1201#error "KEY_MIN_INTERESTING and INPUT_DEVICE_ID_KEY_MIN_INTERESTING do not match"
1202#endif
1203
1204#if KEY_MAX != INPUT_DEVICE_ID_KEY_MAX
1205#error "KEY_MAX and INPUT_DEVICE_ID_KEY_MAX do not match"
1206#endif
1207
1208#if REL_MAX != INPUT_DEVICE_ID_REL_MAX
1209#error "REL_MAX and INPUT_DEVICE_ID_REL_MAX do not match"
1210#endif
1211
1212#if ABS_MAX != INPUT_DEVICE_ID_ABS_MAX
1213#error "ABS_MAX and INPUT_DEVICE_ID_ABS_MAX do not match"
1214#endif
1215
1216#if MSC_MAX != INPUT_DEVICE_ID_MSC_MAX
1217#error "MSC_MAX and INPUT_DEVICE_ID_MSC_MAX do not match"
1218#endif
1219
1220#if LED_MAX != INPUT_DEVICE_ID_LED_MAX
1221#error "LED_MAX and INPUT_DEVICE_ID_LED_MAX do not match"
1222#endif
1223
1224#if SND_MAX != INPUT_DEVICE_ID_SND_MAX
1225#error "SND_MAX and INPUT_DEVICE_ID_SND_MAX do not match"
1226#endif
1227
1228#if FF_MAX != INPUT_DEVICE_ID_FF_MAX
1229#error "FF_MAX and INPUT_DEVICE_ID_FF_MAX do not match"
1230#endif
1231
1232#if SW_MAX != INPUT_DEVICE_ID_SW_MAX
1233#error "SW_MAX and INPUT_DEVICE_ID_SW_MAX do not match"
1234#endif
1235
1236#define INPUT_DEVICE_ID_MATCH_DEVICE \
1237 (INPUT_DEVICE_ID_MATCH_BUS | INPUT_DEVICE_ID_MATCH_VENDOR | INPUT_DEVICE_ID_MATCH_PRODUCT)
1238#define INPUT_DEVICE_ID_MATCH_DEVICE_AND_VERSION \
1239 (INPUT_DEVICE_ID_MATCH_DEVICE | INPUT_DEVICE_ID_MATCH_VERSION)
1240
1241struct input_handle;
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280struct input_handler {
1281
1282 void *private;
1283
1284 void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
1285 bool (*filter)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
1286 bool (*match)(struct input_handler *handler, struct input_dev *dev);
1287 int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id);
1288 void (*disconnect)(struct input_handle *handle);
1289 void (*start)(struct input_handle *handle);
1290
1291 const struct file_operations *fops;
1292 int minor;
1293 const char *name;
1294
1295 const struct input_device_id *id_table;
1296
1297 struct list_head h_list;
1298 struct list_head node;
1299};
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313struct input_handle {
1314
1315 void *private;
1316
1317 int open;
1318 const char *name;
1319
1320 struct input_dev *dev;
1321 struct input_handler *handler;
1322
1323 struct list_head d_node;
1324 struct list_head h_node;
1325};
1326
1327struct input_dev *input_allocate_device(void);
1328void input_free_device(struct input_dev *dev);
1329
1330static inline struct input_dev *input_get_device(struct input_dev *dev)
1331{
1332 return dev ? to_input_dev(get_device(&dev->dev)) : NULL;
1333}
1334
1335static inline void input_put_device(struct input_dev *dev)
1336{
1337 if (dev)
1338 put_device(&dev->dev);
1339}
1340
1341static inline void *input_get_drvdata(struct input_dev *dev)
1342{
1343 return dev_get_drvdata(&dev->dev);
1344}
1345
1346static inline void input_set_drvdata(struct input_dev *dev, void *data)
1347{
1348 dev_set_drvdata(&dev->dev, data);
1349}
1350
1351int __must_check input_register_device(struct input_dev *);
1352void input_unregister_device(struct input_dev *);
1353
1354int __must_check input_register_handler(struct input_handler *);
1355void input_unregister_handler(struct input_handler *);
1356
1357int input_handler_for_each_handle(struct input_handler *, void *data,
1358 int (*fn)(struct input_handle *, void *));
1359
1360int input_register_handle(struct input_handle *);
1361void input_unregister_handle(struct input_handle *);
1362
1363int input_grab_device(struct input_handle *);
1364void input_release_device(struct input_handle *);
1365
1366int input_open_device(struct input_handle *);
1367void input_close_device(struct input_handle *);
1368
1369int input_flush_device(struct input_handle* handle, struct file* file);
1370
1371void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value);
1372void input_inject_event(struct input_handle *handle, unsigned int type, unsigned int code, int value);
1373
1374static inline void input_report_key(struct input_dev *dev, unsigned int code, int value)
1375{
1376 input_event(dev, EV_KEY, code, !!value);
1377}
1378
1379static inline void input_report_rel(struct input_dev *dev, unsigned int code, int value)
1380{
1381 input_event(dev, EV_REL, code, value);
1382}
1383
1384static inline void input_report_abs(struct input_dev *dev, unsigned int code, int value)
1385{
1386 input_event(dev, EV_ABS, code, value);
1387}
1388
1389static inline void input_report_ff_status(struct input_dev *dev, unsigned int code, int value)
1390{
1391 input_event(dev, EV_FF_STATUS, code, value);
1392}
1393
1394static inline void input_report_switch(struct input_dev *dev, unsigned int code, int value)
1395{
1396 input_event(dev, EV_SW, code, !!value);
1397}
1398
1399static inline void input_sync(struct input_dev *dev)
1400{
1401 input_event(dev, EV_SYN, SYN_REPORT, 0);
1402}
1403
1404static inline void input_mt_sync(struct input_dev *dev)
1405{
1406 input_event(dev, EV_SYN, SYN_MT_REPORT, 0);
1407}
1408
1409void input_set_capability(struct input_dev *dev, unsigned int type, unsigned int code);
1410
1411static inline void input_set_abs_params(struct input_dev *dev, int axis, int min, int max, int fuzz, int flat)
1412{
1413 dev->absmin[axis] = min;
1414 dev->absmax[axis] = max;
1415 dev->absfuzz[axis] = fuzz;
1416 dev->absflat[axis] = flat;
1417
1418 dev->absbit[BIT_WORD(axis)] |= BIT_MASK(axis);
1419}
1420
1421int input_get_keycode(struct input_dev *dev,
1422 unsigned int scancode, unsigned int *keycode);
1423int input_set_keycode(struct input_dev *dev,
1424 unsigned int scancode, unsigned int keycode);
1425
1426extern struct class input_class;
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455struct ff_device {
1456 int (*upload)(struct input_dev *dev, struct ff_effect *effect,
1457 struct ff_effect *old);
1458 int (*erase)(struct input_dev *dev, int effect_id);
1459
1460 int (*playback)(struct input_dev *dev, int effect_id, int value);
1461 void (*set_gain)(struct input_dev *dev, u16 gain);
1462 void (*set_autocenter)(struct input_dev *dev, u16 magnitude);
1463
1464 void (*destroy)(struct ff_device *);
1465
1466 void *private;
1467
1468 unsigned long ffbit[BITS_TO_LONGS(FF_CNT)];
1469
1470 struct mutex mutex;
1471
1472 int max_effects;
1473 struct ff_effect *effects;
1474 struct file *effect_owners[];
1475};
1476
1477int input_ff_create(struct input_dev *dev, int max_effects);
1478void input_ff_destroy(struct input_dev *dev);
1479
1480int input_ff_event(struct input_dev *dev, unsigned int type, unsigned int code, int value);
1481
1482int input_ff_upload(struct input_dev *dev, struct ff_effect *effect, struct file *file);
1483int input_ff_erase(struct input_dev *dev, int effect_id, struct file *file);
1484
1485int input_ff_create_memless(struct input_dev *dev, void *data,
1486 int (*play_effect)(struct input_dev *, void *, struct ff_effect *));
1487
1488#endif
1489#endif
1490