Author: janderwald
Date: Wed Dec 28 11:36:05 2011
New Revision: 54772

URL: http://svn.reactos.org/svn/reactos?rev=54772&view=rev
Log:
[USB-BRINGUP]
- Implement mouse move detection, wheel state detection

Modified:
    branches/usb-bringup/drivers/hid/mouhid/mouhid.c
    branches/usb-bringup/drivers/hid/mouhid/mouhid.h

Modified: branches/usb-bringup/drivers/hid/mouhid/mouhid.c
URL: 
http://svn.reactos.org/svn/reactos/branches/usb-bringup/drivers/hid/mouhid/mouhid.c?rev=54772&r1=54771&r2=54772&view=diff
==============================================================================
--- branches/usb-bringup/drivers/hid/mouhid/mouhid.c [iso-8859-1] (original)
+++ branches/usb-bringup/drivers/hid/mouhid/mouhid.c [iso-8859-1] Wed Dec 28 
11:36:05 2011
@@ -29,6 +29,35 @@
 };
 
 VOID
+MouHid_GetButtonMove(
+    IN PDEVICE_OBJECT DeviceObject,
+    OUT PLONG LastX,
+    OUT PLONG LastY)
+{
+    PMOUHID_DEVICE_EXTENSION DeviceExtension;
+    NTSTATUS Status;
+
+    /* get device extension */
+    DeviceExtension = (PMOUHID_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
+
+    /* init result */
+    *LastX = 0;
+    *LastY = 0;
+
+    /* get scaled usage value x */
+    Status =  HidP_GetScaledUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, 
HIDP_LINK_COLLECTION_UNSPECIFIED, HID_USAGE_GENERIC_X, (PLONG)&LastX, 
DeviceExtension->PreparsedData, DeviceExtension->Report, 
DeviceExtension->ReportLength);
+    /* FIXME handle error */
+    ASSERT(Status == HIDP_STATUS_SUCCESS);
+
+    /* get scaled usage value y */
+    Status =  HidP_GetScaledUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, 
HIDP_LINK_COLLECTION_UNSPECIFIED, HID_USAGE_GENERIC_Y, (PLONG)&LastY, 
DeviceExtension->PreparsedData, DeviceExtension->Report, 
DeviceExtension->ReportLength);
+    /* FIXME handle error */
+    ASSERT(Status == HIDP_STATUS_SUCCESS);
+
+}
+
+
+VOID
 MouHid_GetButtonFlags(
     IN PDEVICE_OBJECT DeviceObject,
     OUT PUSHORT ButtonFlags)
@@ -146,6 +175,9 @@
 {
     PMOUHID_DEVICE_EXTENSION DeviceExtension;
     USHORT ButtonFlags;
+    LONG UsageValue;
+    NTSTATUS Status;
+    LONG LastX, LastY;
     MOUSE_INPUT_DATA MouseInputData;
 
     /* get device extension */
@@ -154,14 +186,34 @@
     /* get mouse change flags */
     MouHid_GetButtonFlags(DeviceObject, &ButtonFlags);
 
-    /* FIXME detect mouse move change */
-    /* FIXME detect mouse wheel change */
+    /* get mouse change */
+    MouHid_GetButtonMove(DeviceObject, &LastX, &LastY);
 
     /* init input data */
     RtlZeroMemory(&MouseInputData, sizeof(MOUSE_INPUT_DATA));
 
     /* init input data */
     MouseInputData.ButtonFlags = ButtonFlags;
+    MouseInputData.LastX = LastX;
+    MouseInputData.LastY = LastY;
+
+    /* detect mouse wheel change */
+    if (DeviceExtension->MouseIdentifier == WHEELMOUSE_HID_HARDWARE)
+    {
+        /* get usage */
+        UsageValue = 0;
+        Status = HidP_GetScaledUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, 
HIDP_LINK_COLLECTION_UNSPECIFIED, HID_USAGE_GENERIC_WHEEL, &UsageValue, 
DeviceExtension->PreparsedData, DeviceExtension->Report, 
DeviceExtension->ReportLength);
+        if (Status == HIDP_STATUS_SUCCESS)
+        {
+            /* store wheel status */
+            MouseInputData.ButtonFlags |= MOUSE_WHEEL;
+            MouseInputData.ButtonData = (USHORT)UsageValue; /* FIXME */
+        }
+        else
+        {
+            DPRINT1("[MOUHID] failed to get wheel status with %x\n", Status);
+        }
+    }
 
     /* dispatch mouse action */
     MouHid_DispatchInputData(DeviceObject, &MouseInputData);

Modified: branches/usb-bringup/drivers/hid/mouhid/mouhid.h
URL: 
http://svn.reactos.org/svn/reactos/branches/usb-bringup/drivers/hid/mouhid/mouhid.h?rev=54772&r1=54771&r2=54772&view=diff
==============================================================================
--- branches/usb-bringup/drivers/hid/mouhid/mouhid.h [iso-8859-1] (original)
+++ branches/usb-bringup/drivers/hid/mouhid/mouhid.h [iso-8859-1] Wed Dec 28 
11:36:05 2011
@@ -12,26 +12,89 @@
 
 typedef struct
 {
+    //
+    // lower device object
+    //
     PDEVICE_OBJECT NextDeviceObject;
+
+    //
+    // irp which is used for reading input reports
+    //
     PIRP Irp;
+
+    //
+    // event 
+    //
     KEVENT Event;
+
+    //
+    // device object for class callback
+    //
     PDEVICE_OBJECT ClassDeviceObject;
+
+    //
+    // class callback
+    //
     PVOID ClassService;
+
+    //
+    // mouse type
+    //
     USHORT MouseIdentifier;
+
+    //
+    // wheel usage page
+    //
     USHORT WheelUsagePage;
 
+    //
+    // usage list length
+    //
     USHORT UsageListLength;
+
+    //
+    // current usage list length
+    //
     PUSAGE CurrentUsageList;
+
+    //
+    // previous usage list
+    //
     PUSAGE PreviousUsageList;
+
+    //
+    // removed usage item list
+    //
     PUSAGE BreakUsageList;
+
+    //
+    // new item usage list
+    //
     PUSAGE MakeUsageList;
+
+    //
+    // preparsed data
+    //
     PVOID PreparsedData;
 
+    //
+    // mdl for reading input report
+    //
     PMDL ReportMDL;
+
+    //
+    // input report buffer
+    //
     PUCHAR Report;
+
+    //
+    // input report length
+    //
     ULONG ReportLength;
 
-
+    //
+    // file object the device is reading reports from
+    //
     PFILE_OBJECT FileObject;
 
 }MOUHID_DEVICE_EXTENSION, *PMOUHID_DEVICE_EXTENSION;


Reply via email to