summaryrefslogtreecommitdiffstats
path: root/meta-extras/packages/xorg-xserver/xserver-kdrive-xomap/kdrive-evdev.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-extras/packages/xorg-xserver/xserver-kdrive-xomap/kdrive-evdev.patch')
-rw-r--r--meta-extras/packages/xorg-xserver/xserver-kdrive-xomap/kdrive-evdev.patch503
1 files changed, 503 insertions, 0 deletions
diff --git a/meta-extras/packages/xorg-xserver/xserver-kdrive-xomap/kdrive-evdev.patch b/meta-extras/packages/xorg-xserver/xserver-kdrive-xomap/kdrive-evdev.patch
new file mode 100644
index 0000000000..06eab817bd
--- /dev/null
+++ b/meta-extras/packages/xorg-xserver/xserver-kdrive-xomap/kdrive-evdev.patch
@@ -0,0 +1,503 @@
1# Kdrive evdev support patch, posted by Ander Conselvan de Oliveira at
2# http://lists.freedesktop.org/archives/xorg/2005-December/011635.html
3---
4# hw/kdrive/linux/evdev.c | 385 ++++++++++++++++++++++++++++++++++++++++++++++--
5# hw/kdrive/src/kdrive.c | 9 +
6# hw/kdrive/src/kdrive.h | 4
7# 3 files changed, 386 insertions(+), 12 deletions(-)
8#
9Index: xorg-server-1.1.99.3/hw/kdrive/linux/evdev.c
10===================================================================
11--- xorg-server-1.1.99.3.orig/hw/kdrive/linux/evdev.c 2006-11-03 14:49:05.000000000 +0000
12+++ xorg-server-1.1.99.3/hw/kdrive/linux/evdev.c 2007-01-25 22:05:48.000000000 +0000
13@@ -31,9 +31,11 @@
14 #include <X11/X.h>
15 #include <X11/Xproto.h>
16 #include <X11/Xpoll.h>
17+#include <X11/keysym.h>
18 #include "inputstr.h"
19 #include "scrnintstr.h"
20 #include "kdrive.h"
21+#include "kkeymap.h"
22
23 #define NUM_EVENTS 128
24 #define ABS_UNSET -65535
25@@ -107,9 +109,10 @@ EvdevRead (int evdevPort, void *closure)
26 {
27 KdPointerInfo *pi = closure;
28 Kevdev *ke = pi->driverPrivate;
29- int i;
30+ int i, j;
31 struct input_event events[NUM_EVENTS];
32 int n;
33+ int flags;
34
35 n = read (evdevPort, &events, NUM_EVENTS * sizeof (struct input_event));
36 if (n <= 0)
37@@ -117,22 +120,64 @@ EvdevRead (int evdevPort, void *closure)
38 n /= sizeof (struct input_event);
39 for (i = 0; i < n; i++)
40 {
41+ flags = KD_MOUSE_DELTA | kdPointerInfo->buttonState;
42 switch (events[i].type) {
43 case EV_SYN:
44 break;
45 case EV_KEY:
46- EvdevMotion (pi);
47- ASSIGNBIT(ke->key,events[i].code, events[i].value);
48- if (events[i].code < 0x100)
49- ErrorF ("key %d %d\n", events[i].code, events[i].value);
50- else
51- ErrorF ("key 0x%x %d\n", events[i].code, events[i].value);
52+ if (events[i].code >= BTN_MOUSE && events[i].code < BTN_JOYSTICK) {
53+ switch (events[i].code) {
54+ case BTN_LEFT:
55+ if (events[i].value == 1)
56+ flags |= KD_BUTTON_1;
57+ else
58+ flags &= ~KD_BUTTON_1;
59+ break;
60+ case BTN_MIDDLE:
61+ if (events[i].value == 1)
62+ flags |= KD_BUTTON_2;
63+ else
64+ flags &= ~KD_BUTTON_2;
65+ break;
66+ case BTN_RIGHT:
67+ if (events[i].value == 1)
68+ flags |= KD_BUTTON_3;
69+ else
70+ flags &= ~KD_BUTTON_3;
71+ break;
72+ default:
73+ /* Unknow button */
74+ break;
75+ }
76+ KdEnqueueMouseEvent (kdMouseInfo, flags, 0, 0);
77+ }
78 break;
79 case EV_REL:
80- ke->rel[events[i].code] += events[i].value;
81+ if (events[i].code == REL_X) {
82+ KdEnqueueMouseEvent (kdMouseInfo, flags, events[i].value, 0);
83+ }
84+ else if (events[i].code == REL_Y) {
85+ KdEnqueueMouseEvent (kdMouseInfo, flags, 0, events[i].value);
86+ }
87+ else if (events[i].code == REL_WHEEL) {
88+ for (j = 0; j < abs (events[i].value); j++) {
89+ if (events[i].value > 0)
90+ flags |= KD_BUTTON_4;
91+ else
92+ flags |= KD_BUTTON_5;
93+
94+ KdEnqueueMouseEvent (kdMouseInfo, flags, 0, 0);
95+
96+ if (events[i].value > 0)
97+ flags &= ~KD_BUTTON_4;
98+ else
99+ flags &= ~KD_BUTTON_5;
100+
101+ KdEnqueueMouseEvent (kdMouseInfo, flags, 0, 0);
102+ } /* events[i].code == REL_WHEEL */
103+ }
104 break;
105 case EV_ABS:
106- ke->abs[events[i].code] = events[i].value;
107 break;
108 }
109 }
110@@ -162,6 +207,12 @@ EvdevInit (KdPointerInfo *pi)
111 for (i = 0; i < NUM_DEFAULT_EVDEV; i++) {
112 fd = open (kdefaultEvdev[i], 2);
113 if (fd >= 0) {
114+ if (ioctl (fd, EVIOCGRAB, 1) < 0)
115+ {
116+ close (fd);
117+ continue;
118+ }
119+
120 pi->path = KdSaveString (kdefaultEvdev[i]);
121 break;
122 }
123@@ -300,7 +351,319 @@ KdPointerDriver LinuxEvdevMouseDriver =
124 NULL,
125 };
126
127-#if 0
128+/* Keyboard */
129+
130+int kbd_fd = -1;
131+int EvdevInputType = 0;
132+
133+KeySym evdevKeymap[(194 - 1 + 1) * 2] = {
134+/* These are directly mapped from DOS scanset 0 */
135+/* 1 8 */ XK_Escape, NoSymbol,
136+/* 2 9 */ XK_1, XK_exclam,
137+/* 3 10 */ XK_2, XK_at,
138+/* 4 11 */ XK_3, XK_numbersign,
139+/* 5 12 */ XK_4, XK_dollar,
140+/* 6 13 */ XK_5, XK_percent,
141+/* 7 14 */ XK_6, XK_asciicircum,
142+/* 8 15 */ XK_7, XK_ampersand,
143+/* 9 16 */ XK_8, XK_asterisk,
144+/* 10 17 */ XK_9, XK_parenleft,
145+/* 11 18 */ XK_0, XK_parenright,
146+/* 12 19 */ XK_minus, XK_underscore,
147+/* 13 20 */ XK_equal, XK_plus,
148+/* 14 21 */ XK_BackSpace, NoSymbol,
149+/* 15 22 */ XK_Tab, NoSymbol,
150+/* 16 23 */ XK_Q, NoSymbol,
151+/* 17 24 */ XK_W, NoSymbol,
152+/* 18 25 */ XK_E, NoSymbol,
153+/* 19 26 */ XK_R, NoSymbol,
154+/* 20 27 */ XK_T, NoSymbol,
155+/* 21 28 */ XK_Y, NoSymbol,
156+/* 22 29 */ XK_U, NoSymbol,
157+/* 23 30 */ XK_I, NoSymbol,
158+/* 24 31 */ XK_O, NoSymbol,
159+/* 25 32 */ XK_P, NoSymbol,
160+/* 26 33 */ XK_bracketleft, XK_braceleft,
161+/* 27 34 */ XK_bracketright, XK_braceright,
162+/* 28 35 */ XK_Return, NoSymbol,
163+/* 29 36 */ XK_Control_L, NoSymbol,
164+/* 30 37 */ XK_A, NoSymbol,
165+/* 31 38 */ XK_S, NoSymbol,
166+/* 32 39 */ XK_D, NoSymbol,
167+/* 33 40 */ XK_F, NoSymbol,
168+/* 34 41 */ XK_G, NoSymbol,
169+/* 35 42 */ XK_H, NoSymbol,
170+/* 36 43 */ XK_J, NoSymbol,
171+/* 37 44 */ XK_K, NoSymbol,
172+/* 38 45 */ XK_L, NoSymbol,
173+/* 39 46 */ XK_semicolon, XK_colon,
174+/* 40 47 */ XK_apostrophe, XK_quotedbl,
175+/* 41 48 */ XK_grave, XK_asciitilde,
176+/* 42 49 */ XK_Shift_L, NoSymbol,
177+/* 43 50 */ XK_backslash, XK_bar,
178+/* 44 51 */ XK_Z, NoSymbol,
179+/* 45 52 */ XK_X, NoSymbol,
180+/* 46 53 */ XK_C, NoSymbol,
181+/* 47 54 */ XK_V, NoSymbol,
182+/* 48 55 */ XK_B, NoSymbol,
183+/* 49 56 */ XK_N, NoSymbol,
184+/* 50 57 */ XK_M, NoSymbol,
185+/* 51 58 */ XK_comma, XK_less,
186+/* 52 59 */ XK_period, XK_greater,
187+/* 53 60 */ XK_slash, XK_question,
188+/* 54 61 */ XK_Shift_R, NoSymbol,
189+/* 55 62 */ XK_KP_Multiply, NoSymbol,
190+/* 56 63 */ XK_Alt_L, XK_Meta_L,
191+/* 57 64 */ XK_space, NoSymbol,
192+/* 58 65 */ XK_Caps_Lock, NoSymbol,
193+/* 59 66 */ XK_F1, NoSymbol,
194+/* 60 67 */ XK_F2, NoSymbol,
195+/* 61 68 */ XK_F3, NoSymbol,
196+/* 62 69 */ XK_F4, NoSymbol,
197+/* 63 70 */ XK_F5, NoSymbol,
198+/* 64 71 */ XK_F6, NoSymbol,
199+/* 65 72 */ XK_F7, NoSymbol,
200+/* 66 73 */ XK_F8, NoSymbol,
201+/* 67 74 */ XK_F9, NoSymbol,
202+/* 68 75 */ XK_F10, NoSymbol,
203+/* 69 76 */ XK_Break, XK_Pause,
204+/* 70 77 */ XK_Scroll_Lock, NoSymbol,
205+/* 71 78 */ XK_KP_Home, XK_KP_7,
206+/* 72 79 */ XK_KP_Up, XK_KP_8,
207+/* 73 80 */ XK_KP_Page_Up, XK_KP_9,
208+/* 74 81 */ XK_KP_Subtract, NoSymbol,
209+/* 75 82 */ XK_KP_Left, XK_KP_4,
210+/* 76 83 */ XK_KP_5, NoSymbol,
211+/* 77 84 */ XK_KP_Right, XK_KP_6,
212+/* 78 85 */ XK_KP_Add, NoSymbol,
213+/* 79 86 */ XK_KP_End, XK_KP_1,
214+/* 80 87 */ XK_KP_Down, XK_KP_2,
215+/* 81 88 */ XK_KP_Page_Down, XK_KP_3,
216+/* 82 89 */ XK_KP_Insert, XK_KP_0,
217+/* 83 90 */ XK_KP_Delete, XK_KP_Decimal,
218+/* 84 91 */ NoSymbol, NoSymbol,
219+/* 85 92 */ NoSymbol, NoSymbol,
220+/* 86 93 */ NoSymbol, NoSymbol,
221+/* 87 94 */ XK_F11, NoSymbol,
222+/* 88 95 */ XK_F12, NoSymbol,
223+
224+/* These are remapped from the extended set (using ExtendMap) */
225+
226+/* 89 96 */ XK_Control_R, NoSymbol,
227+/* 90 97 */ XK_KP_Enter, NoSymbol,
228+/* 91 98 */ XK_KP_Divide, NoSymbol,
229+/* 92 99 */ XK_Sys_Req, XK_Print,
230+/* 93 100 */ XK_Alt_R, XK_Meta_R,
231+/* 94 101 */ XK_Num_Lock, NoSymbol,
232+/* 95 102 */ XK_Home, NoSymbol,
233+/* 96 103 */ XK_Up, NoSymbol,
234+/* 97 104 */ XK_Page_Up, NoSymbol,
235+/* 98 105 */ XK_Left, NoSymbol,
236+/* 99 106 */ XK_Right, NoSymbol,
237+/* 100 107 */ XK_End, NoSymbol,
238+/* 101 108 */ XK_Down, NoSymbol,
239+/* 102 109 */ XK_Page_Down, NoSymbol,
240+/* 103 110 */ XK_Insert, NoSymbol,
241+/* 104 111 */ XK_Delete, NoSymbol,
242+/* 105 112 */ XK_Super_L, NoSymbol,
243+/* 106 113 */ XK_Super_R, NoSymbol,
244+/* 107 114 */ XK_Menu, NoSymbol,
245+/* 108 115 */ NoSymbol, NoSymbol,
246+/* 109 116 */ NoSymbol, NoSymbol,
247+/* 110 117 */ NoSymbol, NoSymbol,
248+/* 111 118 */ NoSymbol, NoSymbol,
249+/* 112 119 */ NoSymbol, NoSymbol,
250+
251+/* 113 120 */ NoSymbol, NoSymbol,
252+/* 114 121 */ NoSymbol, NoSymbol,
253+/* 115 122 */ NoSymbol, NoSymbol,
254+/* 116 123 */ NoSymbol, NoSymbol,
255+/* 117 124 */ NoSymbol, NoSymbol,
256+/* 118 125 */ NoSymbol, NoSymbol,
257+/* 119 126 */ NoSymbol, NoSymbol,
258+/* 120 127 */ NoSymbol, NoSymbol,
259+/* 121 128 */ NoSymbol, NoSymbol,
260+/* 122 129 */ NoSymbol, NoSymbol,
261+/* 123 130 */ NoSymbol, NoSymbol,
262+/* 124 131 */ NoSymbol, NoSymbol,
263+/* 125 132 */ NoSymbol, NoSymbol,
264+/* 126 133 */ NoSymbol, NoSymbol,
265+/* 127 134 */ NoSymbol, NoSymbol,
266+/* 128 135 */ NoSymbol, NoSymbol,
267+/* 129 136 */ NoSymbol, NoSymbol,
268+/* 130 137 */ NoSymbol, NoSymbol,
269+/* 131 138 */ NoSymbol, NoSymbol,
270+/* 132 139 */ NoSymbol, NoSymbol,
271+/* 133 140 */ NoSymbol, NoSymbol,
272+/* 134 141 */ NoSymbol, NoSymbol,
273+/* 135 142 */ NoSymbol, NoSymbol,
274+/* 136 143 */ NoSymbol, NoSymbol,
275+/* 137 144 */ NoSymbol, NoSymbol,
276+/* 138 145 */ NoSymbol, NoSymbol,
277+/* 139 146 */ NoSymbol, NoSymbol,
278+/* 140 147 */ NoSymbol, NoSymbol,
279+/* 141 148 */ NoSymbol, NoSymbol,
280+/* 142 149 */ NoSymbol, NoSymbol,
281+/* 143 150 */ NoSymbol, NoSymbol,
282+/* 144 151 */ NoSymbol, NoSymbol,
283+/* 145 152 */ NoSymbol, NoSymbol,
284+/* 146 153 */ NoSymbol, NoSymbol,
285+/* 147 154 */ NoSymbol, NoSymbol,
286+/* 148 155 */ NoSymbol, NoSymbol,
287+/* 149 156 */ NoSymbol, NoSymbol,
288+/* 150 157 */ NoSymbol, NoSymbol,
289+/* 151 158 */ NoSymbol, NoSymbol,
290+/* 152 159 */ NoSymbol, NoSymbol,
291+/* 153 160 */ NoSymbol, NoSymbol,
292+/* 154 161 */ NoSymbol, NoSymbol,
293+/* 155 162 */ NoSymbol, NoSymbol,
294+/* 156 163 */ NoSymbol, NoSymbol,
295+/* 157 164 */ NoSymbol, NoSymbol,
296+/* 158 165 */ NoSymbol, NoSymbol,
297+/* 159 166 */ NoSymbol, NoSymbol,
298+/* 160 167 */ NoSymbol, NoSymbol,
299+/* 161 168 */ NoSymbol, NoSymbol,
300+/* 162 169 */ NoSymbol, NoSymbol,
301+/* 163 170 */ NoSymbol, NoSymbol,
302+/* 164 171 */ NoSymbol, NoSymbol,
303+/* 165 172 */ NoSymbol, NoSymbol,
304+/* 166 173 */ NoSymbol, NoSymbol,
305+/* 167 174 */ NoSymbol, NoSymbol,
306+/* 168 175 */ NoSymbol, NoSymbol,
307+/* 169 176 */ NoSymbol, NoSymbol,
308+/* 170 177 */ NoSymbol, NoSymbol,
309+/* 171 178 */ NoSymbol, NoSymbol,
310+/* 172 179 */ NoSymbol, NoSymbol,
311+/* 173 180 */ NoSymbol, NoSymbol,
312+/* 174 181 */ NoSymbol, NoSymbol,
313+/* 175 182 */ NoSymbol, NoSymbol,
314+/* 176 183 */ NoSymbol, NoSymbol,
315+/* 177 184 */ NoSymbol, NoSymbol,
316+/* 178 185 */ NoSymbol, NoSymbol,
317+/* 179 186 */ NoSymbol, NoSymbol,
318+/* 180 187 */ NoSymbol, NoSymbol,
319+/* 181 188 */ NoSymbol, NoSymbol,
320+/* 182 189 */ NoSymbol, NoSymbol,
321+/* 183 190 */ NoSymbol, NoSymbol,
322+/* 184 191 */ NoSymbol, NoSymbol,
323+/* 185 192 */ NoSymbol, NoSymbol,
324+/* 186 193 */ NoSymbol, NoSymbol,
325+/* 187 194 */ NoSymbol, NoSymbol,
326+/* 188 195 */ NoSymbol, NoSymbol,
327+/* 189 196 */ NoSymbol, NoSymbol,
328+/* 190 197 */ NoSymbol, NoSymbol,
329+/* 191 198 */ NoSymbol, NoSymbol,
330+/* 192 199 */ NoSymbol, NoSymbol,
331+/* 193 200 */ NoSymbol, NoSymbol,
332+/* 194 201 */ NoSymbol, NoSymbol,
333+};
334+
335+static void
336+EvdevKbdRead (int fd, void *closure)
337+{
338+ int i, n;
339+ struct input_event events[NUM_EVENTS];
340+
341+ n = read (fd, &events, NUM_EVENTS * sizeof (struct input_event));
342+ if (n <= 0)
343+ return;
344+
345+ n /= sizeof (struct input_event);
346+
347+ for (i = 0; i < n; i++)
348+ {
349+ if (events[i].type == EV_KEY)
350+ KdEnqueueKeyboardEvent (events[i].code, !events[i].value);
351+ }
352+}
353+
354+static void
355+EvdevKbdLoad (void)
356+{
357+ kdMinScanCode = 0;
358+ kdMaxScanCode = 193;
359+ kdKeymapWidth = 2;
360+ memcpy (kdKeymap, evdevKeymap, sizeof (evdevKeymap));
361+}
362+
363+static int
364+EvdevKbdInit (void)
365+{
366+ int fd, i;
367+
368+ if (!EvdevInputType)
369+ EvdevInputType = KdAllocInputType ();
370+
371+ if (!kdKeyboard)
372+ {
373+ for (i = 0; i < NUM_DEFAULT_EVDEV; i++)
374+ {
375+ fd = open (kdefaultEvdev[i], 2);
376+ if (fd >= 0)
377+ {
378+ kdKeyboard = KdSaveString (kdefaultEvdev[i]);
379+ break;
380+ }
381+ }
382+ }
383+ else
384+ {
385+ fd = open (kdKeyboard, O_RDWR);
386+ if (fd < 0)
387+ return FALSE;
388+ }
389+
390+ if (ioctl (fd, EVIOCGRAB, 1) < 0)
391+ {
392+ close (fd);
393+ return FALSE;
394+ }
395+
396+ if (!KdRegisterFd (EvdevInputType, fd, EvdevKbdRead, NULL))
397+ return FALSE;
398+
399+ kbd_fd = fd;
400+ return TRUE;
401+}
402+
403+static void
404+EvdevKbdFini (void)
405+{
406+}
407+
408+static void
409+EvdevKbdLeds (int leds)
410+{
411+ struct input_event event;
412+
413+ memset(&event, 0, sizeof(event));
414+
415+ event.type = EV_LED;
416+ event.code = LED_CAPSL;
417+ event.value = leds & (1 << 0) ? 1 : 0;
418+ write(kbd_fd, (char *) &event, sizeof(event));
419+
420+ event.type = EV_LED;
421+ event.code = LED_NUML;
422+ event.value = leds & (1 << 1) ? 1 : 0;
423+ write(kbd_fd, (char *) &event, sizeof(event));
424+
425+ event.type = EV_LED;
426+ event.code = LED_SCROLLL;
427+ event.value = leds & (1 << 2) ? 1 : 0;
428+ write(kbd_fd, (char *) &event, sizeof(event));
429+
430+ event.type = EV_LED;
431+ event.code = LED_COMPOSE;
432+ event.value = leds & (1 << 3) ? 1 : 0;
433+ write(kbd_fd, (char *) &event, sizeof(event));
434+}
435+
436+static void
437+EvdevKbdBell (int volume, int frequency, int duration)
438+{
439+}
440+
441 KdKeyboardFuncs LinuxEvdevKeyboardFuncs = {
442 EvdevKbdLoad,
443 EvdevKbdInit,
444@@ -309,4 +672,4 @@ KdKeyboardFuncs LinuxEvdevKeyboardFuncs
445 EvdevKbdFini,
446 0,
447 };
448-#endif
449+
450Index: xorg-server-1.1.99.3/hw/kdrive/src/kdrive.c
451===================================================================
452--- xorg-server-1.1.99.3.orig/hw/kdrive/src/kdrive.c 2006-11-03 14:49:05.000000000 +0000
453+++ xorg-server-1.1.99.3/hw/kdrive/src/kdrive.c 2007-01-25 21:56:32.000000000 +0000
454@@ -80,6 +80,7 @@ Bool kdDontZap;
455 Bool kdEnabled;
456 int kdSubpixelOrder;
457 int kdVirtualTerminal = -1;
458+char *kdKeyboard = 0;
459 Bool kdSwitchPending;
460 char *kdSwitchCmd;
461 DDXPointRec kdOrigin;
462@@ -707,6 +708,14 @@ KdProcessArgument (int argc, char **argv
463 UseMsg ();
464 return 2;
465 }
466+ if (!strcmp (argv[i], "-keyboard"))
467+ {
468+ if ((i+1) < argc)
469+ kdKeyboard = argv[i+1];
470+ else
471+ UseMsg ();
472+ return 2;
473+ }
474 if (!strcmp (argv[i], "-rgba"))
475 {
476 if ((i+1) < argc)
477Index: xorg-server-1.1.99.3/hw/kdrive/src/kdrive.h
478===================================================================
479--- xorg-server-1.1.99.3.orig/hw/kdrive/src/kdrive.h 2006-11-03 14:49:05.000000000 +0000
480+++ xorg-server-1.1.99.3/hw/kdrive/src/kdrive.h 2007-01-25 21:58:26.000000000 +0000
481@@ -512,6 +512,7 @@ extern Bool kdEmulateMiddleButton;
482 extern Bool kdDisableZaphod;
483 extern Bool kdDontZap;
484 extern int kdVirtualTerminal;
485+extern char *kdKeyboard;
486 extern char *kdSwitchCmd;
487 extern KdOsFuncs *kdOsFuncs;
488
489@@ -875,12 +876,13 @@ void
490 ProcessInputEvents (void);
491
492 extern KdPointerDriver LinuxMouseDriver;
493-extern KdPointerDriver LinuxEvdevDriver;
494+extern KdPointerDriver LinuxEvdevMouseFuncs;
495 extern KdPointerDriver Ps2MouseDriver;
496 extern KdPointerDriver BusMouseDriver;
497 extern KdPointerDriver MsMouseDriver;
498 extern KdPointerDriver TsDriver;
499 extern KdKeyboardDriver LinuxKeyboardDriver;
500+extern KdKeyboardFuncs LinuxEvdevKeyboardFuncs;
501 extern KdOsFuncs LinuxFuncs;
502
503 extern KdPointerDriver VxWorksMouseDriver;