File: /usr/src/linux/include/linux/input.h
1 #ifndef _INPUT_H
2 #define _INPUT_H
3
4 /*
5 * $Id: input.h,v 1.34 2001/05/28 09:06:44 vojtech 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
44 struct 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 BTN_MISC 0x100
311 #define BTN_0 0x100
312 #define BTN_1 0x101
313 #define BTN_2 0x102
314 #define BTN_3 0x103
315 #define BTN_4 0x104
316 #define BTN_5 0x105
317 #define BTN_6 0x106
318 #define BTN_7 0x107
319 #define BTN_8 0x108
320 #define BTN_9 0x109
321
322 #define BTN_MOUSE 0x110
323 #define BTN_LEFT 0x110
324 #define BTN_RIGHT 0x111
325 #define BTN_MIDDLE 0x112
326 #define BTN_SIDE 0x113
327 #define BTN_EXTRA 0x114
328 #define BTN_FORWARD 0x115
329 #define BTN_BACK 0x116
330
331 #define BTN_JOYSTICK 0x120
332 #define BTN_TRIGGER 0x120
333 #define BTN_THUMB 0x121
334 #define BTN_THUMB2 0x122
335 #define BTN_TOP 0x123
336 #define BTN_TOP2 0x124
337 #define BTN_PINKIE 0x125
338 #define BTN_BASE 0x126
339 #define BTN_BASE2 0x127
340 #define BTN_BASE3 0x128
341 #define BTN_BASE4 0x129
342 #define BTN_BASE5 0x12a
343 #define BTN_BASE6 0x12b
344 #define BTN_DEAD 0x12f
345
346 #define BTN_GAMEPAD 0x130
347 #define BTN_A 0x130
348 #define BTN_B 0x131
349 #define BTN_C 0x132
350 #define BTN_X 0x133
351 #define BTN_Y 0x134
352 #define BTN_Z 0x135
353 #define BTN_TL 0x136
354 #define BTN_TR 0x137
355 #define BTN_TL2 0x138
356 #define BTN_TR2 0x139
357 #define BTN_SELECT 0x13a
358 #define BTN_START 0x13b
359 #define BTN_MODE 0x13c
360 #define BTN_THUMBL 0x13d
361 #define BTN_THUMBR 0x13e
362
363 #define BTN_DIGI 0x140
364 #define BTN_TOOL_PEN 0x140
365 #define BTN_TOOL_RUBBER 0x141
366 #define BTN_TOOL_BRUSH 0x142
367 #define BTN_TOOL_PENCIL 0x143
368 #define BTN_TOOL_AIRBRUSH 0x144
369 #define BTN_TOOL_FINGER 0x145
370 #define BTN_TOOL_MOUSE 0x146
371 #define BTN_TOOL_LENS 0x147
372 #define BTN_TOUCH 0x14a
373 #define BTN_STYLUS 0x14b
374 #define BTN_STYLUS2 0x14c
375
376 #define KEY_MAX 0x1ff
377
378 /*
379 * Relative axes
380 */
381
382 #define REL_X 0x00
383 #define REL_Y 0x01
384 #define REL_Z 0x02
385 #define REL_HWHEEL 0x06
386 #define REL_DIAL 0x07
387 #define REL_WHEEL 0x08
388 #define REL_MISC 0x09
389 #define REL_MAX 0x0f
390
391 /*
392 * Absolute axes
393 */
394
395 #define ABS_X 0x00
396 #define ABS_Y 0x01
397 #define ABS_Z 0x02
398 #define ABS_RX 0x03
399 #define ABS_RY 0x04
400 #define ABS_RZ 0x05
401 #define ABS_THROTTLE 0x06
402 #define ABS_RUDDER 0x07
403 #define ABS_WHEEL 0x08
404 #define ABS_GAS 0x09
405 #define ABS_BRAKE 0x0a
406 #define ABS_HAT0X 0x10
407 #define ABS_HAT0Y 0x11
408 #define ABS_HAT1X 0x12
409 #define ABS_HAT1Y 0x13
410 #define ABS_HAT2X 0x14
411 #define ABS_HAT2Y 0x15
412 #define ABS_HAT3X 0x16
413 #define ABS_HAT3Y 0x17
414 #define ABS_PRESSURE 0x18
415 #define ABS_DISTANCE 0x19
416 #define ABS_TILT_X 0x1a
417 #define ABS_TILT_Y 0x1b
418 #define ABS_MISC 0x1c
419 #define ABS_MAX 0x1f
420
421 /*
422 * Misc events
423 */
424
425 #define MSC_SERIAL 0x00
426 #define MSC_MAX 0x07
427
428 /*
429 * LEDs
430 */
431
432 #define LED_NUML 0x00
433 #define LED_CAPSL 0x01
434 #define LED_SCROLLL 0x02
435 #define LED_COMPOSE 0x03
436 #define LED_KANA 0x04
437 #define LED_SLEEP 0x05
438 #define LED_SUSPEND 0x06
439 #define LED_MUTE 0x07
440 #define LED_MISC 0x08
441 #define LED_MAX 0x0f
442
443 /*
444 * Autorepeat values
445 */
446
447 #define REP_DELAY 0x00
448 #define REP_PERIOD 0x01
449 #define REP_MAX 0x01
450
451 /*
452 * Sounds
453 */
454
455 #define SND_CLICK 0x00
456 #define SND_BELL 0x01
457 #define SND_MAX 0x07
458
459 /*
460 * IDs.
461 */
462
463 #define ID_BUS 0
464 #define ID_VENDOR 1
465 #define ID_PRODUCT 2
466 #define ID_VERSION 3
467
468 #define BUS_PCI 0x01
469 #define BUS_ISAPNP 0x02
470 #define BUS_USB 0x03
471
472 #define BUS_ISA 0x10
473 #define BUS_I8042 0x11
474 #define BUS_XTKBD 0x12
475 #define BUS_RS232 0x13
476 #define BUS_GAMEPORT 0x14
477 #define BUS_PARPORT 0x15
478 #define BUS_AMIGA 0x16
479 #define BUS_ADB 0x17
480 #define BUS_I2C 0x18
481
482 /*
483 * Structures used in ioctls to upload effects to a device
484 * The first structures are not passed directly by using ioctls.
485 * They are sub-structures of the actually sent structure (called ff_effect)
486 */
487
488 struct ff_replay {
489 __u16 length; /* Duration of an effect */
490 __u16 delay; /* Time to wait before to start playing an effect */
491 };
492
493 struct ff_trigger {
494 __u16 button; /* Number of button triggering an effect */
495 __u16 interval; /* Time to wait before an effect can be re-triggered */
496 };
497
498 struct ff_shape {
499 __u16 attack_length; /* Duration of attack */
500 __s16 attack_level; /* Level at beginning of attack */
501 __u16 fade_length; /* Duration of fade */
502 __s16 fade_level; /* Level at end of fade */
503 };
504
505 /* FF_CONSTANT */
506 struct ff_constant_effect {
507 __s16 level; /* Strength of effect */
508 __u16 direction; /* Direction of effect (see periodic effects) */
509 struct ff_shape shape;
510 };
511
512 /* FF_SPRING of FF_FRICTION */
513 struct ff_interactive_effect {
514 /* Axis along which effect must be created. If null, the field named direction
515 * is used
516 * It is a bit array (ie to enable axes X and Y, use BIT(ABS_X) | BIT(ABS_Y)
517 */
518 __u16 axis;
519 __u16 direction;
520
521 __s16 right_saturation; /* Max level when joystick is on the right */
522 __s16 left_saturation; /* Max level when joystick in on the left */
523
524 __s16 right_coeff; /* Indicates how fast the force grows when the
525 joystick moves to the right */
526 __s16 left_coeff; /* Same for left side */
527
528 __u16 deadband; /* Size of area where no force is produced */
529 __s16 center; /* Position of dead dead zone */
530
531 };
532
533 /* FF_PERIODIC */
534 struct ff_periodic_effect {
535 __u16 waveform; /* Kind of wave (sine, square...) */
536 __u16 period;
537 __s16 magnitude; /* Peak value */
538 __s16 offset; /* Mean value of wave (roughly) */
539 __u16 phase; /* 'Horizontal' shift */
540 __u16 direction; /* Direction. 0 deg -> 0x0000
541 90 deg -> 0x4000 */
542
543 struct ff_shape shape;
544 };
545
546 /*
547 * Structure sent through ioctl from the application to the driver
548 */
549 struct ff_effect {
550 __u16 type;
551 /* Following field denotes the unique id assigned to an effect.
552 * It is set by the driver.
553 */
554 __s16 id;
555
556 struct ff_trigger trigger;
557 struct ff_replay replay;
558
559 union {
560 struct ff_constant_effect constant;
561 struct ff_periodic_effect periodic;
562 struct ff_interactive_effect interactive;
563 } u;
564 };
565
566 /*
567 * Buttons that can trigger effects. Use for example FF_BTN(BTN_TRIGGER) to
568 * access the bitmap.
569 */
570
571 #define FF_BTN(x) ((x) - BTN_MISC + FF_BTN_OFFSET)
572 #define FF_BTN_OFFSET 0x00
573
574 /*
575 * Force feedback axis mappings. Use FF_ABS() to access the bitmap.
576 */
577
578 #define FF_ABS(x) ((x) + FF_ABS_OFFSET)
579 #define FF_ABS_OFFSET 0x40
580
581 /*
582 * Force feedback effect types
583 */
584
585 #define FF_RUMBLE 0x50
586 #define FF_PERIODIC 0x51
587 #define FF_CONSTANT 0x52
588 #define FF_SPRING 0x53
589 #define FF_FRICTION 0x54
590
591 /*
592 * Force feedback periodic effect types
593 */
594
595 #define FF_SQUARE 0x58
596 #define FF_TRIANGLE 0x59
597 #define FF_SINE 0x5a
598 #define FF_SAW_UP 0x5b
599 #define FF_SAW_DOWN 0x5c
600 #define FF_CUSTOM 0x5d
601
602 /*
603 * Set ff device properties
604 */
605
606 #define FF_GAIN 0x60
607 #define FF_AUTOCENTER 0x61
608
609 #define FF_MAX 0x7f
610
611 #ifdef __KERNEL__
612
613 /*
614 * In-kernel definitions.
615 */
616
617 #include <linux/sched.h>
618 #include <linux/devfs_fs_kernel.h>
619
620 #define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1)
621 #define BIT(x) (1UL<<((x)%BITS_PER_LONG))
622 #define LONG(x) ((x)/BITS_PER_LONG)
623
624 struct input_dev {
625
626 void *private;
627
628 int number;
629 char *name;
630 unsigned short idbus;
631 unsigned short idvendor;
632 unsigned short idproduct;
633 unsigned short idversion;
634
635 unsigned long evbit[NBITS(EV_MAX)];
636 unsigned long keybit[NBITS(KEY_MAX)];
637 unsigned long relbit[NBITS(REL_MAX)];
638 unsigned long absbit[NBITS(ABS_MAX)];
639 unsigned long mscbit[NBITS(MSC_MAX)];
640 unsigned long ledbit[NBITS(LED_MAX)];
641 unsigned long sndbit[NBITS(SND_MAX)];
642 unsigned long ffbit[NBITS(FF_MAX)];
643 int ff_effects_max;
644
645 unsigned int keycodemax;
646 unsigned int keycodesize;
647 void *keycode;
648
649 unsigned int repeat_key;
650 struct timer_list timer;
651
652 int abs[ABS_MAX + 1];
653 int rep[REP_MAX + 1];
654
655 unsigned long key[NBITS(KEY_MAX)];
656 unsigned long led[NBITS(LED_MAX)];
657 unsigned long snd[NBITS(SND_MAX)];
658
659 int absmax[ABS_MAX + 1];
660 int absmin[ABS_MAX + 1];
661 int absfuzz[ABS_MAX + 1];
662 int absflat[ABS_MAX + 1];
663
664 int (*open)(struct input_dev *dev);
665 void (*close)(struct input_dev *dev);
666 int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);
667 int (*upload_effect)(struct input_dev *dev, struct ff_effect *effect);
668 int (*erase_effect)(struct input_dev *dev, int effect_id);
669
670 struct input_handle *handle;
671 struct input_dev *next;
672 };
673
674 struct input_handler {
675
676 void *private;
677
678 void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value);
679 struct input_handle* (*connect)(struct input_handler *handler, struct input_dev *dev);
680 void (*disconnect)(struct input_handle *handle);
681
682 struct file_operations *fops;
683 int minor;
684
685 struct input_handle *handle;
686 struct input_handler *next;
687 };
688
689 struct input_handle {
690
691 void *private;
692
693 int open;
694
695 struct input_dev *dev;
696 struct input_handler *handler;
697
698 struct input_handle *dnext;
699 struct input_handle *hnext;
700 };
701
702 void input_register_device(struct input_dev *);
703 void input_unregister_device(struct input_dev *);
704
705 void input_register_handler(struct input_handler *);
706 void input_unregister_handler(struct input_handler *);
707
708 int input_open_device(struct input_handle *);
709 void input_close_device(struct input_handle *);
710
711 devfs_handle_t input_register_minor(char *name, int minor, int minor_base);
712 void input_unregister_minor(devfs_handle_t handle);
713
714 void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value);
715
716 #define input_report_key(a,b,c) input_event(a, EV_KEY, b, !!(c))
717 #define input_report_rel(a,b,c) input_event(a, EV_REL, b, c)
718 #define input_report_abs(a,b,c) input_event(a, EV_ABS, b, c)
719
720 #endif
721 #endif
722