1#ifndef _INPUT_H
2#define _INPUT_H
3
4/*
5 * $Id: input.h,v 1.1.1.1 2008/10/15 03:29:27 james26_jang Exp $
6 *
7 *  Copyright (c) 1999-2000 Vojtech Pavlik
8 *
9 *  Sponsored by SuSE
10 */
11
12/*
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2 of the License, or
16 * (at your option) any later version.
17 *
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with this program; if not, write to the Free Software
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26 *
27 * Should you need to contact me, the author, you can do so either by
28 * e-mail - mail your message to <vojtech@suse.cz>, or by paper mail:
29 * Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic
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 * The event structure itself
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 * Protocol version.
53 */
54
55#define EV_VERSION		0x010000
56
57/*
58 * IOCTLs (0x00 - 0x7f)
59 */
60
61#define EVIOCGVERSION		_IOR('E', 0x01, int)			/* get driver version */
62#define EVIOCGID		_IOR('E', 0x02, short[4])		/* get device ID */
63#define EVIOCGREP		_IOR('E', 0x03, int[2])			/* get repeat settings */
64#define EVIOCSREP		_IOW('E', 0x03, int[2])			/* get repeat settings */
65#define EVIOCGKEYCODE		_IOR('E', 0x04, int[2])			/* get keycode */
66#define EVIOCSKEYCODE		_IOW('E', 0x04, int[2])			/* set keycode */
67#define EVIOCGKEY		_IOR('E', 0x05, int[2])			/* get key value */
68#define EVIOCGNAME(len)		_IOC(_IOC_READ, 'E', 0x06, len)		/* get device name */
69#define EVIOCGBUS		_IOR('E', 0x07, short[4])		/* get bus address */
70
71#define EVIOCGBIT(ev,len)	_IOC(_IOC_READ, 'E', 0x20 + ev, len)	/* get event bits */
72#define EVIOCGABS(abs)		_IOR('E', 0x40 + abs, int[5])		/* get abs value/limits */
73
74#define EVIOCSFF		_IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect))	/* send a force effect to a force feedback device */
75#define EVIOCRMFF		_IOW('E', 0x81, int)			/* Erase a force effect */
76#define EVIOCSGAIN		_IOW('E', 0x82, unsigned short)		/* Set overall gain */
77#define EVIOCSAUTOCENTER	_IOW('E', 0x83, unsigned short)		/* Enable or disable auto-centering */
78#define EVIOCGEFFECTS		_IOR('E', 0x84, int)			/* Report number of effects playable at the same time */
79
80/*
81 * Event types
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 * Keys and buttons
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 * Relative axes
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 * Absolute axes
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 * Misc events
426 */
427
428#define MSC_SERIAL		0x00
429#define MSC_MAX			0x07
430
431/*
432 * LEDs
433 */
434
435#define LED_NUML		0x00
436#define LED_CAPSL		0x01
437#define LED_SCROLLL		0x02
438#define LED_COMPOSE		0x03
439#define LED_KANA		0x04
440#define LED_SLEEP		0x05
441#define LED_SUSPEND		0x06
442#define LED_MUTE		0x07
443#define LED_MISC		0x08
444#define LED_MAX			0x0f
445
446/*
447 * Autorepeat values
448 */
449
450#define REP_DELAY		0x00
451#define REP_PERIOD		0x01
452#define REP_MAX			0x01
453
454/*
455 * Sounds
456 */
457
458#define SND_CLICK		0x00
459#define SND_BELL		0x01
460#define SND_MAX			0x07
461
462/*
463 * IDs.
464 */
465
466#define ID_BUS			0
467#define ID_VENDOR		1
468#define ID_PRODUCT		2
469#define ID_VERSION		3
470
471#define BUS_PCI			0x01
472#define BUS_ISAPNP		0x02
473#define BUS_USB			0x03
474#define BUS_HIL                 0x04
475
476#define BUS_ISA			0x10
477#define BUS_I8042		0x11
478#define BUS_XTKBD		0x12
479#define BUS_RS232		0x13
480#define BUS_GAMEPORT		0x14
481#define BUS_PARPORT		0x15
482#define BUS_AMIGA		0x16
483#define BUS_ADB			0x17
484#define BUS_I2C			0x18
485
486/*
487 * Structures used in ioctls to upload effects to a device
488 * The first structures are not passed directly by using ioctls.
489 * They are sub-structures of the actually sent structure (called ff_effect)
490 */
491
492struct ff_replay {
493	__u16 length;		/* Duration of an effect */
494	__u16 delay;		/* Time to wait before to start playing an effect */
495};
496
497struct ff_trigger {
498	__u16 button;		/* Number of button triggering an effect */
499	__u16 interval;		/* Time to wait before an effect can be re-triggered */
500};
501
502struct ff_shape {
503	__u16 attack_length;	/* Duration of attack */
504	__s16 attack_level;	/* Level at beginning of attack */
505	__u16 fade_length;	/* Duration of fade */
506	__s16 fade_level;	/* Level at end of fade */
507};
508
509/* FF_CONSTANT */
510struct ff_constant_effect {
511	__s16 level;		/* Strength of effect */
512	__u16 direction;	/* Direction of effect (see periodic effects) */
513	struct ff_shape shape;
514};
515
516/* FF_SPRING of FF_FRICTION */
517struct ff_interactive_effect {
518/* Axis along which effect must be created. If null, the field named direction
519 * is used
520 * It is a bit array (ie to enable axes X and Y, use BIT(ABS_X) | BIT(ABS_Y)
521 */
522	__u16 axis;
523	__u16 direction;
524
525	__s16 right_saturation; /* Max level when joystick is on the right */
526	__s16 left_saturation;  /* Max level when joystick in on the left */
527
528	__s16 right_coeff;	/* Indicates how fast the force grows when the
529				   joystick moves to the right */
530	__s16 left_coeff;	/* Same for left side */
531
532	__u16 deadband;		/* Size of area where no force is produced */
533	__s16 center;		/* Position of dead dead zone */
534
535};
536
537/* FF_PERIODIC */
538struct ff_periodic_effect {
539	__u16 waveform;		/* Kind of wave (sine, square...) */
540	__u16 period;
541	__s16 magnitude;	/* Peak value */
542	__s16 offset;		/* Mean value of wave (roughly) */
543	__u16 phase;		/* 'Horizontal' shift */
544	__u16 direction;	/* Direction. 0 deg -> 0x0000
545					     90 deg -> 0x4000 */
546
547	struct ff_shape shape;
548};
549
550/*
551 * Structure sent through ioctl from the application to the driver
552 */
553struct ff_effect {
554	__u16 type;
555/* Following field denotes the unique id assigned to an effect.
556 * It is set by the driver.
557 */
558	__s16 id;
559
560	struct ff_trigger trigger;
561	struct ff_replay replay;
562
563	union {
564		struct ff_constant_effect constant;
565		struct ff_periodic_effect periodic;
566		struct ff_interactive_effect interactive;
567	} u;
568};
569
570/*
571 * Buttons that can trigger effects.  Use for example FF_BTN(BTN_TRIGGER) to
572 * access the bitmap.
573 */
574
575#define FF_BTN(x)	((x) - BTN_MISC + FF_BTN_OFFSET)
576#define FF_BTN_OFFSET	0x00
577
578/*
579 * Force feedback axis mappings. Use FF_ABS() to access the bitmap.
580 */
581
582#define FF_ABS(x)	((x) + FF_ABS_OFFSET)
583#define FF_ABS_OFFSET	0x40
584
585/*
586 * Force feedback effect types
587 */
588
589#define FF_RUMBLE	0x50
590#define FF_PERIODIC	0x51
591#define FF_CONSTANT	0x52
592#define FF_SPRING	0x53
593#define FF_FRICTION	0x54
594
595/*
596 * Force feedback periodic effect types
597 */
598
599#define FF_SQUARE	0x58
600#define FF_TRIANGLE	0x59
601#define FF_SINE		0x5a
602#define FF_SAW_UP	0x5b
603#define FF_SAW_DOWN	0x5c
604#define FF_CUSTOM	0x5d
605
606/*
607 * Set ff device properties
608 */
609
610#define FF_GAIN		0x60
611#define FF_AUTOCENTER	0x61
612
613#define FF_MAX		0x7f
614
615#ifdef __KERNEL__
616
617/*
618 * In-kernel definitions.
619 */
620
621#include <linux/sched.h>
622#include <linux/devfs_fs_kernel.h>
623
624#define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1)
625#define BIT(x)	(1UL<<((x)%BITS_PER_LONG))
626#define LONG(x) ((x)/BITS_PER_LONG)
627
628struct input_dev {
629
630	void *private;
631
632	int number;
633	char *name;
634	unsigned short idbus;
635	unsigned short idvendor;
636	unsigned short idproduct;
637	unsigned short idversion;
638
639	unsigned long evbit[NBITS(EV_MAX)];
640	unsigned long keybit[NBITS(KEY_MAX)];
641	unsigned long relbit[NBITS(REL_MAX)];
642	unsigned long absbit[NBITS(ABS_MAX)];
643	unsigned long mscbit[NBITS(MSC_MAX)];
644	unsigned long ledbit[NBITS(LED_MAX)];
645	unsigned long sndbit[NBITS(SND_MAX)];
646	unsigned long ffbit[NBITS(FF_MAX)];
647	int ff_effects_max;
648
649	unsigned int keycodemax;
650	unsigned int keycodesize;
651	void *keycode;
652
653	unsigned int repeat_key;
654	struct timer_list timer;
655
656	int abs[ABS_MAX + 1];
657	int rep[REP_MAX + 1];
658
659	unsigned long key[NBITS(KEY_MAX)];
660	unsigned long led[NBITS(LED_MAX)];
661	unsigned long snd[NBITS(SND_MAX)];
662
663	int absmax[ABS_MAX + 1];
664	int absmin[ABS_MAX + 1];
665	int absfuzz[ABS_MAX + 1];
666	int absflat[ABS_MAX + 1];
667
668	int (*open)(struct input_dev *dev);
669	void (*close)(struct input_dev *dev);
670	int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);
671	int (*upload_effect)(struct input_dev *dev, struct ff_effect *effect);
672	int (*erase_effect)(struct input_dev *dev, int effect_id);
673
674	struct input_handle *handle;
675	struct input_dev *next;
676};
677
678struct input_handler {
679
680	void *private;
681
682	void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
683	struct input_handle* (*connect)(struct input_handler *handler, struct input_dev *dev);
684	void (*disconnect)(struct input_handle *handle);
685
686	struct file_operations *fops;
687	int minor;
688
689	struct input_handle *handle;
690	struct input_handler *next;
691};
692
693struct input_handle {
694
695	void *private;
696
697	int open;
698
699	struct input_dev *dev;
700	struct input_handler *handler;
701
702	struct input_handle *dnext;
703	struct input_handle *hnext;
704};
705
706void input_register_device(struct input_dev *);
707void input_unregister_device(struct input_dev *);
708
709void input_register_handler(struct input_handler *);
710void input_unregister_handler(struct input_handler *);
711
712int input_open_device(struct input_handle *);
713void input_close_device(struct input_handle *);
714
715devfs_handle_t input_register_minor(char *name, int minor, int minor_base);
716void input_unregister_minor(devfs_handle_t handle);
717
718void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value);
719
720#define input_report_key(a,b,c) input_event(a, EV_KEY, b, !!(c))
721#define input_report_rel(a,b,c) input_event(a, EV_REL, b, c)
722#define input_report_abs(a,b,c) input_event(a, EV_ABS, b, c)
723
724#endif
725#endif
726