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