5 * $Id: input.h,v 1.1.1.1 2005/04/11 02:51:02 jack Exp $
7 * Copyright (c) 1999-2000 Vojtech Pavlik
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.
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.
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
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
33 #include <linux/time.h>
36 #include <sys/ioctl.h>
37 #include <asm/types.h>
41 * The event structure itself
55 #define EV_VERSION 0x010000
58 * IOCTLs (0x00 - 0x7f)
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 */
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 */
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 */
99 #define KEY_RESERVED 0
113 #define KEY_BACKSPACE 14
125 #define KEY_LEFTBRACE 26
126 #define KEY_RIGHTBRACE 27
128 #define KEY_LEFTCTRL 29
138 #define KEY_SEMICOLON 39
139 #define KEY_APOSTROPHE 40
141 #define KEY_LEFTSHIFT 42
142 #define KEY_BACKSLASH 43
153 #define KEY_RIGHTSHIFT 54
154 #define KEY_KPASTERISK 55
155 #define KEY_LEFTALT 56
157 #define KEY_CAPSLOCK 58
168 #define KEY_NUMLOCK 69
169 #define KEY_SCROLLLOCK 70
173 #define KEY_KPMINUS 74
177 #define KEY_KPPLUS 78
195 #define KEY_KPENTER 96
196 #define KEY_RIGHTCTRL 97
197 #define KEY_KPSLASH 98
199 #define KEY_RIGHTALT 100
200 #define KEY_LINEFEED 101
203 #define KEY_PAGEUP 104
205 #define KEY_RIGHT 106
208 #define KEY_PAGEDOWN 109
209 #define KEY_INSERT 110
210 #define KEY_DELETE 111
211 #define KEY_MACRO 112
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
223 #define KEY_KPCOMMA 124
224 #define KEY_LEFTMETA 125
225 #define KEY_RIGHTMETA 126
226 #define KEY_COMPOSE 127
229 #define KEY_AGAIN 129
230 #define KEY_PROPS 130
232 #define KEY_FRONT 132
235 #define KEY_PASTE 135
241 #define KEY_SETUP 141
242 #define KEY_SLEEP 142
243 #define KEY_WAKEUP 143
245 #define KEY_SENDFILE 145
246 #define KEY_DELETEFILE 146
248 #define KEY_PROG1 148
249 #define KEY_PROG2 149
251 #define KEY_MSDOS 151
252 #define KEY_COFFEE 152
253 #define KEY_DIRECTION 153
254 #define KEY_CYCLEWINDOWS 154
256 #define KEY_BOOKMARKS 156
257 #define KEY_COMPUTER 157
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
271 #define KEY_CONFIG 171
272 #define KEY_HOMEPAGE 172
273 #define KEY_REFRESH 173
277 #define KEY_SCROLLUP 177
278 #define KEY_SCROLLDOWN 178
279 #define KEY_KPLEFTPAREN 179
280 #define KEY_KPRIGHTPAREN 180
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
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
308 #define KEY_UNKNOWN 220
310 #define KEY_BRIGHTNESSDOWN 224
311 #define KEY_BRIGHTNESSUP 225
313 #define BTN_MISC 0x100
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
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
349 #define BTN_GAMEPAD 0x130
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
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
379 #define KEY_MAX 0x1ff
388 #define REL_HWHEEL 0x06
389 #define REL_DIAL 0x07
390 #define REL_WHEEL 0x08
391 #define REL_MISC 0x09
404 #define ABS_THROTTLE 0x06
405 #define ABS_RUDDER 0x07
406 #define ABS_WHEEL 0x08
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
428 #define MSC_SERIAL 0x00
429 #define MSC_PULSELED 0x01
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
451 #define REP_DELAY 0x00
452 #define REP_PERIOD 0x01
459 #define SND_CLICK 0x00
460 #define SND_BELL 0x01
473 #define BUS_ISAPNP 0x02
478 #define BUS_I8042 0x11
479 #define BUS_XTKBD 0x12
480 #define BUS_RS232 0x13
481 #define BUS_GAMEPORT 0x14
482 #define BUS_PARPORT 0x15
483 #define BUS_AMIGA 0x16
488 * Structures used in ioctls to upload effects to a device
489 * The first structures are not passed directly by using ioctls.
490 * They are sub-structures of the actually sent structure (called ff_effect)
494 __u16 length; /* Duration of an effect */
495 __u16 delay; /* Time to wait before to start playing an effect */
499 __u16 button; /* Number of button triggering an effect */
500 __u16 interval; /* Time to wait before an effect can be re-triggered */
504 __u16 attack_length; /* Duration of attack */
505 __s16 attack_level; /* Level at beginning of attack */
506 __u16 fade_length; /* Duration of fade */
507 __s16 fade_level; /* Level at end of fade */
511 struct ff_constant_effect {
512 __s16 level; /* Strength of effect */
513 __u16 direction; /* Direction of effect (see periodic effects) */
514 struct ff_shape shape;
517 /* FF_SPRING of FF_FRICTION */
518 struct ff_interactive_effect {
519 /* Axis along which effect must be created. If null, the field named direction
521 * It is a bit array (ie to enable axes X and Y, use BIT(ABS_X) | BIT(ABS_Y)
526 __s16 right_saturation; /* Max level when joystick is on the right */
527 __s16 left_saturation; /* Max level when joystick in on the left */
529 __s16 right_coeff; /* Indicates how fast the force grows when the
530 joystick moves to the right */
531 __s16 left_coeff; /* Same for left side */
533 __u16 deadband; /* Size of area where no force is produced */
534 __s16 center; /* Position of dead dead zone */
539 struct ff_periodic_effect {
540 __u16 waveform; /* Kind of wave (sine, square...) */
542 __s16 magnitude; /* Peak value */
543 __s16 offset; /* Mean value of wave (roughly) */
544 __u16 phase; /* 'Horizontal' shift */
545 __u16 direction; /* Direction. 0 deg -> 0x0000
548 struct ff_shape shape;
552 * Structure sent through ioctl from the application to the driver
556 /* Following field denotes the unique id assigned to an effect.
557 * It is set by the driver.
561 struct ff_trigger trigger;
562 struct ff_replay replay;
565 struct ff_constant_effect constant;
566 struct ff_periodic_effect periodic;
567 struct ff_interactive_effect interactive;
572 * Buttons that can trigger effects. Use for example FF_BTN(BTN_TRIGGER) to
576 #define FF_BTN(x) ((x) - BTN_MISC + FF_BTN_OFFSET)
577 #define FF_BTN_OFFSET 0x00
580 * Force feedback axis mappings. Use FF_ABS() to access the bitmap.
583 #define FF_ABS(x) ((x) + FF_ABS_OFFSET)
584 #define FF_ABS_OFFSET 0x40
587 * Force feedback effect types
590 #define FF_RUMBLE 0x50
591 #define FF_PERIODIC 0x51
592 #define FF_CONSTANT 0x52
593 #define FF_SPRING 0x53
594 #define FF_FRICTION 0x54
597 * Force feedback periodic effect types
600 #define FF_SQUARE 0x58
601 #define FF_TRIANGLE 0x59
603 #define FF_SAW_UP 0x5b
604 #define FF_SAW_DOWN 0x5c
605 #define FF_CUSTOM 0x5d
608 * Set ff device properties
612 #define FF_AUTOCENTER 0x61
619 * In-kernel definitions.
622 #include <linux/sched.h>
623 #include <linux/devfs_fs_kernel.h>
625 #define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1)
626 #define BIT(x) (1UL<<((x)%BITS_PER_LONG))
627 #define LONG(x) ((x)/BITS_PER_LONG)
635 unsigned short idbus;
636 unsigned short idvendor;
637 unsigned short idproduct;
638 unsigned short idversion;
640 unsigned long evbit[NBITS(EV_MAX)];
641 unsigned long keybit[NBITS(KEY_MAX)];
642 unsigned long relbit[NBITS(REL_MAX)];
643 unsigned long absbit[NBITS(ABS_MAX)];
644 unsigned long mscbit[NBITS(MSC_MAX)];
645 unsigned long ledbit[NBITS(LED_MAX)];
646 unsigned long sndbit[NBITS(SND_MAX)];
647 unsigned long ffbit[NBITS(FF_MAX)];
650 unsigned int keycodemax;
651 unsigned int keycodesize;
654 unsigned int repeat_key;
655 struct timer_list timer;
657 int abs[ABS_MAX + 1];
658 int rep[REP_MAX + 1];
660 unsigned long key[NBITS(KEY_MAX)];
661 unsigned long led[NBITS(LED_MAX)];
662 unsigned long snd[NBITS(SND_MAX)];
664 int absmax[ABS_MAX + 1];
665 int absmin[ABS_MAX + 1];
666 int absfuzz[ABS_MAX + 1];
667 int absflat[ABS_MAX + 1];
669 int (*open)(struct input_dev *dev);
670 void (*close)(struct input_dev *dev);
671 int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);
672 int (*upload_effect)(struct input_dev *dev, struct ff_effect *effect);
673 int (*erase_effect)(struct input_dev *dev, int effect_id);
675 struct input_handle *handle;
676 struct input_dev *next;
679 struct input_handler {
683 void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
684 struct input_handle* (*connect)(struct input_handler *handler, struct input_dev *dev);
685 void (*disconnect)(struct input_handle *handle);
687 struct file_operations *fops;
690 struct input_handle *handle;
691 struct input_handler *next;
694 struct input_handle {
700 struct input_dev *dev;
701 struct input_handler *handler;
703 struct input_handle *dnext;
704 struct input_handle *hnext;
707 void input_register_device(struct input_dev *);
708 void input_unregister_device(struct input_dev *);
710 void input_register_handler(struct input_handler *);
711 void input_unregister_handler(struct input_handler *);
713 int input_open_device(struct input_handle *);
714 void input_close_device(struct input_handle *);
716 devfs_handle_t input_register_minor(char *name, int minor, int minor_base);
717 void input_unregister_minor(devfs_handle_t handle);
719 void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value);
721 #define input_report_key(a,b,c) input_event(a, EV_KEY, b, !!(c))
722 #define input_report_rel(a,b,c) input_event(a, EV_REL, b, c)
723 #define input_report_abs(a,b,c) input_event(a, EV_ABS, b, c)