Zebediah Figura : hid: Scale from logical to physical coördinates in HidP_GetScaledU =?UTF-8?Q?sageValue?=().

Alexandre Julliard julliard at winehq.org
Fri Feb 15 14:37:02 CST 2019


Module: wine
Branch: master
Commit: 6ca21b56b43e1f843c4997eed4775096f0d92a57
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=6ca21b56b43e1f843c4997eed4775096f0d92a57

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Tue Feb 12 00:06:04 2019 -0600

hid: Scale from logical to physical coördinates in HidP_GetScaledUsageValue().

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Aric Stewart <aric at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/hid/hidp.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/dlls/hid/hidp.c b/dlls/hid/hidp.c
index ac5f222..7c58426 100644
--- a/dlls/hid/hidp.c
+++ b/dlls/hid/hidp.c
@@ -272,6 +272,18 @@ static LONG sign_extend(ULONG value, const WINE_HID_ELEMENT *element)
     return value;
 }
 
+static LONG logical_to_physical(LONG value, const WINE_HID_ELEMENT *element)
+{
+    if (element->caps.value.PhysicalMin || element->caps.value.PhysicalMax)
+    {
+        value = (((ULONGLONG)(value - element->caps.value.LogicalMin)
+                * (element->caps.value.PhysicalMax - element->caps.value.PhysicalMin))
+                / (element->caps.value.LogicalMax - element->caps.value.LogicalMin))
+                + element->caps.value.PhysicalMin;
+    }
+    return value;
+}
+
 NTSTATUS WINAPI HidP_GetScaledUsageValue(HIDP_REPORT_TYPE ReportType, USAGE UsagePage,
                                          USHORT LinkCollection, USAGE Usage, PLONG UsageValue,
                                          PHIDP_PREPARSED_DATA PreparsedData, PCHAR Report, ULONG ReportLength)
@@ -290,7 +302,7 @@ NTSTATUS WINAPI HidP_GetScaledUsageValue(HIDP_REPORT_TYPE ReportType, USAGE Usag
                              element->valueStartBit, element->bitCount, &rawValue);
         if (rc != HIDP_STATUS_SUCCESS)
             return rc;
-        *UsageValue = sign_extend(rawValue, element);
+        *UsageValue = logical_to_physical(sign_extend(rawValue, element), element);
     }
 
     return rc;




More information about the wine-cvs mailing list