[HIDPARSER]

- Fix scan-codes for PrintScreen and PauseBreak

svn path=/trunk/; revision=56046
This commit is contained in:
Rafal Harabien
2012-03-05 19:07:01 +00:00
parent c3d23e2e30
commit 76f7011ac8
+22 -2
View File
@@ -17,7 +17,7 @@ static ULONG KeyboardScanCodes[256] =
/* 1 */ 0x0032, 0x0031, 0x0018, 0x0019, 0x0010, 0x0013, 0x001f, 0x0014, 0x0016, 0x002f, 0x0011, 0x002d, 0x0015, 0x002c, 0x0002, 0x0003,
/* 2 */ 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x001c, 0x0001, 0x000e, 0x000f, 0x0039, 0x000c, 0x000d, 0x001a,
/* 3 */ 0x001b, 0x002b, 0x002b, 0x0027, 0x0028, 0x0029, 0x0033, 0x0034, 0x0035, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 0x0040,
/* 4 */ 0x0041, 0x0042, 0x0043, 0x0044, 0x0057, 0x0058, 0x0063, 0x0046, 0x0077, 0xE052, 0xE047, 0xE049, 0xE053, 0xE04F, 0xE051, 0xE04D,
/* 4 */ 0x0041, 0x0042, 0x0043, 0x0044, 0x0057, 0x0058, 0xE037, 0x0046, 0x0045, 0xE052, 0xE047, 0xE049, 0xE053, 0xE04F, 0xE051, 0xE04D,
/* 5 */ 0xE04B, 0xE050, 0xE048, 0x0045, 0xE035, 0x0037, 0x004a, 0x004e, 0xE01C, 0x004f, 0x0050, 0x0051, 0x004b, 0x004c, 0x004d, 0x0047,
/* 6 */ 0x0048, 0x0049, 0x0052, 0x0053, 0x0056, 0xE05D, 0xE05E, 0x0075, 0x00b7, 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be,
/* 7 */ 0x00bf, 0x00c0, 0x00c1, 0x00c2, 0x0086, 0x008a, 0x0082, 0x0084, 0x0080, 0x0081, 0x0083, 0x0089, 0x0085, 0x0087, 0x0088, 0x0071,
@@ -723,6 +723,8 @@ HidParser_TranslateUsage(
IN PVOID InsertCodesContext)
{
ULONG ScanCode;
CHAR FakeShift[] = {0xE0, 0x2A, 0x00};
CHAR FakeCtrl[] = {0xE1, 0x1D, 0x00};
//
// get scan code
@@ -737,7 +739,7 @@ HidParser_TranslateUsage(
return HIDPARSER_STATUS_I8042_TRANS_UNKNOWN;
}
if ((ScanCode & 0xE000) == 0xE000)
if (ScanCode & 0xFF00)
{
//
// swap scan code
@@ -745,11 +747,29 @@ HidParser_TranslateUsage(
ScanCode = NTOHS(ScanCode);
}
if (Usage == 0x46 && KeyAction == HidP_Keyboard_Make)
{
// Print Screen generates additional FakeShift
HidParser_DispatchKey(FakeShift, KeyAction, InsertCodesProcedure, InsertCodesContext);
}
if (Usage == 0x48)
{
// Pause/Break generates additional FakeCtrl. Note: it's always before key press/release.
HidParser_DispatchKey(FakeCtrl, KeyAction, InsertCodesProcedure, InsertCodesContext);
}
//
// FIXME: translate modifier states
//
HidParser_DispatchKey((PCHAR)&ScanCode, KeyAction, InsertCodesProcedure, InsertCodesContext);
if (Usage == 0x46 && KeyAction == HidP_Keyboard_Break)
{
// Print Screen generates additional FakeShift
HidParser_DispatchKey(FakeShift, KeyAction, InsertCodesProcedure, InsertCodesContext);
}
//
// done
//