}
struct _KEY_CODE_TO_USAGE {
+ const CHAR *KeyName;
UCHAR KeyCode;
USHORT Usage;
};
#define DEFINE_USAGE(_KeyCode, _Usage) \
- { _KeyCode, _Usage }
+ { #_KeyCode, _KeyCode, _Usage }
static struct _KEY_CODE_TO_USAGE KeyCodeToUsageTable[] = {
DEFINE_USAGE_TABLE
}
}
+static FORCEINLINE const CHAR *
+__KeyCodeToKeyName(
+ ULONG KeyCode
+ )
+{
+ ULONG Index;
+
+ for (Index = 0; Index < ARRAYSIZE(KeyCodeToUsageTable); Index++) {
+ struct _KEY_CODE_TO_USAGE *Entry = &KeyCodeToUsageTable[Index];
+
+ if (Entry->KeyCode == KeyCode)
+ return Entry->KeyName;
+ }
+
+ return "UNKNOWN";
+}
+
static FORCEINLINE USHORT
__RingKeyCodeToUsage(
IN PXENVKBD_RING Ring,
} else {
// map KeyCode to Usage
USHORT Usage = __RingKeyCodeToUsage(Ring, KeyCode);
+
+ Trace("%s (%02x) -> %04x (%s)\n",
+ __KeyCodeToKeyName(KeyCode), KeyCode,
+ Usage, Pressed ? "PRESSED" : "RELEASED");
+
if (Usage == 0)
return; // non-standard key
DEFINE_USAGE(KEY_RIGHTCTRL, 0xE4), \
DEFINE_USAGE(KEY_KPSLASH, 0x54), \
DEFINE_USAGE(KEY_SYSRQ, 0x48), \
+ DEFINE_USAGE(KEY_PAUSE, 0x48), \
DEFINE_USAGE(KEY_RIGHTALT, 0xE6), \
DEFINE_USAGE(KEY_HOME, 0x4A), \
DEFINE_USAGE(KEY_UP, 0x52), \
DEFINE_USAGE(KEY_DOWN, 0x51), \
DEFINE_USAGE(KEY_PAGEDOWN, 0x4E), \
DEFINE_USAGE(KEY_INSERT, 0x49), \
- DEFINE_USAGE(KEY_DELETE, 0x4D), \
+ DEFINE_USAGE(KEY_DELETE, 0x4C), \
DEFINE_USAGE(KEY_MUTE, 0x7F), \
DEFINE_USAGE(KEY_VOLUMEDOWN, 0x81), \
DEFINE_USAGE(KEY_VOLUMEUP, 0x80), \