VOID
MouHid_GetButtonFlags(
IN PMOUHID_DEVICE_EXTENSION DeviceExtension,
- OUT PUSHORT ButtonFlags)
+ OUT PUSHORT ButtonFlags,
+ OUT PUSHORT Flags)
{
NTSTATUS Status;
USAGE Usage;
/* init flags */
*ButtonFlags = 0;
+ *Flags = 0;
/* get usages */
CurrentUsageListLength = DeviceExtension->UsageListLength;
if (DeviceExtension->MouseAbsolute)
{
// mouse operates absolute
- *ButtonFlags |= MOUSE_MOVE_ABSOLUTE;
+ *Flags |= MOUSE_MOVE_ABSOLUTE;
}
}
NTSTATUS Status;
LONG LastX, LastY;
MOUSE_INPUT_DATA MouseInputData;
+ USHORT Flags;
/* get device extension */
DeviceExtension = (PMOUHID_DEVICE_EXTENSION)Context;
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;
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