mirror of
https://github.com/reactos/reactos.git
synced 2025-07-24 22:13:53 +00:00
[HIDPARSER]
- Implement translating customer page to scan-codes svn path=/trunk/; revision=56053
This commit is contained in:
parent
0c5896f63f
commit
ea7b00c53e
3 changed files with 113 additions and 10 deletions
|
@ -31,6 +31,32 @@ static ULONG KeyboardScanCodes[256] =
|
|||
/* F */ 0x0096, 0x009e, 0x009f, 0x0080, 0x0088, 0x00b1, 0x00b2, 0x00b0, 0x008e, 0x0098, 0x00ad, 0x008c, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
};
|
||||
|
||||
static struct
|
||||
{
|
||||
USAGE Usage;
|
||||
ULONG ScanCode;
|
||||
} CustomerScanCodes[] =
|
||||
{
|
||||
{ 0x00B5, 0xE019 },
|
||||
{ 0x00B6, 0xE010 },
|
||||
{ 0x00B7, 0xE024 },
|
||||
{ 0x00CD, 0xE022 },
|
||||
{ 0x00E2, 0xE020 },
|
||||
{ 0x00E9, 0xE030 },
|
||||
{ 0x00EA, 0xE02E },
|
||||
{ 0x0183, 0xE06D },
|
||||
{ 0x018A, 0xE06C },
|
||||
{ 0x0192, 0xE021 },
|
||||
{ 0x0194, 0xE06B },
|
||||
{ 0x0221, 0xE065 },
|
||||
{ 0x0223, 0xE032 },
|
||||
{ 0x0224, 0xE06A },
|
||||
{ 0x0225, 0xE069 },
|
||||
{ 0x0226, 0xE068 },
|
||||
{ 0x0227, 0xE067 },
|
||||
{ 0x022A, 0xE066 },
|
||||
};
|
||||
|
||||
#define NTOHS(n) (((((unsigned short)(n) & 0xFF)) << 8) | (((unsigned short)(n) & 0xFF00) >> 8))
|
||||
|
||||
HIDPARSER_STATUS
|
||||
|
@ -646,7 +672,7 @@ HidParser_GetScaledUsageValueWithReport(
|
|||
}
|
||||
|
||||
ULONG
|
||||
HidParser_GetScanCode(
|
||||
HidParser_GetScanCodeFromKbdUsage(
|
||||
IN USAGE Usage)
|
||||
{
|
||||
if (Usage < sizeof(KeyboardScanCodes) / sizeof(KeyboardScanCodes[0]))
|
||||
|
@ -663,6 +689,33 @@ HidParser_GetScanCode(
|
|||
return 0;
|
||||
}
|
||||
|
||||
ULONG
|
||||
HidParser_GetScanCodeFromCustUsage(
|
||||
IN USAGE Usage)
|
||||
{
|
||||
ULONG i;
|
||||
|
||||
//
|
||||
// find usage in array
|
||||
//
|
||||
for (i = 0; i < sizeof(CustomerScanCodes) / sizeof(CustomerScanCodes[0]); ++i)
|
||||
{
|
||||
if (CustomerScanCodes[i].Usage == Usage)
|
||||
{
|
||||
//
|
||||
// valid usage
|
||||
//
|
||||
return CustomerScanCodes[i].ScanCode;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
// invalid usage
|
||||
//
|
||||
return 0;
|
||||
}
|
||||
|
||||
VOID
|
||||
HidParser_DispatchKey(
|
||||
IN PCHAR ScanCodes,
|
||||
|
@ -712,9 +765,8 @@ HidParser_DispatchKey(
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
HIDPARSER_STATUS
|
||||
HidParser_TranslateUsage(
|
||||
HidParser_TranslateKbdUsage(
|
||||
IN PHID_PARSER Parser,
|
||||
IN USAGE Usage,
|
||||
IN HIDP_KEYBOARD_DIRECTION KeyAction,
|
||||
|
@ -729,7 +781,7 @@ HidParser_TranslateUsage(
|
|||
//
|
||||
// get scan code
|
||||
//
|
||||
ScanCode = HidParser_GetScanCode(Usage);
|
||||
ScanCode = HidParser_GetScanCodeFromKbdUsage(Usage);
|
||||
if (!ScanCode)
|
||||
{
|
||||
//
|
||||
|
@ -775,3 +827,46 @@ HidParser_TranslateUsage(
|
|||
//
|
||||
return HIDPARSER_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
HIDPARSER_STATUS
|
||||
HidParser_TranslateCustUsage(
|
||||
IN PHID_PARSER Parser,
|
||||
IN USAGE Usage,
|
||||
IN HIDP_KEYBOARD_DIRECTION KeyAction,
|
||||
IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState,
|
||||
IN PHIDP_INSERT_SCANCODES InsertCodesProcedure,
|
||||
IN PVOID InsertCodesContext)
|
||||
{
|
||||
ULONG ScanCode;
|
||||
|
||||
//
|
||||
// get scan code
|
||||
//
|
||||
ScanCode = HidParser_GetScanCodeFromCustUsage(Usage);
|
||||
if (!ScanCode)
|
||||
{
|
||||
//
|
||||
// invalid lookup or no scan code available
|
||||
//
|
||||
DPRINT1("No Scan code for Usage %x\n", Usage);
|
||||
return HIDPARSER_STATUS_I8042_TRANS_UNKNOWN;
|
||||
}
|
||||
|
||||
if (ScanCode & 0xFF00)
|
||||
{
|
||||
//
|
||||
// swap scan code
|
||||
//
|
||||
ScanCode = NTOHS(ScanCode);
|
||||
}
|
||||
|
||||
//
|
||||
// FIXME: translate modifier states
|
||||
//
|
||||
HidParser_DispatchKey((PCHAR)&ScanCode, KeyAction, InsertCodesProcedure, InsertCodesContext);
|
||||
|
||||
//
|
||||
// done
|
||||
//
|
||||
return HIDPARSER_STATUS_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -681,17 +681,16 @@ HidParser_TranslateUsageAndPagesToI8042ScanCodes(
|
|||
if (ChangedUsageList[Index].UsagePage == HID_USAGE_PAGE_KEYBOARD)
|
||||
{
|
||||
//
|
||||
// process usage
|
||||
// process keyboard usage
|
||||
//
|
||||
Status = HidParser_TranslateUsage(Parser, ChangedUsageList[Index].Usage, KeyAction, ModifierState, InsertCodesProcedure, InsertCodesContext);
|
||||
Status = HidParser_TranslateKbdUsage(Parser, ChangedUsageList[Index].Usage, KeyAction, ModifierState, InsertCodesProcedure, InsertCodesContext);
|
||||
}
|
||||
else if (ChangedUsageList[Index].UsagePage == HID_USAGE_PAGE_CONSUMER)
|
||||
{
|
||||
//
|
||||
// FIXME: implement me
|
||||
// process consumer usage
|
||||
//
|
||||
UNIMPLEMENTED
|
||||
Status = HIDPARSER_STATUS_NOT_IMPLEMENTED;
|
||||
Status = HidParser_TranslateCustUsage(Parser, ChangedUsageList[Index].Usage, KeyAction, ModifierState, InsertCodesProcedure, InsertCodesContext);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -430,7 +430,16 @@ HidParser_InitializeReportForID(
|
|||
IN ULONG ReportLength);
|
||||
|
||||
HIDPARSER_STATUS
|
||||
HidParser_TranslateUsage(
|
||||
HidParser_TranslateKbdUsage(
|
||||
IN PHID_PARSER Parser,
|
||||
IN USAGE Usage,
|
||||
IN HIDP_KEYBOARD_DIRECTION KeyAction,
|
||||
IN OUT PHIDP_KEYBOARD_MODIFIER_STATE ModifierState,
|
||||
IN PHIDP_INSERT_SCANCODES InsertCodesProcedure,
|
||||
IN PVOID InsertCodesContext);
|
||||
|
||||
HIDPARSER_STATUS
|
||||
HidParser_TranslateCustUsage(
|
||||
IN PHID_PARSER Parser,
|
||||
IN USAGE Usage,
|
||||
IN HIDP_KEYBOARD_DIRECTION KeyAction,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue