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