Magellan Linux

Contents of /trunk/xorg-old/patches-6.8.2-r10/9000_all_6.7.99.2-lnx-evdev-core-v3.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 167 - (show annotations) (download)
Tue May 8 20:58:51 2007 UTC (17 years ago) by niro
File size: 27798 byte(s)
-import

1 diff -urN xc.orig/programs/Xserver/hw/xfree86/os-support/linux/Imakefile xc/programs/Xserver/hw/xfree86/os-support/linux/Imakefile
2 --- xc.orig/programs/Xserver/hw/xfree86/os-support/linux/Imakefile 2004-12-15 11:25:43.000000000 -0800
3 +++ xc/programs/Xserver/hw/xfree86/os-support/linux/Imakefile 2004-12-18 00:41:57.000000000 -0800
4 @@ -50,16 +50,16 @@
5 SRCS = lnx_init.c lnx_video.c lnx_io.c libc_wrapper.c bios_mmap.c \
6 VTsw_usl.c std_kbdEv.c posix_tty.c $(MOUSESRC) \
7 lnx_pci.c vidmem.c lnx_apm.c $(JOYSTICK_SRC) $(DRI_SRC) $(RES_SRCS) \
8 - $(PLATFORM_SRC) lnx_kmod.c lnx_agp.c $(KBDSRC) /*wcHelper.c*/
9 + $(PLATFORM_SRC) lnx_kmod.c lnx_agp.c $(KBDSRC) /*wcHelper.c*/ lnx_evdev.c
10
11 OBJS = lnx_init.o lnx_video.o lnx_io.o libc_wrapper.o bios_mmap.o \
12 VTsw_usl.o std_kbdEv.o posix_tty.o $(MOUSEOBJ) \
13 lnx_pci.o vidmem.o lnx_apm.o $(JOYSTICK_OBJ) $(DRI_OBJ) $(RES_OBJS) \
14 - $(PLATFORM_OBJ) lnx_kmod.o lnx_agp.o $(KBDOBJ) /*wcHelper.o*/
15 + $(PLATFORM_OBJ) lnx_kmod.o lnx_agp.o $(KBDOBJ) /*wcHelper.o*/ lnx_evdev.o
16
17 INCLUDES = -I$(XF86COMSRC) -I$(XF86OSSRC) -I. -I$(SERVERSRC)/include \
18 -I$(XINCLUDESRC) -I$(EXTINCSRC) -I$(XF86OSSRC)/shared \
19 - -I$(XF86OSSRC)/bus -I$(DRMSRCDIR)/shared
20 + -I$(XF86OSSRC)/bus -I$(DRMSRCDIR)/shared -I$(SERVERSRC)/mi
21
22 RESDEFINES = -DUSESTDRES
23
24 diff -urN xc.orig/programs/Xserver/hw/xfree86/os-support/linux/lnx_evdev.c xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_evdev.c
25 --- xc.orig/programs/Xserver/hw/xfree86/os-support/linux/lnx_evdev.c 1969-12-31 16:00:00.000000000 -0800
26 +++ xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_evdev.c 2004-12-18 00:41:57.000000000 -0800
27 @@ -0,0 +1,278 @@
28 +/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_mouse.c,v 1.1 1999/05/17 13:17:18 dawes Exp $ */
29 +
30 +/*
31 + * Copyright 2003 by Zephaniah E. Hull.
32 + */
33 +
34 +#include "X.h"
35 +#include "xf86.h"
36 +#include "xf86Priv.h"
37 +#include "xf86_OSlib.h"
38 +#include "xf86Xinput.h"
39 +#include "xf86OSmouse.h"
40 +#include "lnx_evdev.h"
41 +#include "mipointer.h"
42 +
43 +static Bool evdev_alive = FALSE;
44 +static evdevDriverPtr evdev_drivers = NULL;
45 +static char *evdev_buf;
46 +static char evdev_device[23];
47 +
48 +static int
49 +glob_match(const char *pattern, const char *matchp)
50 +{
51 + int i, j = 0, ret = 0;
52 + if (!(pattern && matchp))
53 + return (strlen(pattern) == strlen(matchp));
54 +
55 + for (i = 0; matchp[i]; i++) {
56 + if (pattern[j] == '\\')
57 + j++;
58 + else if (pattern[j] == '*') {
59 + if (pattern[j + 1]) {
60 + if (!glob_match(pattern+j+1,matchp+i))
61 + return 0;
62 + } else
63 + return 0;
64 + continue;
65 + } else if (pattern[j] == '?') {
66 + j++;
67 + continue;
68 + }
69 +
70 + if ((ret = (pattern[j] - matchp[i])))
71 + return ret;
72 +
73 + j++;
74 + }
75 + if (!pattern[j] || ((pattern[j] == '*') && !pattern[j + 1]))
76 + return 0;
77 + else
78 + return 1;
79 +}
80 +
81 +
82 +int
83 +evdevGetFDForDriver (evdevDriverPtr driver)
84 +{
85 + char dev[20];
86 + char tmp[256] = "";
87 + int fd, i;
88 +
89 + if (!driver)
90 + return -1;
91 +
92 + for (i = 0; i < 32; i++) {
93 + snprintf(dev, sizeof(dev), "/dev/input/event%d", i);
94 + SYSCALL(fd = open (dev, O_RDWR | O_NONBLOCK));
95 + if (fd == -1)
96 + continue;
97 +
98 +#define check(name,get) \
99 + if (name) { \
100 + if (ioctl(fd, get, tmp) == -1) \
101 + tmp[0] = '\0'; \
102 + if (glob_match(name, tmp)) { \
103 + close(fd); \
104 + continue; \
105 + } \
106 + }
107 +
108 + check(driver->name, EVIOCGNAME(sizeof(tmp)));
109 + check(driver->phys, EVIOCGPHYS(sizeof(tmp)));
110 +#undef check
111 + return fd;
112 + }
113 + return -1;
114 +}
115 +
116 +static void
117 +evdevReadInput(InputInfoPtr pInfo)
118 +{
119 + int n;
120 + evdevDriverPtr driver;
121 + char *cur, *end;
122 + char *id, *value, *name, *phys, *action;
123 + Bool up;
124 +
125 + do {
126 + SYSCALL(n = read(pInfo->fd, evdev_buf, 1022));
127 + evdev_buf[n] = '\n'; /* Just to be extra safe. */
128 + evdev_buf[n + 1] = '\0';/* Just to be extra safe. */
129 +
130 + cur = evdev_buf;
131 + while (cur[0] && (end = strchr(cur, '\n')) && (end != cur)) {
132 + name = phys = action = NULL;
133 + if (!strncmp("2.1", cur, 3)) {
134 +#define next_sep(sep,end,clr) while (1) { \
135 + if ((*cur == '\n') || (*cur == '\0')) { \
136 + if (end) { \
137 + goto evdevReadInput__finished; \
138 + } else if (clr) \
139 + *cur = '\0'; \
140 + cur++; \
141 + break; \
142 + } else if (*cur == sep) { \
143 + if (clr) \
144 + *cur = '\0'; \
145 + cur++; \
146 + break; \
147 + } \
148 + cur++; \
149 + }
150 +
151 + next_sep('\002', 1, 0);
152 +loop_start__21:
153 + id = cur;
154 + next_sep('\003', 1, 1);
155 + value = cur;
156 + next_sep('\002', 0, 1);
157 + if (!strcmp(id, "ACTION"))
158 + action = value;
159 + else if (!strcmp(id, "NAME"))
160 + name = value;
161 + else if (!strcmp(id, "PHYS"))
162 + phys = value;
163 + if (*cur != '\n')
164 + goto loop_start__21;
165 +#undef next_sep
166 + }
167 +evdevReadInput__finished:
168 +
169 + if (!(action && name && phys)) {
170 + xf86Msg(X_ERROR,"%s: Incomplete command! -%s-%s-%s-\n",
171 + pInfo->name, action, name, phys);
172 + } else {
173 + if (!strcmp(action, "add"))
174 + up = TRUE;
175 + else
176 + up = FALSE;
177 +
178 + for (driver = evdev_drivers; driver; driver = driver->next) {
179 + if (driver->name && glob_match(name, driver->name))
180 + continue;
181 + if (driver->phys && glob_match(phys, driver->phys))
182 + continue;
183 + if (up)
184 + driver->callback(driver->cb_data, DEVICE_ON);
185 + else
186 + driver->callback(driver->cb_data, DEVICE_OFF);
187 + }
188 + }
189 + cur = end + 1;
190 + }
191 + } while (xf86WaitForInput(pInfo->fd, 0));
192 + return;
193 +}
194 +
195 +static void
196 +evdevSigioReadInput (int fd, void *closure)
197 +{
198 + evdevReadInput ((InputInfoPtr) closure);
199 +}
200 +
201 +static int
202 +evdevGetControlFD (void)
203 +{
204 + int i, ret;
205 +
206 + for (i = 0; i < 100; i++) {
207 + snprintf(evdev_device,sizeof(evdev_device),"/tmp/.X11-unix/evdev%d", i);
208 + SYSCALL(ret = mkfifo (evdev_device, 0666));
209 + if (ret == -1) {
210 + if (errno != EEXIST)
211 + return -1;
212 + continue;
213 + }
214 + SYSCALL(ret = open (evdev_device, O_RDWR | O_NONBLOCK));
215 + return ret;
216 + }
217 +
218 + return -1;
219 +}
220 +
221 +static void
222 +evdevReleaseControlFD (int fd)
223 +{
224 + SYSCALL(close(fd));
225 + SYSCALL(unlink(evdev_device));
226 +}
227 +
228 +static int
229 +evdevControl(DeviceIntPtr pPointer, int what)
230 +{
231 + InputInfoPtr pInfo;
232 +
233 + pInfo = pPointer->public.devicePrivate;
234 +
235 + switch (what) {
236 + case DEVICE_INIT:
237 + pPointer->public.on = FALSE;
238 + break;
239 +
240 + case DEVICE_ON:
241 + pInfo->fd = evdevGetControlFD ();
242 + if (pInfo->fd == -1) {
243 + xf86Msg(X_ERROR, "%s: cannot open control FIFO.\n", pInfo->name);
244 + return BadRequest;
245 + }
246 + xf86FlushInput(pInfo->fd);
247 + if (!xf86InstallSIGIOHandler (pInfo->fd, evdevSigioReadInput, pInfo))
248 + AddEnabledDevice(pInfo->fd);
249 + pPointer->public.on = TRUE;
250 + break;
251 +
252 + case DEVICE_OFF:
253 + case DEVICE_CLOSE:
254 + if (pInfo->fd != -1) {
255 + RemoveEnabledDevice(pInfo->fd);
256 + xf86RemoveSIGIOHandler(pInfo->fd);
257 + evdevReleaseControlFD (pInfo->fd);
258 + pInfo->fd = -1;
259 + }
260 + pPointer->public.on = FALSE;
261 + usleep(300000);
262 + break;
263 + }
264 + return Success;
265 +}
266 +
267 +Bool
268 +evdevStart (InputDriverPtr drv)
269 +{
270 + InputInfoPtr pInfo;
271 +
272 + if (evdev_alive)
273 + return TRUE;
274 +
275 + if (!(evdev_buf = xcalloc(1024, 1)))
276 + return FALSE;
277 +
278 + if (!(pInfo = xf86AllocateInput(drv, 0)))
279 + return FALSE;
280 +
281 +
282 + pInfo->name = "evdev brain";
283 + pInfo->type_name = "evdev brain";
284 + pInfo->device_control = evdevControl;
285 + pInfo->read_input = evdevReadInput;
286 + pInfo->fd = -1;
287 + evdev_alive = TRUE;
288 + pInfo->flags = XI86_CONFIGURED | XI86_OPEN_ON_INIT;
289 + return TRUE;
290 +}
291 +
292 +Bool
293 +evdevNewDriver (evdevDriverPtr driver)
294 +{
295 + if (!evdev_alive)
296 + return FALSE;
297 + if (!(driver->name || driver->phys))
298 + return FALSE;
299 + if (!driver->callback)
300 + return FALSE;
301 +
302 + driver->next = evdev_drivers;
303 + evdev_drivers = driver;
304 + return TRUE;
305 +}
306 diff -urN xc.orig/programs/Xserver/hw/xfree86/os-support/linux/lnx_evdev.h xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_evdev.h
307 --- xc.orig/programs/Xserver/hw/xfree86/os-support/linux/lnx_evdev.h 1969-12-31 16:00:00.000000000 -0800
308 +++ xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_evdev.h 2004-12-18 00:41:57.000000000 -0800
309 @@ -0,0 +1,752 @@
310 +/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/lnx.h,v 3.2 2000/02/15 02:00:14 eich Exp $ */
311 +
312 +#ifndef LNX_EVDEV_H_
313 +#define LNX_EVDEV_H_
314 +
315 +
316 +/* Stuff taken from the linux header. (With some minor changes.) */
317 +
318 +#include <sys/time.h>
319 +#include <sys/ioctl.h>
320 +#include <asm/types.h>
321 +
322 +/*
323 + * The event structure itself
324 + */
325 +
326 +struct input_event {
327 + struct timeval time;
328 + __u16 type;
329 + __u16 code;
330 + __s32 value;
331 +};
332 +
333 +/*
334 + * Protocol version.
335 + */
336 +
337 +#define EV_VERSION 0x010000
338 +
339 +/*
340 + * IOCTLs (0x00 - 0x7f)
341 + */
342 +
343 +struct input_id {
344 + __u16 bustype;
345 + __u16 vendor;
346 + __u16 product;
347 + __u16 version;
348 +};
349 +
350 +struct input_absinfo {
351 + __s32 value;
352 + __s32 minimum;
353 + __s32 maximum;
354 + __s32 fuzz;
355 + __s32 flat;
356 +};
357 +
358 +#define EVIOCGVERSION _IOR('E', 0x01, int) /* get driver version */
359 +#define EVIOCGID _IOR('E', 0x02, struct input_id) /* get device ID */
360 +#define EVIOCGREP _IOR('E', 0x03, int[2]) /* get repeat settings */
361 +#define EVIOCSREP _IOW('E', 0x03, int[2]) /* get repeat settings */
362 +#define EVIOCGKEYCODE _IOR('E', 0x04, int[2]) /* get keycode */
363 +#define EVIOCSKEYCODE _IOW('E', 0x04, int[2]) /* set keycode */
364 +
365 +#define EVIOCGNAME(len) _IOC(_IOC_READ, 'E', 0x06, len) /* get device name */
366 +#define EVIOCGPHYS(len) _IOC(_IOC_READ, 'E', 0x07, len) /* get physical location */
367 +#define EVIOCGUNIQ(len) _IOC(_IOC_READ, 'E', 0x08, len) /* get unique identifier */
368 +
369 +#define EVIOCGKEY(len) _IOC(_IOC_READ, 'E', 0x18, len) /* get global keystate */
370 +#define EVIOCGLED(len) _IOC(_IOC_READ, 'E', 0x19, len) /* get all LEDs */
371 +#define EVIOCGSND(len) _IOC(_IOC_READ, 'E', 0x1a, len) /* get all sounds status */
372 +
373 +#define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len) /* get event bits */
374 +#define EVIOCGABS(abs) _IOR('E', 0x40 + abs, struct input_absinfo) /* get abs value/limits */
375 +#define EVIOCSABS(abs) _IOW('E', 0xc0 + abs, struct input_absinfo) /* set abs value/limits */
376 +
377 +#define EVIOCSFF _IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect)) /* send a force effect to a force feedback device */
378 +#define EVIOCRMFF _IOW('E', 0x81, int) /* Erase a force effect */
379 +#define EVIOCGEFFECTS _IOR('E', 0x84, int) /* Report number of effects playable at the same time */
380 +
381 +#define EVIOCGRAB _IOW('E', 0x90, int) /* Grab/Release device */
382 +#define EVIOCGMASK _IOR('E', 0x91, unsigned long *) /* Get our input mask */
383 +#define EVIOCSMASK _IOW('E', 0x92, unsigned long) /* Set our input mask */
384 +#define EVIOCGDMASK _IOR('E', 0x93, unsigned long *) /* Get device input mask */
385 +#define EVIOCSDMASK _IOW('E', 0x94, unsigned long) /* Set device input mask */
386 +
387 +
388 +
389 +#define BITS_PER_LONG (sizeof(long) * 8)
390 +#define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1)
391 +#define OFF(x) ((x)%BITS_PER_LONG)
392 +#define LONG(x) ((x)/BITS_PER_LONG)
393 +#define BIT(x) (1UL<<((x)%BITS_PER_LONG))
394 +#define test_bit(bit, array) ((array[LONG(bit)] >> OFF(bit)) & 1)
395 +
396 +/*
397 + * Event types
398 + */
399 +
400 +#define EV_SYN 0x00
401 +#define EV_KEY 0x01
402 +#define EV_REL 0x02
403 +#define EV_ABS 0x03
404 +#define EV_MSC 0x04
405 +#define EV_LED 0x11
406 +#define EV_SND 0x12
407 +#define EV_REP 0x14
408 +#define EV_FF 0x15
409 +#define EV_PWR 0x16
410 +#define EV_FF_STATUS 0x17
411 +#define EV_MAX 0x1f
412 +
413 +/*
414 + * Synchronization events.
415 + */
416 +
417 +#define EV_SYN_REPORT 0
418 +#define EV_SYN_CONFIG 1
419 +
420 +/*
421 + * Keys and buttons
422 + */
423 +
424 +#define EV_KEY_RESERVED 0
425 +#define EV_KEY_ESC 1
426 +#define EV_KEY_1 2
427 +#define EV_KEY_2 3
428 +#define EV_KEY_3 4
429 +#define EV_KEY_4 5
430 +#define EV_KEY_5 6
431 +#define EV_KEY_6 7
432 +#define EV_KEY_7 8
433 +#define EV_KEY_8 9
434 +#define EV_KEY_9 10
435 +#define EV_KEY_0 11
436 +#define EV_KEY_MINUS 12
437 +#define EV_KEY_EQUAL 13
438 +#define EV_KEY_BACKSPACE 14
439 +#define EV_KEY_TAB 15
440 +#define EV_KEY_Q 16
441 +#define EV_KEY_W 17
442 +#define EV_KEY_E 18
443 +#define EV_KEY_R 19
444 +#define EV_KEY_T 20
445 +#define EV_KEY_Y 21
446 +#define EV_KEY_U 22
447 +#define EV_KEY_I 23
448 +#define EV_KEY_O 24
449 +#define EV_KEY_P 25
450 +#define EV_KEY_LEFTBRACE 26
451 +#define EV_KEY_RIGHTBRACE 27
452 +#define EV_KEY_ENTER 28
453 +#define EV_KEY_LEFTCTRL 29
454 +#define EV_KEY_A 30
455 +#define EV_KEY_S 31
456 +#define EV_KEY_D 32
457 +#define EV_KEY_F 33
458 +#define EV_KEY_G 34
459 +#define EV_KEY_H 35
460 +#define EV_KEY_J 36
461 +#define EV_KEY_K 37
462 +#define EV_KEY_L 38
463 +#define EV_KEY_SEMICOLON 39
464 +#define EV_KEY_APOSTROPHE 40
465 +#define EV_KEY_GRAVE 41
466 +#define EV_KEY_LEFTSHIFT 42
467 +#define EV_KEY_BACKSLASH 43
468 +#define EV_KEY_Z 44
469 +#define EV_KEY_X 45
470 +#define EV_KEY_C 46
471 +#define EV_KEY_V 47
472 +#define EV_KEY_B 48
473 +#define EV_KEY_N 49
474 +#define EV_KEY_M 50
475 +#define EV_KEY_COMMA 51
476 +#define EV_KEY_DOT 52
477 +#define EV_KEY_SLASH 53
478 +#define EV_KEY_RIGHTSHIFT 54
479 +#define EV_KEY_KPASTERISK 55
480 +#define EV_KEY_LEFTALT 56
481 +#define EV_KEY_SPACE 57
482 +#define EV_KEY_CAPSLOCK 58
483 +#define EV_KEY_F1 59
484 +#define EV_KEY_F2 60
485 +#define EV_KEY_F3 61
486 +#define EV_KEY_F4 62
487 +#define EV_KEY_F5 63
488 +#define EV_KEY_F6 64
489 +#define EV_KEY_F7 65
490 +#define EV_KEY_F8 66
491 +#define EV_KEY_F9 67
492 +#define EV_KEY_F10 68
493 +#define EV_KEY_NUMLOCK 69
494 +#define EV_KEY_SCROLLLOCK 70
495 +#define EV_KEY_KP7 71
496 +#define EV_KEY_KP8 72
497 +#define EV_KEY_KP9 73
498 +#define EV_KEY_KPMINUS 74
499 +#define EV_KEY_KP4 75
500 +#define EV_KEY_KP5 76
501 +#define EV_KEY_KP6 77
502 +#define EV_KEY_KPPLUS 78
503 +#define EV_KEY_KP1 79
504 +#define EV_KEY_KP2 80
505 +#define EV_KEY_KP3 81
506 +#define EV_KEY_KP0 82
507 +#define EV_KEY_KPDOT 83
508 +#define EV_KEY_103RD 84
509 +#define EV_KEY_F13 85
510 +#define EV_KEY_102ND 86
511 +#define EV_KEY_F11 87
512 +#define EV_KEY_F12 88
513 +#define EV_KEY_F14 89
514 +#define EV_KEY_F15 90
515 +#define EV_KEY_F16 91
516 +#define EV_KEY_F17 92
517 +#define EV_KEY_F18 93
518 +#define EV_KEY_F19 94
519 +#define EV_KEY_F20 95
520 +#define EV_KEY_KPENTER 96
521 +#define EV_KEY_RIGHTCTRL 97
522 +#define EV_KEY_KPSLASH 98
523 +#define EV_KEY_SYSRQ 99
524 +#define EV_KEY_RIGHTALT 100
525 +#define EV_KEY_LINEFEED 101
526 +#define EV_KEY_HOME 102
527 +#define EV_KEY_UP 103
528 +#define EV_KEY_PAGEUP 104
529 +#define EV_KEY_LEFT 105
530 +#define EV_KEY_RIGHT 106
531 +#define EV_KEY_END 107
532 +#define EV_KEY_DOWN 108
533 +#define EV_KEY_PAGEDOWN 109
534 +#define EV_KEY_INSERT 110
535 +#define EV_KEY_DELETE 111
536 +#define EV_KEY_MACRO 112
537 +#define EV_KEY_MUTE 113
538 +#define EV_KEY_VOLUMEDOWN 114
539 +#define EV_KEY_VOLUMEUP 115
540 +#define EV_KEY_POWER 116
541 +#define EV_KEY_KPEQUAL 117
542 +#define EV_KEY_KPPLUSMINUS 118
543 +#define EV_KEY_PAUSE 119
544 +#define EV_KEY_F21 120
545 +#define EV_KEY_F22 121
546 +#define EV_KEY_F23 122
547 +#define EV_KEY_F24 123
548 +#define EV_KEY_KPCOMMA 124
549 +#define EV_KEY_LEFTMETA 125
550 +#define EV_KEY_RIGHTMETA 126
551 +#define EV_KEY_COMPOSE 127
552 +
553 +#define EV_KEY_STOP 128
554 +#define EV_KEY_AGAIN 129
555 +#define EV_KEY_PROPS 130
556 +#define EV_KEY_UNDO 131
557 +#define EV_KEY_FRONT 132
558 +#define EV_KEY_COPY 133
559 +#define EV_KEY_OPEN 134
560 +#define EV_KEY_PASTE 135
561 +#define EV_KEY_FIND 136
562 +#define EV_KEY_CUT 137
563 +#define EV_KEY_HELP 138
564 +#define EV_KEY_MENU 139
565 +#define EV_KEY_CALC 140
566 +#define EV_KEY_SETUP 141
567 +#define EV_KEY_SLEEP 142
568 +#define EV_KEY_WAKEUP 143
569 +#define EV_KEY_FILE 144
570 +#define EV_KEY_SENDFILE 145
571 +#define EV_KEY_DELETEFILE 146
572 +#define EV_KEY_XFER 147
573 +#define EV_KEY_PROG1 148
574 +#define EV_KEY_PROG2 149
575 +#define EV_KEY_WWW 150
576 +#define EV_KEY_MSDOS 151
577 +#define EV_KEY_COFFEE 152
578 +#define EV_KEY_DIRECTION 153
579 +#define EV_KEY_CYCLEWINDOWS 154
580 +#define EV_KEY_MAIL 155
581 +#define EV_KEY_BOOKMARKS 156
582 +#define EV_KEY_COMPUTER 157
583 +#define EV_KEY_BACK 158
584 +#define EV_KEY_FORWARD 159
585 +#define EV_KEY_CLOSECD 160
586 +#define EV_KEY_EJECTCD 161
587 +#define EV_KEY_EJECTCLOSECD 162
588 +#define EV_KEY_NEXTSONG 163
589 +#define EV_KEY_PLAYPAUSE 164
590 +#define EV_KEY_PREVIOUSSONG 165
591 +#define EV_KEY_STOPCD 166
592 +#define EV_KEY_RECORD 167
593 +#define EV_KEY_REWIND 168
594 +#define EV_KEY_PHONE 169
595 +#define EV_KEY_ISO 170
596 +#define EV_KEY_CONFIG 171
597 +#define EV_KEY_HOMEPAGE 172
598 +#define EV_KEY_REFRESH 173
599 +#define EV_KEY_EXIT 174
600 +#define EV_KEY_MOVE 175
601 +#define EV_KEY_EDIT 176
602 +#define EV_KEY_SCROLLUP 177
603 +#define EV_KEY_SCROLLDOWN 178
604 +#define EV_KEY_KPLEFTPAREN 179
605 +#define EV_KEY_KPRIGHTPAREN 180
606 +
607 +#define EV_KEY_INTL1 181
608 +#define EV_KEY_INTL2 182
609 +#define EV_KEY_INTL3 183
610 +#define EV_KEY_INTL4 184
611 +#define EV_KEY_INTL5 185
612 +#define EV_KEY_INTL6 186
613 +#define EV_KEY_INTL7 187
614 +#define EV_KEY_INTL8 188
615 +#define EV_KEY_INTL9 189
616 +#define EV_KEY_LANG1 190
617 +#define EV_KEY_LANG2 191
618 +#define EV_KEY_LANG3 192
619 +#define EV_KEY_LANG4 193
620 +#define EV_KEY_LANG5 194
621 +#define EV_KEY_LANG6 195
622 +#define EV_KEY_LANG7 196
623 +#define EV_KEY_LANG8 197
624 +#define EV_KEY_LANG9 198
625 +
626 +#define EV_KEY_PLAYCD 200
627 +#define EV_KEY_PAUSECD 201
628 +#define EV_KEY_PROG3 202
629 +#define EV_KEY_PROG4 203
630 +#define EV_KEY_SUSPEND 205
631 +#define EV_KEY_CLOSE 206
632 +#define EV_KEY_PLAY 207
633 +#define EV_KEY_FASTFORWARD 208
634 +#define EV_KEY_BASSBOOST 209
635 +#define EV_KEY_PRINT 210
636 +#define EV_KEY_HP 211
637 +#define EV_KEY_CAMERA 212
638 +#define EV_KEY_SOUND 213
639 +#define EV_KEY_QUESTION 214
640 +#define EV_KEY_EMAIL 215
641 +#define EV_KEY_CHAT 216
642 +#define EV_KEY_SEARCH 217
643 +#define EV_KEY_CONNECT 218
644 +#define EV_KEY_FINANCE 219
645 +#define EV_KEY_SPORT 220
646 +#define EV_KEY_SHOP 221
647 +#define EV_KEY_ALTERASE 222
648 +#define EV_KEY_CANCEL 223
649 +#define EV_KEY_BRIGHTNESSDOWN 224
650 +#define EV_KEY_BRIGHTNESSUP 225
651 +#define EV_KEY_MEDIA 226
652 +
653 +#define EV_KEY_UNKNOWN 240
654 +
655 +#define EV_BTN_MISC 0x100
656 +#define EV_BTN_0 0x100
657 +#define EV_BTN_1 0x101
658 +#define EV_BTN_2 0x102
659 +#define EV_BTN_3 0x103
660 +#define EV_BTN_4 0x104
661 +#define EV_BTN_5 0x105
662 +#define EV_BTN_6 0x106
663 +#define EV_BTN_7 0x107
664 +#define EV_BTN_8 0x108
665 +#define EV_BTN_9 0x109
666 +
667 +#define EV_BTN_MOUSE 0x110
668 +#define EV_BTN_LEFT 0x110
669 +#define EV_BTN_RIGHT 0x111
670 +#define EV_BTN_MIDDLE 0x112
671 +#define EV_BTN_SIDE 0x113
672 +#define EV_BTN_EXTRA 0x114
673 +#define EV_BTN_FORWARD 0x115
674 +#define EV_BTN_BACK 0x116
675 +
676 +#define EV_BTN_JOYSTICK 0x120
677 +#define EV_BTN_TRIGGER 0x120
678 +#define EV_BTN_THUMB 0x121
679 +#define EV_BTN_THUMB2 0x122
680 +#define EV_BTN_TOP 0x123
681 +#define EV_BTN_TOP2 0x124
682 +#define EV_BTN_PINKIE 0x125
683 +#define EV_BTN_BASE 0x126
684 +#define EV_BTN_BASE2 0x127
685 +#define EV_BTN_BASE3 0x128
686 +#define EV_BTN_BASE4 0x129
687 +#define EV_BTN_BASE5 0x12a
688 +#define EV_BTN_BASE6 0x12b
689 +#define EV_BTN_DEAD 0x12f
690 +
691 +#define EV_BTN_GAMEPAD 0x130
692 +#define EV_BTN_A 0x130
693 +#define EV_BTN_B 0x131
694 +#define EV_BTN_C 0x132
695 +#define EV_BTN_X 0x133
696 +#define EV_BTN_Y 0x134
697 +#define EV_BTN_Z 0x135
698 +#define EV_BTN_TL 0x136
699 +#define EV_BTN_TR 0x137
700 +#define EV_BTN_TL2 0x138
701 +#define EV_BTN_TR2 0x139
702 +#define EV_BTN_SELECT 0x13a
703 +#define EV_BTN_START 0x13b
704 +#define EV_BTN_MODE 0x13c
705 +#define EV_BTN_THUMBL 0x13d
706 +#define EV_BTN_THUMBR 0x13e
707 +
708 +#define EV_BTN_DIGI 0x140
709 +#define EV_BTN_TOOL_PEN 0x140
710 +#define EV_BTN_TOOL_RUBBER 0x141
711 +#define EV_BTN_TOOL_BRUSH 0x142
712 +#define EV_BTN_TOOL_PENCIL 0x143
713 +#define EV_BTN_TOOL_AIRBRUSH 0x144
714 +#define EV_BTN_TOOL_FINGER 0x145
715 +#define EV_BTN_TOOL_MOUSE 0x146
716 +#define EV_BTN_TOOL_LENS 0x147
717 +#define EV_BTN_TOUCH 0x14a
718 +#define EV_BTN_STYLUS 0x14b
719 +#define EV_BTN_STYLUS2 0x14c
720 +
721 +#define EV_BTN_WHEEL 0x150
722 +#define EV_BTN_GEAR_DOWN 0x150
723 +#define EV_BTN_GEAR_UP 0x151
724 +
725 +#define EV_KEY_OK 0x160
726 +#define EV_KEY_SELECT 0x161
727 +#define EV_KEY_GOTO 0x162
728 +#define EV_KEY_CLEAR 0x163
729 +#define EV_KEY_POWER2 0x164
730 +#define EV_KEY_OPTION 0x165
731 +#define EV_KEY_INFO 0x166
732 +#define EV_KEY_TIME 0x167
733 +#define EV_KEY_VENDOR 0x168
734 +#define EV_KEY_ARCHIVE 0x169
735 +#define EV_KEY_PROGRAM 0x16a
736 +#define EV_KEY_CHANNEL 0x16b
737 +#define EV_KEY_FAVORITES 0x16c
738 +#define EV_KEY_EPG 0x16d
739 +#define EV_KEY_PVR 0x16e
740 +#define EV_KEY_MHP 0x16f
741 +#define EV_KEY_LANGUAGE 0x170
742 +#define EV_KEY_TITLE 0x171
743 +#define EV_KEY_SUBTITLE 0x172
744 +#define EV_KEY_ANGLE 0x173
745 +#define EV_KEY_ZOOM 0x174
746 +#define EV_KEY_MODE 0x175
747 +#define EV_KEY_KEYBOARD 0x176
748 +#define EV_KEY_SCREEN 0x177
749 +#define EV_KEY_PC 0x178
750 +#define EV_KEY_TV 0x179
751 +#define EV_KEY_TV2 0x17a
752 +#define EV_KEY_VCR 0x17b
753 +#define EV_KEY_VCR2 0x17c
754 +#define EV_KEY_SAT 0x17d
755 +#define EV_KEY_SAT2 0x17e
756 +#define EV_KEY_CD 0x17f
757 +#define EV_KEY_TAPE 0x180
758 +#define EV_KEY_RADIO 0x181
759 +#define EV_KEY_TUNER 0x182
760 +#define EV_KEY_PLAYER 0x183
761 +#define EV_KEY_TEXT 0x184
762 +#define EV_KEY_DVD 0x185
763 +#define EV_KEY_AUX 0x186
764 +#define EV_KEY_MP3 0x187
765 +#define EV_KEY_AUDIO 0x188
766 +#define EV_KEY_VIDEO 0x189
767 +#define EV_KEY_DIRECTORY 0x18a
768 +#define EV_KEY_LIST 0x18b
769 +#define EV_KEY_MEMO 0x18c
770 +#define EV_KEY_CALENDAR 0x18d
771 +#define EV_KEY_RED 0x18e
772 +#define EV_KEY_GREEN 0x18f
773 +#define EV_KEY_YELLOW 0x190
774 +#define EV_KEY_BLUE 0x191
775 +#define EV_KEY_CHANNELUP 0x192
776 +#define EV_KEY_CHANNELDOWN 0x193
777 +#define EV_KEY_FIRST 0x194
778 +#define EV_KEY_LAST 0x195
779 +#define EV_KEY_AB 0x196
780 +#define EV_KEY_NEXT 0x197
781 +#define EV_KEY_RESTART 0x198
782 +#define EV_KEY_SLOW 0x199
783 +#define EV_KEY_SHUFFLE 0x19a
784 +#define EV_KEY_BREAK 0x19b
785 +#define EV_KEY_PREVIOUS 0x19c
786 +#define EV_KEY_DIGITS 0x19d
787 +#define EV_KEY_TEEN 0x19e
788 +#define EV_KEY_TWEN 0x19f
789 +
790 +#define EV_KEY_MAX 0x1ff
791 +
792 +/*
793 + * Relative axes
794 + */
795 +
796 +#define EV_REL_X 0x00
797 +#define EV_REL_Y 0x01
798 +#define EV_REL_Z 0x02
799 +#define EV_REL_HWHEEL 0x06
800 +#define EV_REL_DIAL 0x07
801 +#define EV_REL_WHEEL 0x08
802 +#define EV_REL_MISC 0x09
803 +#define EV_REL_MAX 0x0f
804 +
805 +/*
806 + * Absolute axes
807 + */
808 +
809 +#define EV_ABS_X 0x00
810 +#define EV_ABS_Y 0x01
811 +#define EV_ABS_Z 0x02
812 +#define EV_ABS_RX 0x03
813 +#define EV_ABS_RY 0x04
814 +#define EV_ABS_RZ 0x05
815 +#define EV_ABS_THROTTLE 0x06
816 +#define EV_ABS_RUDDER 0x07
817 +#define EV_ABS_WHEEL 0x08
818 +#define EV_ABS_GAS 0x09
819 +#define EV_ABS_BRAKE 0x0a
820 +#define EV_ABS_HAT0X 0x10
821 +#define EV_ABS_HAT0Y 0x11
822 +#define EV_ABS_HAT1X 0x12
823 +#define EV_ABS_HAT1Y 0x13
824 +#define EV_ABS_HAT2X 0x14
825 +#define EV_ABS_HAT2Y 0x15
826 +#define EV_ABS_HAT3X 0x16
827 +#define EV_ABS_HAT3Y 0x17
828 +#define EV_ABS_PRESSURE 0x18
829 +#define EV_ABS_DISTANCE 0x19
830 +#define EV_ABS_TILT_X 0x1a
831 +#define EV_ABS_TILT_Y 0x1b
832 +#define EV_ABS_VOLUME 0x20
833 +#define EV_ABS_MISC 0x28
834 +#define EV_ABS_MAX 0x3f
835 +
836 +/*
837 + * Misc events
838 + */
839 +
840 +#define EV_MSG_SERIAL 0x00
841 +#define EV_MSG_PULSELED 0x01
842 +#define EV_MSG_MAX 0x07
843 +
844 +/*
845 + * LEDs
846 + */
847 +
848 +#define EV_LED_NUML 0x00
849 +#define EV_LED_CAPSL 0x01
850 +#define EV_LED_SCROLLL 0x02
851 +#define EV_LED_COMPOSE 0x03
852 +#define EV_LED_KANA 0x04
853 +#define EV_LED_SLEEP 0x05
854 +#define EV_LED_SUSPEND 0x06
855 +#define EV_LED_MUTE 0x07
856 +#define EV_LED_MISC 0x08
857 +#define EV_LED_MAX 0x0f
858 +
859 +/*
860 + * Autorepeat values
861 + */
862 +
863 +#define EV_REP_DELAY 0x00
864 +#define EV_REP_PERIOD 0x01
865 +#define EV_REP_MAX 0x01
866 +
867 +/*
868 + * Sounds
869 + */
870 +
871 +#define EV_SND_CLICK 0x00
872 +#define EV_SND_BELL 0x01
873 +#define EV_SND_TONE 0x02
874 +#define EV_SND_MAX 0x07
875 +
876 +/*
877 + * IDs.
878 + */
879 +
880 +#define EV_ID_BUS 0
881 +#define EV_ID_VENDOR 1
882 +#define EV_ID_PRODUCT 2
883 +#define EV_ID_VERSION 3
884 +
885 +#define EV_BUS_PCI 0x01
886 +#define EV_BUS_ISAPNP 0x02
887 +#define EV_BUS_USB 0x03
888 +#define EV_BUS_HIL 0x04
889 +
890 +#define EV_BUS_ISA 0x10
891 +#define EV_BUS_I8042 0x11
892 +#define EV_BUS_XTKBD 0x12
893 +#define EV_BUS_RS232 0x13
894 +#define EV_BUS_GAMEPORT 0x14
895 +#define EV_BUS_PARPORT 0x15
896 +#define EV_BUS_AMIGA 0x16
897 +#define EV_BUS_ADB 0x17
898 +#define EV_BUS_I2C 0x18
899 +#define EV_BUS_HOST 0x19
900 +
901 +/*
902 + * Values describing the status of an effect
903 + */
904 +#define EV_FF_STATUS_STOPPED 0x00
905 +#define EV_FF_STATUS_PLAYING 0x01
906 +#define EV_FF_STATUS_MAX 0x01
907 +
908 +/*
909 + * Structures used in ioctls to upload effects to a device
910 + * The first structures are not passed directly by using ioctls.
911 + * They are sub-structures of the actually sent structure (called ff_effect)
912 + */
913 +
914 +struct ff_replay {
915 + __u16 length; /* Duration of an effect in ms. All other times are also expressed in ms */
916 + __u16 delay; /* Time to wait before to start playing an effect */
917 +};
918 +
919 +struct ff_trigger {
920 + __u16 button; /* Number of button triggering an effect */
921 + __u16 interval; /* Time to wait before an effect can be re-triggered (ms) */
922 +};
923 +
924 +struct ff_envelope {
925 + __u16 attack_length; /* Duration of attack (ms) */
926 + __u16 attack_level; /* Level at beginning of attack */
927 + __u16 fade_length; /* Duration of fade (ms) */
928 + __u16 fade_level; /* Level at end of fade */
929 +};
930 +
931 +/* EV_FF_CONSTANT */
932 +struct ff_constant_effect {
933 + __s16 level; /* Strength of effect. Negative values are OK */
934 + struct ff_envelope envelope;
935 +};
936 +
937 +/* EV_FF_RAMP */
938 +struct ff_ramp_effect {
939 + __s16 start_level;
940 + __s16 end_level;
941 + struct ff_envelope envelope;
942 +};
943 +
944 +/* EV_FF_SPRING of FF_FRICTION */
945 +struct ff_condition_effect {
946 + __u16 right_saturation; /* Max level when joystick is on the right */
947 + __u16 left_saturation; /* Max level when joystick in on the left */
948 +
949 + __s16 right_coeff; /* Indicates how fast the force grows when the
950 + joystick moves to the right */
951 + __s16 left_coeff; /* Same for left side */
952 +
953 + __u16 deadband; /* Size of area where no force is produced */
954 + __s16 center; /* Position of dead zone */
955 +
956 +};
957 +
958 +/* EV_FF_PERIODIC */
959 +struct ff_periodic_effect {
960 + __u16 waveform; /* Kind of wave (sine, square...) */
961 + __u16 period; /* in ms */
962 + __s16 magnitude; /* Peak value */
963 + __s16 offset; /* Mean value of wave (roughly) */
964 + __u16 phase; /* 'Horizontal' shift */
965 +
966 + struct ff_envelope envelope;
967 +
968 +/* Only used if waveform == EV_FF_CUSTOM */
969 + __u32 custom_len; /* Number of samples */
970 + __s16 *custom_data; /* Buffer of samples */
971 +/* Note: the data pointed by custom_data is copied by the driver. You can
972 + * therefore dispose of the memory after the upload/update */
973 +};
974 +
975 +/* EV_FF_RUMBLE */
976 +/* Some rumble pads have two motors of different weight.
977 + strong_magnitude represents the magnitude of the vibration generated
978 + by the heavy motor.
979 +*/
980 +struct ff_rumble_effect {
981 + __u16 strong_magnitude; /* Magnitude of the heavy motor */
982 + __u16 weak_magnitude; /* Magnitude of the light one */
983 +};
984 +
985 +/*
986 + * Structure sent through ioctl from the application to the driver
987 + */
988 +struct ff_effect {
989 + __u16 type;
990 +/* Following field denotes the unique id assigned to an effect.
991 + * If user sets if to -1, a new effect is created, and its id is returned in the same field
992 + * Else, the user sets it to the effect id it wants to update.
993 + */
994 + __s16 id;
995 +
996 + __u16 direction; /* Direction. 0 deg -> 0x0000 (down)
997 + 90 deg -> 0x4000 (left)
998 + 180 deg -> 0x8000 (up)
999 + 270 deg -> 0xC000 (right)
1000 + */
1001 +
1002 + struct ff_trigger trigger;
1003 + struct ff_replay replay;
1004 +
1005 + union {
1006 + struct ff_constant_effect constant;
1007 + struct ff_ramp_effect ramp;
1008 + struct ff_periodic_effect periodic;
1009 + struct ff_condition_effect condition[2]; /* One for each axis */
1010 + struct ff_rumble_effect rumble;
1011 + } u;
1012 +};
1013 +
1014 +/*
1015 + * Force feedback effect types
1016 + */
1017 +
1018 +#define EV_FF_RUMBLE 0x50
1019 +#define EV_FF_PERIODIC 0x51
1020 +#define EV_FF_CONSTANT 0x52
1021 +#define EV_FF_SPRING 0x53
1022 +#define EV_FF_FRICTION 0x54
1023 +#define EV_FF_DAMPER 0x55
1024 +#define EV_FF_INERTIA 0x56
1025 +#define EV_FF_RAMP 0x57
1026 +
1027 +/*
1028 + * Force feedback periodic effect types
1029 + */
1030 +
1031 +#define EV_FF_SQUARE 0x58
1032 +#define EV_FF_TRIANGLE 0x59
1033 +#define EV_FF_SINE 0x5a
1034 +#define EV_FF_SAW_UP 0x5b
1035 +#define EV_FF_SAW_DOWN 0x5c
1036 +#define EV_FF_CUSTOM 0x5d
1037 +
1038 +/*
1039 + * Set ff device properties
1040 + */
1041 +
1042 +#define EV_FF_GAIN 0x60
1043 +#define EV_FF_AUTOCENTER 0x61
1044 +
1045 +#define EV_FF_MAX 0x7f
1046 +
1047 +
1048 +
1049 +typedef struct _evdevDriver {
1050 + const char *name;
1051 + const char *phys;
1052 + void *cb_data;
1053 + int (*callback)(void *cb_data, int what);
1054 + struct _evdevDriver *next;
1055 +} evdevDriver, *evdevDriverPtr;
1056 +
1057 +int evdevGetFDForDriver (evdevDriverPtr driver);
1058 +Bool evdevStart (InputDriverPtr drv);
1059 +Bool evdevNewDriver (evdevDriverPtr driver);
1060 +
1061 +#endif /* LNX_EVDEV_H_ */