Contents 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 -
(show 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 | 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_ */ |