Annotation of /trunk/xorg-old/patches-6.8.2-r10/9000_all_6.7.99.2-lnx-evdev-core-v3.patch
Parent Directory | Revision Log
Revision 167 -
(hide annotations)
(download)
Tue May 8 20:58:51 2007 UTC (17 years, 4 months ago) by niro
File size: 27798 byte(s)
Tue May 8 20:58:51 2007 UTC (17 years, 4 months 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_ */ |