Magellan Linux

Annotation 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 - (hide annotations) (download)
Tue May 8 20:58:51 2007 UTC (17 years, 1 month ago) by niro
File size: 27798 byte(s)
-import

1 niro 167 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_ */