Piotr Caban : hid: Set button values in HidP_SetUsages function.

Alexandre Julliard julliard at winehq.org
Mon May 13 16:24:17 CDT 2019


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Mon May 13 12:34:19 2019 +0200

hid: Set button values in HidP_SetUsages function.

Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Aric Stewart <aric at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/hid/hidp.c     | 20 ++++++++++----------
 include/ddk/hidpi.h |  3 +++
 2 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/dlls/hid/hidp.c b/dlls/hid/hidp.c
index 0add2cb..0416426 100644
--- a/dlls/hid/hidp.c
+++ b/dlls/hid/hidp.c
@@ -190,9 +190,9 @@ NTSTATUS WINAPI HidP_GetCaps(PHIDP_PREPARSED_DATA PreparsedData,
     return HIDP_STATUS_SUCCESS;
 }
 
-static NTSTATUS find_value(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, USHORT LinkCollection,
+static NTSTATUS find_usage(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, USHORT LinkCollection,
                            USAGE Usage, PHIDP_PREPARSED_DATA PreparsedData, PCHAR Report,
-                           WINE_HID_ELEMENT *element)
+                           WINE_ELEMENT_TYPE ElementType, WINE_HID_ELEMENT *element)
 {
     PWINE_HIDP_PREPARSED_DATA data = (PWINE_HIDP_PREPARSED_DATA)PreparsedData;
     WINE_HID_ELEMENT *elems = HID_ELEMS(data);
@@ -232,7 +232,7 @@ static NTSTATUS find_value(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, USHORT
     {
         HIDP_VALUE_CAPS *value = &elems[report->elementIdx + i].caps.value;
 
-        if (elems[report->elementIdx + i].ElementType != ValueElement ||
+        if (elems[report->elementIdx + i].ElementType != ElementType ||
             value->UsagePage != UsagePage)
             continue;
 
@@ -240,13 +240,13 @@ static NTSTATUS find_value(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, USHORT
         {
             *element = elems[report->elementIdx + i];
             element->valueStartBit += value->BitSize * (Usage - value->u.Range.UsageMin);
-            element->bitCount = value->BitSize;
+            element->bitCount = elems[report->elementIdx + i].ElementType == ValueElement ? value->BitSize: 1;
             return HIDP_STATUS_SUCCESS;
         }
         else if (value->u.NotRange.Usage == Usage)
         {
             *element = elems[report->elementIdx + i];
-            element->bitCount = value->BitSize;
+            element->bitCount = elems[report->elementIdx + i].ElementType == ValueElement ? value->BitSize : 1;
             return HIDP_STATUS_SUCCESS;
         }
     }
@@ -288,7 +288,7 @@ NTSTATUS WINAPI HidP_GetScaledUsageValue(HIDP_REPORT_TYPE ReportType, USAGE Usag
     TRACE("(%i, %x, %i, %i, %p, %p, %p, %i)\n", ReportType, UsagePage, LinkCollection, Usage, UsageValue,
           PreparsedData, Report, ReportLength);
 
-    rc = find_value(ReportType, UsagePage, LinkCollection, Usage, PreparsedData, Report, &element);
+    rc = find_usage(ReportType, UsagePage, LinkCollection, Usage, PreparsedData, Report, ValueElement, &element);
 
     if (rc == HIDP_STATUS_SUCCESS)
     {
@@ -314,7 +314,7 @@ NTSTATUS WINAPI HidP_GetUsageValue(HIDP_REPORT_TYPE ReportType, USAGE UsagePage,
     TRACE("(%i, %x, %i, %i, %p, %p, %p, %i)\n", ReportType, UsagePage, LinkCollection, Usage, UsageValue,
           PreparsedData, Report, ReportLength);
 
-    rc = find_value(ReportType, UsagePage, LinkCollection, Usage, PreparsedData, Report, &element);
+    rc = find_usage(ReportType, UsagePage, LinkCollection, Usage, PreparsedData, Report, ValueElement, &element);
 
     if (rc == HIDP_STATUS_SUCCESS)
     {
@@ -568,7 +568,7 @@ NTSTATUS WINAPI HidP_SetUsageValue(HIDP_REPORT_TYPE ReportType, USAGE UsagePage,
     TRACE("(%i, %x, %i, %i, %i, %p, %p, %i)\n", ReportType, UsagePage, LinkCollection, Usage, UsageValue,
           PreparsedData, Report, ReportLength);
 
-    rc = find_value(ReportType, UsagePage, LinkCollection, Usage, PreparsedData, Report, &element);
+    rc = find_usage(ReportType, UsagePage, LinkCollection, Usage, PreparsedData, Report, ValueElement, &element);
 
     if (rc == HIDP_STATUS_SUCCESS)
     {
@@ -593,8 +593,8 @@ NTSTATUS WINAPI HidP_SetUsages(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, USH
 
     for (i = 0; i < *UsageLength; i++)
     {
-        rc = find_value(ReportType, UsagePage, LinkCollection,
-                UsageList[i], PreparsedData, Report, &element);
+        rc = find_usage(ReportType, UsagePage, LinkCollection,
+                UsageList[i], PreparsedData, Report, ButtonElement, &element);
         if (rc == HIDP_STATUS_SUCCESS)
         {
             rc = set_report_data((BYTE*)Report, ReportLength,
diff --git a/include/ddk/hidpi.h b/include/ddk/hidpi.h
index 1df789f..042c84d 100644
--- a/include/ddk/hidpi.h
+++ b/include/ddk/hidpi.h
@@ -187,6 +187,9 @@ NTSTATUS WINAPI HidP_InitializeReportForID(HIDP_REPORT_TYPE ReportType, UCHAR Re
 ULONG WINAPI HidP_MaxUsageListLength(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, PHIDP_PREPARSED_DATA PreparsedData);
 NTSTATUS WINAPI HidP_GetScaledUsageValue(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, USHORT LinkCollection, USAGE Usage, PLONG UsageValue, PHIDP_PREPARSED_DATA PreparsedData, PCHAR Report, ULONG ReportLength);
 NTSTATUS WINAPI HidP_SetUsageValue(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, USHORT LinkCollection, USAGE Usage, ULONG UsageValue, PHIDP_PREPARSED_DATA PreparsedData, CHAR *Report, ULONG ReportLength);
+NTSTATUS WINAPI HidP_SetUsages(HIDP_REPORT_TYPE ReportType, USAGE UsagePage,
+        USHORT LinkCollection, PUSAGE UsageList, PULONG UsageLength,
+        PHIDP_PREPARSED_DATA PreparsedData, PCHAR Report, ULONG ReportLength);
 NTSTATUS WINAPI HidP_TranslateUsagesToI8042ScanCodes(USAGE *ChangedUsageList, ULONG UsageListLength, HIDP_KEYBOARD_DIRECTION KeyAction, HIDP_KEYBOARD_MODIFIER_STATE *ModifierState, PHIDP_INSERT_SCANCODES InsertCodesProcedure, VOID *InsertCodesContext);
 NTSTATUS WINAPI HidP_GetSpecificButtonCaps(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, USHORT LinkCollection, USAGE Usage, HIDP_BUTTON_CAPS *ButtonCaps, USHORT *ButtonCapsLength, PHIDP_PREPARSED_DATA PreparsedData);
 NTSTATUS WINAPI HidP_GetSpecificValueCaps(HIDP_REPORT_TYPE ReportType, USAGE UsagePage, USHORT LinkCollection, USAGE Usage, HIDP_VALUE_CAPS *ValueCaps, USHORT *ValueCapsLength, PHIDP_PREPARSED_DATA PreparsedData);




More information about the wine-cvs mailing list