[ros-diffs] [janderwald] 54856: [KBDHID] - Implement KbdHid_ReadCompletion routine - Start implementing KbdHid_InsertScanCodes routine
janderwald at svn.reactos.org
janderwald at svn.reactos.org
Fri Jan 6 20:37:14 UTC 2012
Author: janderwald
Date: Fri Jan 6 20:37:13 2012
New Revision: 54856
URL: http://svn.reactos.org/svn/reactos?rev=54856&view=rev
Log:
[KBDHID]
- Implement KbdHid_ReadCompletion routine
- Start implementing KbdHid_InsertScanCodes routine
Modified:
branches/usb-bringup/drivers/hid/kbdhid/kbdhid.c
branches/usb-bringup/drivers/hid/kbdhid/kbdhid.h
Modified: branches/usb-bringup/drivers/hid/kbdhid/kbdhid.c
URL: http://svn.reactos.org/svn/reactos/branches/usb-bringup/drivers/hid/kbdhid/kbdhid.c?rev=54856&r1=54855&r2=54856&view=diff
==============================================================================
--- branches/usb-bringup/drivers/hid/kbdhid/kbdhid.c [iso-8859-1] (original)
+++ branches/usb-bringup/drivers/hid/kbdhid/kbdhid.c [iso-8859-1] Fri Jan 6 20:37:13 2012
@@ -13,8 +13,7 @@
VOID
KbdHid_DispatchInputData(
IN PKBDHID_DEVICE_EXTENSION DeviceExtension,
- IN PKEYBOARD_INPUT_DATA InputData,
- IN ULONG InputDataLength)
+ IN PKEYBOARD_INPUT_DATA InputData)
{
KIRQL OldIrql;
ULONG InputDataConsumed;
@@ -30,11 +29,37 @@
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
/* dispatch input data */
- (*(PSERVICE_CALLBACK_ROUTINE)DeviceExtension->ClassService)(DeviceExtension->ClassDeviceObject, InputData, InputData + InputDataLength + 1, &InputDataConsumed);
+ (*(PSERVICE_CALLBACK_ROUTINE)DeviceExtension->ClassService)(DeviceExtension->ClassDeviceObject, InputData, InputData + 1, &InputDataConsumed);
/* lower irql to previous level */
KeLowerIrql(OldIrql);
}
+
+BOOLEAN
+NTAPI
+KbdHid_InsertScanCodes(
+ IN PVOID Context,
+ IN PCHAR NewScanCodes,
+ IN ULONG Length)
+{
+ KEYBOARD_INPUT_DATA InputData;
+ ULONG Index;
+
+ for(Index = 0; Index < Length; Index++)
+ {
+ DPRINT1("[KBDHID] ScanCode Index %lu ScanCode %x\n", Index, NewScanCodes[Index] & 0xFF);
+ //
+ // TODO: set up input data
+ //
+ //KbdHid_DispatchInputData((PKBDHID_DEVICE_EXTENSION)Context, &InputData);
+ }
+
+ //
+ // done
+ //
+ return TRUE;
+}
+
NTSTATUS
NTAPI
@@ -44,6 +69,8 @@
IN PVOID Context)
{
PKBDHID_DEVICE_EXTENSION DeviceExtension;
+ NTSTATUS Status;
+ ULONG ButtonLength;
/* get device extension */
DeviceExtension = (PKBDHID_DEVICE_EXTENSION)Context;
@@ -67,11 +94,27 @@
return STATUS_MORE_PROCESSING_REQUIRED;
}
- UNIMPLEMENTED
- ASSERT(FALSE);
-
- /* dispatch mouse action */
- //KbdHid_DispatchInputData(DeviceExtension, &InputData);
+ /* get current usages */
+ ButtonLength = DeviceExtension->UsageListLength;
+ Status = HidP_GetUsagesEx(HidP_Input, HIDP_LINK_COLLECTION_UNSPECIFIED, DeviceExtension->CurrentUsageList, &ButtonLength, DeviceExtension->PreparsedData, DeviceExtension->Report, DeviceExtension->ReportLength);
+ ASSERT(Status == HIDP_STATUS_SUCCESS);
+
+ /* FIXME check if needs mapping */
+
+ /* get usage difference */
+ Status = HidP_UsageAndPageListDifference(DeviceExtension->PreviousUsageList, DeviceExtension->CurrentUsageList, DeviceExtension->BreakUsageList, DeviceExtension->MakeUsageList, DeviceExtension->UsageListLength);
+ ASSERT(Status == HIDP_STATUS_SUCCESS);
+
+ /* replace previous usage list with current list */
+ RtlMoveMemory(DeviceExtension->PreviousUsageList, DeviceExtension->CurrentUsageList, sizeof(USAGE_AND_PAGE) * DeviceExtension->UsageListLength);
+
+ /* translate break usage list */
+ HidP_TranslateUsageAndPagesToI8042ScanCodes(DeviceExtension->BreakUsageList, DeviceExtension->UsageListLength, HidP_Keyboard_Break, &DeviceExtension->ModifierState, KbdHid_InsertScanCodes, DeviceExtension);
+ ASSERT(Status == HIDP_STATUS_SUCCESS);
+
+ /* translate new usage list */
+ HidP_TranslateUsageAndPagesToI8042ScanCodes(DeviceExtension->MakeUsageList, DeviceExtension->UsageListLength, HidP_Keyboard_Make, &DeviceExtension->ModifierState, KbdHid_InsertScanCodes, DeviceExtension);
+ ASSERT(Status == HIDP_STATUS_SUCCESS);
/* re-init read */
KbdHid_InitiateRead(DeviceExtension);
Modified: branches/usb-bringup/drivers/hid/kbdhid/kbdhid.h
URL: http://svn.reactos.org/svn/reactos/branches/usb-bringup/drivers/hid/kbdhid/kbdhid.h?rev=54856&r1=54855&r2=54856&view=diff
==============================================================================
--- branches/usb-bringup/drivers/hid/kbdhid/kbdhid.h [iso-8859-1] (original)
+++ branches/usb-bringup/drivers/hid/kbdhid/kbdhid.h [iso-8859-1] Fri Jan 6 20:37:13 2012
@@ -67,7 +67,7 @@
//
// preparsed data
//
- PVOID PreparsedData;
+ PHIDP_PREPARSED_DATA PreparsedData;
//
// mdl for reading input report
@@ -77,7 +77,7 @@
//
// input report buffer
//
- PUCHAR Report;
+ PCHAR Report;
//
// input report length
@@ -104,6 +104,11 @@
//
KEYBOARD_ATTRIBUTES Attributes;
+ //
+ // keyboard modifier state
+ //
+ HIDP_KEYBOARD_MODIFIER_STATE ModifierState;
+
}KBDHID_DEVICE_EXTENSION, *PKBDHID_DEVICE_EXTENSION;
/* defaults from kbfiltr.h */
More information about the Ros-diffs
mailing list