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