- 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
VOID
MouHid_GetButtonFlags(
IN PMOUHID_DEVICE_EXTENSION DeviceExtension,
VOID
MouHid_GetButtonFlags(
IN PMOUHID_DEVICE_EXTENSION DeviceExtension,
- OUT PUSHORT ButtonFlags)
+ OUT PUSHORT ButtonFlags,
+ OUT PUSHORT Flags)
{
NTSTATUS Status;
USAGE Usage;
{
NTSTATUS Status;
USAGE Usage;
/* init flags */
*ButtonFlags = 0;
/* init flags */
*ButtonFlags = 0;
/* get usages */
CurrentUsageListLength = DeviceExtension->UsageListLength;
/* get usages */
CurrentUsageListLength = DeviceExtension->UsageListLength;
if (DeviceExtension->MouseAbsolute)
{
// mouse operates absolute
if (DeviceExtension->MouseAbsolute)
{
// mouse operates absolute
- *ButtonFlags |= MOUSE_MOVE_ABSOLUTE;
+ *Flags |= MOUSE_MOVE_ABSOLUTE;
NTSTATUS Status;
LONG LastX, LastY;
MOUSE_INPUT_DATA MouseInputData;
NTSTATUS Status;
LONG LastX, LastY;
MOUSE_INPUT_DATA MouseInputData;
/* get device extension */
DeviceExtension = (PMOUHID_DEVICE_EXTENSION)Context;
/* get device extension */
DeviceExtension = (PMOUHID_DEVICE_EXTENSION)Context;
MouHid_GetButtonMove(DeviceExtension, &LastX, &LastY);
/* get mouse change flags */
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;
/* init input data */
RtlZeroMemory(&MouseInputData, sizeof(MOUSE_INPUT_DATA));
/* init input data */
MouseInputData.ButtonFlags = ButtonFlags;
+ MouseInputData.Flags = Flags;
MouseInputData.LastX = LastX;
MouseInputData.LastY = LastY;
MouseInputData.LastX = LastX;
MouseInputData.LastY = LastY;
ASSERT(ReportItem->ByteOffset < ReportDescriptorLength);
//
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;