1#ifndef _INPUT_H
2#define _INPUT_H
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32#ifdef __KERNEL__
33#include <linux/time.h>
34#else
35#include <sys/time.h>
36#include <sys/ioctl.h>
37#include <asm/types.h>
38#endif
39
40
41
42
43
44struct input_event {
45 struct timeval time;
46 unsigned short type;
47 unsigned short code;
48 unsigned int value;
49};
50
51
52
53
54
55#define EV_VERSION 0x010000
56
57
58
59
60
61#define EVIOCGVERSION _IOR('E', 0x01, int)
62#define EVIOCGID _IOR('E', 0x02, short[4])
63#define EVIOCGREP _IOR('E', 0x03, int[2])
64#define EVIOCSREP _IOW('E', 0x03, int[2])
65#define EVIOCGKEYCODE _IOR('E', 0x04, int[2])
66#define EVIOCSKEYCODE _IOW('E', 0x04, int[2])
67#define EVIOCGKEY _IOR('E', 0x05, int[2])
68#define EVIOCGNAME(len) _IOC(_IOC_READ, 'E', 0x06, len)
69#define EVIOCGBUS _IOR('E', 0x07, short[4])
70
71#define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len)
72#define EVIOCGABS(abs) _IOR('E', 0x40 + abs, int[5])
73
74#define EVIOCSFF _IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect))
75#define EVIOCRMFF _IOW('E', 0x81, int)
76#define EVIOCSGAIN _IOW('E', 0x82, unsigned short)
77#define EVIOCSAUTOCENTER _IOW('E', 0x83, unsigned short)
78#define EVIOCGEFFECTS _IOR('E', 0x84, int)
79
80
81
82
83
84#define EV_RST 0x00
85#define EV_KEY 0x01
86#define EV_REL 0x02
87#define EV_ABS 0x03
88#define EV_MSC 0x04
89#define EV_LED 0x11
90#define EV_SND 0x12
91#define EV_REP 0x14
92#define EV_FF 0x15
93#define EV_MAX 0x1f
94
95
96
97
98
99#define KEY_RESERVED 0
100#define KEY_ESC 1
101#define KEY_1 2
102#define KEY_2 3
103#define KEY_3 4
104#define KEY_4 5
105#define KEY_5 6
106#define KEY_6 7
107#define KEY_7 8
108#define KEY_8 9
109#define KEY_9 10
110#define KEY_0 11
111#define KEY_MINUS 12
112#define KEY_EQUAL 13
113#define KEY_BACKSPACE 14
114#define KEY_TAB 15
115#define KEY_Q 16
116#define KEY_W 17
117#define KEY_E 18
118#define KEY_R 19
119#define KEY_T 20
120#define KEY_Y 21
121#define KEY_U 22
122#define KEY_I 23
123#define KEY_O 24
124#define KEY_P 25
125#define KEY_LEFTBRACE 26
126#define KEY_RIGHTBRACE 27
127#define KEY_ENTER 28
128#define KEY_LEFTCTRL 29
129#define KEY_A 30
130#define KEY_S 31
131#define KEY_D 32
132#define KEY_F 33
133#define KEY_G 34
134#define KEY_H 35
135#define KEY_J 36
136#define KEY_K 37
137#define KEY_L 38
138#define KEY_SEMICOLON 39
139#define KEY_APOSTROPHE 40
140#define KEY_GRAVE 41
141#define KEY_LEFTSHIFT 42
142#define KEY_BACKSLASH 43
143#define KEY_Z 44
144#define KEY_X 45
145#define KEY_C 46
146#define KEY_V 47
147#define KEY_B 48
148#define KEY_N 49
149#define KEY_M 50
150#define KEY_COMMA 51
151#define KEY_DOT 52
152#define KEY_SLASH 53
153#define KEY_RIGHTSHIFT 54
154#define KEY_KPASTERISK 55
155#define KEY_LEFTALT 56
156#define KEY_SPACE 57
157#define KEY_CAPSLOCK 58
158#define KEY_F1 59
159#define KEY_F2 60
160#define KEY_F3 61
161#define KEY_F4 62
162#define KEY_F5 63
163#define KEY_F6 64
164#define KEY_F7 65
165#define KEY_F8 66
166#define KEY_F9 67
167#define KEY_F10 68
168#define KEY_NUMLOCK 69
169#define KEY_SCROLLLOCK 70
170#define KEY_KP7 71
171#define KEY_KP8 72
172#define KEY_KP9 73
173#define KEY_KPMINUS 74
174#define KEY_KP4 75
175#define KEY_KP5 76
176#define KEY_KP6 77
177#define KEY_KPPLUS 78
178#define KEY_KP1 79
179#define KEY_KP2 80
180#define KEY_KP3 81
181#define KEY_KP0 82
182#define KEY_KPDOT 83
183#define KEY_103RD 84
184#define KEY_F13 85
185#define KEY_102ND 86
186#define KEY_F11 87
187#define KEY_F12 88
188#define KEY_F14 89
189#define KEY_F15 90
190#define KEY_F16 91
191#define KEY_F17 92
192#define KEY_F18 93
193#define KEY_F19 94
194#define KEY_F20 95
195#define KEY_KPENTER 96
196#define KEY_RIGHTCTRL 97
197#define KEY_KPSLASH 98
198#define KEY_SYSRQ 99
199#define KEY_RIGHTALT 100
200#define KEY_LINEFEED 101
201#define KEY_HOME 102
202#define KEY_UP 103
203#define KEY_PAGEUP 104
204#define KEY_LEFT 105
205#define KEY_RIGHT 106
206#define KEY_END 107
207#define KEY_DOWN 108
208#define KEY_PAGEDOWN 109
209#define KEY_INSERT 110
210#define KEY_DELETE 111
211#define KEY_MACRO 112
212#define KEY_MUTE 113
213#define KEY_VOLUMEDOWN 114
214#define KEY_VOLUMEUP 115
215#define KEY_POWER 116
216#define KEY_KPEQUAL 117
217#define KEY_KPPLUSMINUS 118
218#define KEY_PAUSE 119
219#define KEY_F21 120
220#define KEY_F22 121
221#define KEY_F23 122
222#define KEY_F24 123
223#define KEY_KPCOMMA 124
224#define KEY_LEFTMETA 125
225#define KEY_RIGHTMETA 126
226#define KEY_COMPOSE 127
227
228#define KEY_STOP 128
229#define KEY_AGAIN 129
230#define KEY_PROPS 130
231#define KEY_UNDO 131
232#define KEY_FRONT 132
233#define KEY_COPY 133
234#define KEY_OPEN 134
235#define KEY_PASTE 135
236#define KEY_FIND 136
237#define KEY_CUT 137
238#define KEY_HELP 138
239#define KEY_MENU 139
240#define KEY_CALC 140
241#define KEY_SETUP 141
242#define KEY_SLEEP 142
243#define KEY_WAKEUP 143
244#define KEY_FILE 144
245#define KEY_SENDFILE 145
246#define KEY_DELETEFILE 146
247#define KEY_XFER 147
248#define KEY_PROG1 148
249#define KEY_PROG2 149
250#define KEY_WWW 150
251#define KEY_MSDOS 151
252#define KEY_COFFEE 152
253#define KEY_DIRECTION 153
254#define KEY_CYCLEWINDOWS 154
255#define KEY_MAIL 155
256#define KEY_BOOKMARKS 156
257#define KEY_COMPUTER 157
258#define KEY_BACK 158
259#define KEY_FORWARD 159
260#define KEY_CLOSECD 160
261#define KEY_EJECTCD 161
262#define KEY_EJECTCLOSECD 162
263#define KEY_NEXTSONG 163
264#define KEY_PLAYPAUSE 164
265#define KEY_PREVIOUSSONG 165
266#define KEY_STOPCD 166
267#define KEY_RECORD 167
268#define KEY_REWIND 168
269#define KEY_PHONE 169
270#define KEY_ISO 170
271#define KEY_CONFIG 171
272#define KEY_HOMEPAGE 172
273#define KEY_REFRESH 173
274#define KEY_EXIT 174
275#define KEY_MOVE 175
276#define KEY_EDIT 176
277#define KEY_SCROLLUP 177
278#define KEY_SCROLLDOWN 178
279#define KEY_KPLEFTPAREN 179
280#define KEY_KPRIGHTPAREN 180
281
282#define KEY_INTL1 181
283#define KEY_INTL2 182
284#define KEY_INTL3 183
285#define KEY_INTL4 184
286#define KEY_INTL5 185
287#define KEY_INTL6 186
288#define KEY_INTL7 187
289#define KEY_INTL8 188
290#define KEY_INTL9 189
291#define KEY_LANG1 190
292#define KEY_LANG2 191
293#define KEY_LANG3 192
294#define KEY_LANG4 193
295#define KEY_LANG5 194
296#define KEY_LANG6 195
297#define KEY_LANG7 196
298#define KEY_LANG8 197
299#define KEY_LANG9 198
300
301#define KEY_PLAYCD 200
302#define KEY_PAUSECD 201
303#define KEY_PROG3 202
304#define KEY_PROG4 203
305#define KEY_SUSPEND 205
306#define KEY_CLOSE 206
307
308#define KEY_UNKNOWN 220
309
310#define KEY_BRIGHTNESSDOWN 224
311#define KEY_BRIGHTNESSUP 225
312
313#define BTN_MISC 0x100
314#define BTN_0 0x100
315#define BTN_1 0x101
316#define BTN_2 0x102
317#define BTN_3 0x103
318#define BTN_4 0x104
319#define BTN_5 0x105
320#define BTN_6 0x106
321#define BTN_7 0x107
322#define BTN_8 0x108
323#define BTN_9 0x109
324
325#define BTN_MOUSE 0x110
326#define BTN_LEFT 0x110
327#define BTN_RIGHT 0x111
328#define BTN_MIDDLE 0x112
329#define BTN_SIDE 0x113
330#define BTN_EXTRA 0x114
331#define BTN_FORWARD 0x115
332#define BTN_BACK 0x116
333
334#define BTN_JOYSTICK 0x120
335#define BTN_TRIGGER 0x120
336#define BTN_THUMB 0x121
337#define BTN_THUMB2 0x122
338#define BTN_TOP 0x123
339#define BTN_TOP2 0x124
340#define BTN_PINKIE 0x125
341#define BTN_BASE 0x126
342#define BTN_BASE2 0x127
343#define BTN_BASE3 0x128
344#define BTN_BASE4 0x129
345#define BTN_BASE5 0x12a
346#define BTN_BASE6 0x12b
347#define BTN_DEAD 0x12f
348
349#define BTN_GAMEPAD 0x130
350#define BTN_A 0x130
351#define BTN_B 0x131
352#define BTN_C 0x132
353#define BTN_X 0x133
354#define BTN_Y 0x134
355#define BTN_Z 0x135
356#define BTN_TL 0x136
357#define BTN_TR 0x137
358#define BTN_TL2 0x138
359#define BTN_TR2 0x139
360#define BTN_SELECT 0x13a
361#define BTN_START 0x13b
362#define BTN_MODE 0x13c
363#define BTN_THUMBL 0x13d
364#define BTN_THUMBR 0x13e
365
366#define BTN_DIGI 0x140
367#define BTN_TOOL_PEN 0x140
368#define BTN_TOOL_RUBBER 0x141
369#define BTN_TOOL_BRUSH 0x142
370#define BTN_TOOL_PENCIL 0x143
371#define BTN_TOOL_AIRBRUSH 0x144
372#define BTN_TOOL_FINGER 0x145
373#define BTN_TOOL_MOUSE 0x146
374#define BTN_TOOL_LENS 0x147
375#define BTN_TOUCH 0x14a
376#define BTN_STYLUS 0x14b
377#define BTN_STYLUS2 0x14c
378
379#define KEY_MAX 0x1ff
380
381
382
383
384
385#define REL_X 0x00
386#define REL_Y 0x01
387#define REL_Z 0x02
388#define REL_HWHEEL 0x06
389#define REL_DIAL 0x07
390#define REL_WHEEL 0x08
391#define REL_MISC 0x09
392#define REL_MAX 0x0f
393
394
395
396
397
398#define ABS_X 0x00
399#define ABS_Y 0x01
400#define ABS_Z 0x02
401#define ABS_RX 0x03
402#define ABS_RY 0x04
403#define ABS_RZ 0x05
404#define ABS_THROTTLE 0x06
405#define ABS_RUDDER 0x07
406#define ABS_WHEEL 0x08
407#define ABS_GAS 0x09
408#define ABS_BRAKE 0x0a
409#define ABS_HAT0X 0x10
410#define ABS_HAT0Y 0x11
411#define ABS_HAT1X 0x12
412#define ABS_HAT1Y 0x13
413#define ABS_HAT2X 0x14
414#define ABS_HAT2Y 0x15
415#define ABS_HAT3X 0x16
416#define ABS_HAT3Y 0x17
417#define ABS_PRESSURE 0x18
418#define ABS_DISTANCE 0x19
419#define ABS_TILT_X 0x1a
420#define ABS_TILT_Y 0x1b
421#define ABS_MISC 0x1c
422#define ABS_MAX 0x1f
423
424
425
426
427
428#define MSC_SERIAL 0x00
429#define MSC_PULSELED 0x01
430#define MSC_MAX 0x07
431
432
433
434
435
436#define LED_NUML 0x00
437#define LED_CAPSL 0x01
438#define LED_SCROLLL 0x02
439#define LED_COMPOSE 0x03
440#define LED_KANA 0x04
441#define LED_SLEEP 0x05
442#define LED_SUSPEND 0x06
443#define LED_MUTE 0x07
444#define LED_MISC 0x08
445#define LED_MAX 0x0f
446
447
448
449
450
451#define REP_DELAY 0x00
452#define REP_PERIOD 0x01
453#define REP_MAX 0x01
454
455
456
457
458
459#define SND_CLICK 0x00
460#define SND_BELL 0x01
461#define SND_MAX 0x07
462
463
464
465
466
467#define ID_BUS 0
468#define ID_VENDOR 1
469#define ID_PRODUCT 2
470#define ID_VERSION 3
471
472#define BUS_PCI 0x01
473#define BUS_ISAPNP 0x02
474#define BUS_USB 0x03
475#define BUS_HIL 0x04
476#define BUS_BLUETOOTH 0x05
477
478#define BUS_ISA 0x10
479#define BUS_I8042 0x11
480#define BUS_XTKBD 0x12
481#define BUS_RS232 0x13
482#define BUS_GAMEPORT 0x14
483#define BUS_PARPORT 0x15
484#define BUS_AMIGA 0x16
485#define BUS_ADB 0x17
486#define BUS_I2C 0x18
487
488
489
490
491
492
493
494struct ff_replay {
495 __u16 length;
496 __u16 delay;
497};
498
499struct ff_trigger {
500 __u16 button;
501 __u16 interval;
502};
503
504struct ff_shape {
505 __u16 attack_length;
506 __s16 attack_level;
507 __u16 fade_length;
508 __s16 fade_level;
509};
510
511
512struct ff_constant_effect {
513 __s16 level;
514 __u16 direction;
515 struct ff_shape shape;
516};
517
518
519struct ff_interactive_effect {
520
521
522
523
524 __u16 axis;
525 __u16 direction;
526
527 __s16 right_saturation;
528 __s16 left_saturation;
529
530 __s16 right_coeff;
531
532 __s16 left_coeff;
533
534 __u16 deadband;
535 __s16 center;
536
537};
538
539
540struct ff_periodic_effect {
541 __u16 waveform;
542 __u16 period;
543 __s16 magnitude;
544 __s16 offset;
545 __u16 phase;
546 __u16 direction;
547
548
549 struct ff_shape shape;
550};
551
552
553
554
555struct ff_effect {
556 __u16 type;
557
558
559
560 __s16 id;
561
562 struct ff_trigger trigger;
563 struct ff_replay replay;
564
565 union {
566 struct ff_constant_effect constant;
567 struct ff_periodic_effect periodic;
568 struct ff_interactive_effect interactive;
569 } u;
570};
571
572
573
574
575
576
577#define FF_BTN(x) ((x) - BTN_MISC + FF_BTN_OFFSET)
578#define FF_BTN_OFFSET 0x00
579
580
581
582
583
584#define FF_ABS(x) ((x) + FF_ABS_OFFSET)
585#define FF_ABS_OFFSET 0x40
586
587
588
589
590
591#define FF_RUMBLE 0x50
592#define FF_PERIODIC 0x51
593#define FF_CONSTANT 0x52
594#define FF_SPRING 0x53
595#define FF_FRICTION 0x54
596
597
598
599
600
601#define FF_SQUARE 0x58
602#define FF_TRIANGLE 0x59
603#define FF_SINE 0x5a
604#define FF_SAW_UP 0x5b
605#define FF_SAW_DOWN 0x5c
606#define FF_CUSTOM 0x5d
607
608
609
610
611
612#define FF_GAIN 0x60
613#define FF_AUTOCENTER 0x61
614
615#define FF_MAX 0x7f
616
617#ifdef __KERNEL__
618
619
620
621
622
623#include <linux/sched.h>
624#include <linux/devfs_fs_kernel.h>
625
626#define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1)
627#define BIT(x) (1UL<<((x)%BITS_PER_LONG))
628#define LONG(x) ((x)/BITS_PER_LONG)
629
630struct input_dev {
631
632 void *private;
633
634 int number;
635 char *name;
636 unsigned short idbus;
637 unsigned short idvendor;
638 unsigned short idproduct;
639 unsigned short idversion;
640
641 unsigned long evbit[NBITS(EV_MAX)];
642 unsigned long keybit[NBITS(KEY_MAX)];
643 unsigned long relbit[NBITS(REL_MAX)];
644 unsigned long absbit[NBITS(ABS_MAX)];
645 unsigned long mscbit[NBITS(MSC_MAX)];
646 unsigned long ledbit[NBITS(LED_MAX)];
647 unsigned long sndbit[NBITS(SND_MAX)];
648 unsigned long ffbit[NBITS(FF_MAX)];
649 int ff_effects_max;
650
651 unsigned int keycodemax;
652 unsigned int keycodesize;
653 void *keycode;
654
655 unsigned int repeat_key;
656 struct timer_list timer;
657
658 int abs[ABS_MAX + 1];
659 int rep[REP_MAX + 1];
660
661 unsigned long key[NBITS(KEY_MAX)];
662 unsigned long led[NBITS(LED_MAX)];
663 unsigned long snd[NBITS(SND_MAX)];
664
665 int absmax[ABS_MAX + 1];
666 int absmin[ABS_MAX + 1];
667 int absfuzz[ABS_MAX + 1];
668 int absflat[ABS_MAX + 1];
669
670 int (*open)(struct input_dev *dev);
671 void (*close)(struct input_dev *dev);
672 int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);
673 int (*upload_effect)(struct input_dev *dev, struct ff_effect *effect);
674 int (*erase_effect)(struct input_dev *dev, int effect_id);
675
676 struct input_handle *handle;
677 struct input_dev *next;
678};
679
680struct input_handler {
681
682 void *private;
683
684 void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
685 struct input_handle* (*connect)(struct input_handler *handler, struct input_dev *dev);
686 void (*disconnect)(struct input_handle *handle);
687
688 struct file_operations *fops;
689 int minor;
690
691 struct input_handle *handle;
692 struct input_handler *next;
693};
694
695struct input_handle {
696
697 void *private;
698
699 int open;
700
701 struct input_dev *dev;
702 struct input_handler *handler;
703
704 struct input_handle *dnext;
705 struct input_handle *hnext;
706};
707
708void input_register_device(struct input_dev *);
709void input_unregister_device(struct input_dev *);
710
711void input_register_handler(struct input_handler *);
712void input_unregister_handler(struct input_handler *);
713
714int input_open_device(struct input_handle *);
715void input_close_device(struct input_handle *);
716
717devfs_handle_t input_register_minor(char *name, int minor, int minor_base);
718void input_unregister_minor(devfs_handle_t handle);
719
720void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value);
721
722#define input_report_key(a,b,c) input_event(a, EV_KEY, b, !!(c))
723#define input_report_rel(a,b,c) input_event(a, EV_REL, b, c)
724#define input_report_abs(a,b,c) input_event(a, EV_ABS, b, c)
725
726#endif
727#endif
728