From b0caef1b6bd4a6332ec807e636f9443ec288903c Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Wed, 24 Oct 2012 09:37:08 +0000 Subject: [PATCH 1/1] [MOUHID] - Report absolute mouse in Flags MOUSE_INPUT_DATA member [HIDPARSER] - Fix data conversion when extracting unscaled data from reports - Fixes VBOX absolute pointing device - Tested with VBOX 4.1.22 - #Core-6553 #resolve svn path=/trunk/; revision=57603 --- reactos/drivers/hid/mouhid/mouhid.c | 10 +++++++--- reactos/lib/drivers/hidparser/api.c | 7 +++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/reactos/drivers/hid/mouhid/mouhid.c b/reactos/drivers/hid/mouhid/mouhid.c index 6ba3007048f..3163b876160 100644 --- a/reactos/drivers/hid/mouhid/mouhid.c +++ b/reactos/drivers/hid/mouhid/mouhid.c @@ -92,7 +92,8 @@ MouHid_GetButtonMove( VOID MouHid_GetButtonFlags( IN PMOUHID_DEVICE_EXTENSION DeviceExtension, - OUT PUSHORT ButtonFlags) + OUT PUSHORT ButtonFlags, + OUT PUSHORT Flags) { NTSTATUS Status; USAGE Usage; @@ -102,6 +103,7 @@ MouHid_GetButtonFlags( /* init flags */ *ButtonFlags = 0; + *Flags = 0; /* get usages */ CurrentUsageListLength = DeviceExtension->UsageListLength; @@ -170,7 +172,7 @@ MouHid_GetButtonFlags( if (DeviceExtension->MouseAbsolute) { // mouse operates absolute - *ButtonFlags |= MOUSE_MOVE_ABSOLUTE; + *Flags |= MOUSE_MOVE_ABSOLUTE; } } @@ -212,6 +214,7 @@ MouHid_ReadCompletion( NTSTATUS Status; LONG LastX, LastY; MOUSE_INPUT_DATA MouseInputData; + USHORT Flags; /* get device extension */ DeviceExtension = (PMOUHID_DEVICE_EXTENSION)Context; @@ -239,13 +242,14 @@ MouHid_ReadCompletion( MouHid_GetButtonMove(DeviceExtension, &LastX, &LastY); /* get mouse change flags */ - MouHid_GetButtonFlags(DeviceExtension, &ButtonFlags); + MouHid_GetButtonFlags(DeviceExtension, &ButtonFlags, &Flags); /* init input data */ RtlZeroMemory(&MouseInputData, sizeof(MOUSE_INPUT_DATA)); /* init input data */ MouseInputData.ButtonFlags = ButtonFlags; + MouseInputData.Flags = Flags; MouseInputData.LastX = LastX; MouseInputData.LastY = LastY; diff --git a/reactos/lib/drivers/hidparser/api.c b/reactos/lib/drivers/hidparser/api.c index ee77899ae21..c02ee043873 100644 --- a/reactos/lib/drivers/hidparser/api.c +++ b/reactos/lib/drivers/hidparser/api.c @@ -630,11 +630,10 @@ HidParser_GetUsageValueWithReport( ASSERT(ReportItem->ByteOffset < ReportDescriptorLength); // - // one extra shift for skipping the prepended report id + // FIXME: support items with variable bitlength // - Data = 0; - Parser->Copy(&Data, &ReportDescriptor[ReportItem->ByteOffset +1], min(sizeof(ULONG), ReportDescriptorLength - (ReportItem->ByteOffset + 1))); - //Data = ReportDescriptor[ReportItem->ByteOffset + 1]; + ASSERT(ReportItem->BitCount == 16); + Data = (ReportDescriptor[ReportItem->ByteOffset +1] & 0xFF) | (ReportDescriptor[ReportItem->ByteOffset +2] & 0xFF) << 8; // // shift data -- 2.17.1