[oe-commits] org.oe.dev xserver-kdrive-1.3/1.4: keycode MEDIUMRAW patch, oebug 2637, courtesy of Stanislav Brabec utx at penguin.cz

xjqian commit openembedded-commits at lists.openembedded.org
Fri Feb 1 10:10:04 UTC 2008


xserver-kdrive-1.3/1.4: keycode MEDIUMRAW patch, oebug 2637, courtesy of Stanislav Brabec utx at penguin.cz
* see details in bugtracker and mailinglist

Author: xjqian at openembedded.org
Branch: org.openembedded.dev
Revision: 3ea27c0c881e1f8965e9208c8a3d98d022602838
ViewMTN: http://monotone.openembedded.org/revision/info/3ea27c0c881e1f8965e9208c8a3d98d022602838
Files:
1
packages/xorg-xserver/xserver-kdrive-1.3.0.0/linux-keyboard-mediumraw.patch
packages/xorg-xserver/xserver-kdrive-1.4/linux-keyboard-mediumraw.patch
packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb
packages/xorg-xserver/xserver-kdrive_1.4.bb
Diffs:

#
# mt diff -r6795ad85517140b388d2c168ea971686ade5c7e3 -r3ea27c0c881e1f8965e9208c8a3d98d022602838
#
# 
# 
# add_file "packages/xorg-xserver/xserver-kdrive-1.3.0.0/linux-keyboard-mediumraw.patch"
#  content [e5ade42dad2df4fd8a283ea21343e22ea1b5b5d6]
# 
# add_file "packages/xorg-xserver/xserver-kdrive-1.4/linux-keyboard-mediumraw.patch"
#  content [faca4d8feba0272517c84f11ac61a39c0b055556]
# 
# patch "packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb"
#  from [c8df66fc28ad69123340b7acdf08b827bc631c09]
#    to [350011b7ffab8f9ef0f5d7295afe014941cf3492]
# 
# patch "packages/xorg-xserver/xserver-kdrive_1.4.bb"
#  from [fc1b8a97acf55bb4abc9d1d2ad120b71d1d4f15a]
#    to [b08682b1e497d6999914f7b52000ff0293b6b2ef]
# 
============================================================
--- packages/xorg-xserver/xserver-kdrive-1.3.0.0/linux-keyboard-mediumraw.patch	e5ade42dad2df4fd8a283ea21343e22ea1b5b5d6
+++ packages/xorg-xserver/xserver-kdrive-1.3.0.0/linux-keyboard-mediumraw.patch	e5ade42dad2df4fd8a283ea21343e22ea1b5b5d6
@@ -0,0 +1,83 @@
+Index: xorg-server-1.3.0.0/hw/kdrive/linux/keyboard.c
+===================================================================
+--- xorg-server-1.3.0.0.orig/hw/kdrive/linux/keyboard.c	2006-11-16 18:01:23.000000000 +0000
++++ xorg-server-1.3.0.0/hw/kdrive/linux/keyboard.c	2007-08-12 12:14:29.000000000 +0000
+@@ -384,14 +384,35 @@
+ LinuxKeyboardRead (int fd, void *closure)
+ {
+     unsigned char   buf[256], *b;
+-    int		    n;
++    int		    n, mediumraw_data, mediumraw_event;
++    static enum { LOWKEY, BYTE1, BYTE2 } mediumraw_state = LOWKEY;
+ 
+     while ((n = read (fd, buf, sizeof (buf))) > 0)
+     {
+ 	b = buf;
+ 	while (n--)
+ 	{
+-	    KdEnqueueKeyboardEvent (b[0] & 0x7f, b[0] & 0x80);
++	    switch (mediumraw_state)
++	    {
++	    case LOWKEY:
++		if ( (b[0] & 0x7f) == 0)
++		{
++		    mediumraw_state = BYTE1;
++		    mediumraw_event = b[0] & 0x80;
++		}
++		else
++		    KdEnqueueKeyboardEvent (b[0] & 0x7f, b[0] & 0x80);
++		break;
++	    case BYTE1:
++		mediumraw_data = (b[0] & 0x7f) << 7;
++		mediumraw_state = BYTE2;
++		break;
++	    case BYTE2:
++		/* FIXME: KdEnqueueKeyboardEvent should accept word size */
++		KdEnqueueKeyboardEvent ( mediumraw_data | (b[0] & 0x7f), mediumraw_event);
++		mediumraw_state = LOWKEY;
++		break;
++	    }
+ 	    b++;
+ 	}
+     }
+Index: xorg-server-1.3.0.0/hw/xfree86/os-support/linux/lnx_kbd.c
+===================================================================
+--- xorg-server-1.3.0.0.orig/hw/xfree86/os-support/linux/lnx_kbd.c	2006-11-16 18:01:25.000000000 +0000
++++ xorg-server-1.3.0.0/hw/xfree86/os-support/linux/lnx_kbd.c	2007-08-12 12:14:29.000000000 +0000
+@@ -430,12 +430,32 @@
+ {
+     KbdDevPtr pKbd = (KbdDevPtr) pInfo->private;
+     unsigned char rBuf[64];
+-    int nBytes, i;
++    int nBytes, i, mediumraw_data, mediumraw_event;
++    static enum { LOWKEY, BYTE1, BYTE2 } mediumraw_state = LOWKEY;
+     if ((nBytes = read( pInfo->fd, (char *)rBuf, sizeof(rBuf))) > 0) {
+-       for (i = 0; i < nBytes; i++)
+-           pKbd->PostEvent(pInfo, rBuf[i] & 0x7f,
+-                           rBuf[i] & 0x80 ? FALSE : TRUE);
++       for (i = 0; i < nBytes; i++) {
++           switch (mediumraw_state) {
++           case LOWKEY:
++               if ( (rBuf[i] & 0x7f) == 0) {
++                   mediumraw_state = BYTE1;
++                   mediumraw_event = rBuf[i] & 0x80;
++               }
++               else
++                   pKbd->PostEvent(pInfo, rBuf[i] & 0x7f,
++                                   rBuf[i] & 0x80 ? FALSE : TRUE);
++               break;
++           case BYTE1:
++               mediumraw_data = (rBuf[i] & 0x7f) << 7;
++               mediumraw_state = BYTE2;
++               break;
++           case BYTE2:
++               pKbd->PostEvent(pInfo, mediumraw_data | (rBuf[i] & 0x7f),
++                               mediumraw_event ? FALSE : TRUE);
++               mediumraw_state = LOWKEY;
++               break;
++           }
+        }
++    }
+ }
+ 
+ static Bool
============================================================
--- packages/xorg-xserver/xserver-kdrive-1.4/linux-keyboard-mediumraw.patch	faca4d8feba0272517c84f11ac61a39c0b055556
+++ packages/xorg-xserver/xserver-kdrive-1.4/linux-keyboard-mediumraw.patch	faca4d8feba0272517c84f11ac61a39c0b055556
@@ -0,0 +1,44 @@
+Index: git/hw/kdrive/linux/keyboard.c
+===================================================================
+--- git.orig/hw/kdrive/linux/keyboard.c	2007-11-14 21:30:45.000000000 +0000
++++ git/hw/kdrive/linux/keyboard.c	2007-11-15 12:00:11.000000000 +0000
+@@ -42,6 +42,8 @@
+ #include <sys/ioctl.h>
+ 
+ extern int LinuxConsoleFd;
++static unsigned char mediumraw_data, mediumraw_up;
++static enum { DEFAULT, EXTBYTE1, EXTBYTE2 } mediumraw_state = DEFAULT;
+ 
+ static const KeySym linux_to_x[256] = {
+ 	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
+@@ -701,7 +703,29 @@
+             else
+ #endif
+                 scancode = b[0] & 0x7f;
+-	    KdEnqueueKeyboardEvent (closure, scancode, b[0] & 0x80);
++	    /* This is extended medium raw mode interpreter
++	       see linux/drivers/keyboard.c (kbd->kbdmode == VC_MEDIUMRAW) */
++	    switch (mediumraw_state)
++	    {
++	    case DEFAULT:
++		if (scancode == 0)
++		{
++		    mediumraw_state = EXTBYTE1;
++		    mediumraw_up = b[0] & 0x80;
++		}
++		else
++		    KdEnqueueKeyboardEvent (closure, scancode, b[0] & 0x80);
++		break;
++	    case EXTBYTE1:
++		mediumraw_data = scancode;
++		mediumraw_state = EXTBYTE2;
++		break;
++	    case EXTBYTE2:
++		/* Note: Only codes < 256 will pass correctly through KdEnqueueKeyboardEvent() */
++	      KdEnqueueKeyboardEvent (closure, (int)mediumraw_data << 7 | scancode, mediumraw_up);
++		mediumraw_state = DEFAULT;
++		break;
++	    }
+ 	    b++;
+ 	}
+     }
============================================================
--- packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb	c8df66fc28ad69123340b7acdf08b827bc631c09
+++ packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb	350011b7ffab8f9ef0f5d7295afe014941cf3492
@@ -1,9 +1,9 @@ PE = "1"
 require xserver-kdrive-common.inc
 
 DEPENDS += "libxkbfile libxcalibrate"
 
 PE = "1"
-PR = "r23"
+PR = "r24"
 
 SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
 	${KDRIVE_COMMON_PATCHES} \
@@ -20,6 +20,7 @@ SRC_URI = "${XORG_MIRROR}/individual/xse
 	file://w100-autofoo.patch;patch=1 \
 	file://w100-fix-offscreen-bmp.patch;patch=1 \
         file://kdrive-1.3-18bpp.patch;patch=1 \
+        file://linux-keyboard-mediumraw.patch;patch=1 \
         file://gumstix-kmode.patch;patch=1 \
         file://smedia-glamo.patch;patch=1 \
         file://build-glamo.patch;patch=1 \
============================================================
--- packages/xorg-xserver/xserver-kdrive_1.4.bb	fc1b8a97acf55bb4abc9d1d2ad120b71d1d4f15a
+++ packages/xorg-xserver/xserver-kdrive_1.4.bb	b08682b1e497d6999914f7b52000ff0293b6b2ef
@@ -1,9 +1,9 @@ PE = "1"
 require xserver-kdrive-common.inc
 
 DEPENDS += "hal libxkbfile libxcalibrate pixman"
 
 PE = "1"
-PR = "r1"
+PR = "r2"
 
 SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
 	${KDRIVE_COMMON_PATCHES} \
@@ -16,6 +16,7 @@ SRC_URI = "${XORG_MIRROR}/individual/xse
 	file://w100-autofoo.patch;patch=1 \
 	file://w100-fix-offscreen-bmp.patch;patch=1 \
 	file://w100-new-input-world-order.patch;patch=1 \
+	file://linux-keyboard-mediumraw.patch;patch=1 \
 	file://xcalibrate-new-input-world-order.patch;patch=1 \
 	file://tslib-default-device.patch;patch=1 \
 	file://fbdev-evdev.patch;patch=1 \






More information about the Openembedded-commits mailing list