All pastes #993269 Raw Edit

Adds Linux mediumraw keyboard su

public diff v1 · immutable
#993269 ·published 2008-04-22 14:34 UTC
rendered paste body
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++; 	}     }