Aric Stewart : hid: Implement HidD_GetPreparsedData and HidD_FreePreparsedData.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Jul 1 09:06:24 CDT 2015


Module: wine
Branch: master
Commit: 5b790bde5e2045aaa6678da6ca5903fec46ddc6e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5b790bde5e2045aaa6678da6ca5903fec46ddc6e

Author: Aric Stewart <aric at codeweavers.com>
Date:   Tue Jun 30 07:40:13 2015 -0500

hid: Implement HidD_GetPreparsedData and HidD_FreePreparsedData.

---

 dlls/hid/hid.spec      |  4 ++--
 dlls/hid/hidd.c        | 32 ++++++++++++++++++++++++++++++++
 include/ddk/hidclass.h |  9 +++++++++
 include/ddk/hidsdi.h   |  2 ++
 4 files changed, 45 insertions(+), 2 deletions(-)

diff --git a/dlls/hid/hid.spec b/dlls/hid/hid.spec
index 5659a88..c72b0b8 100644
--- a/dlls/hid/hid.spec
+++ b/dlls/hid/hid.spec
@@ -1,5 +1,5 @@
 @ stub HidD_FlushQueue
-@ stub HidD_FreePreparsedData
+@ stdcall HidD_FreePreparsedData(ptr)
 @ stub HidD_GetAttributes
 @ stub HidD_GetConfiguration
 @ stdcall HidD_GetFeature(long ptr long)
@@ -10,7 +10,7 @@
 @ stub HidD_GetMsGenreDescriptor
 @ stub HidD_GetNumInputBuffers
 @ stub HidD_GetPhysicalDescriptor
-@ stub HidD_GetPreparsedData
+@ stdcall HidD_GetPreparsedData(ptr ptr)
 @ stdcall HidD_GetProductString(long ptr long)
 @ stub HidD_GetSerialNumberString
 @ stub HidD_Hello
diff --git a/dlls/hid/hidd.c b/dlls/hid/hidd.c
index 144e804..4c1c1fd 100644
--- a/dlls/hid/hidd.c
+++ b/dlls/hid/hidd.c
@@ -32,10 +32,19 @@
 #include "winioctl.h"
 #include "ddk/wdm.h"
 
+#include "hidusage.h"
 #include "ddk/hidclass.h"
+#include "ddk/hidpi.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(hid);
 
+BOOLEAN WINAPI HidD_FreePreparsedData(PHIDP_PREPARSED_DATA PreparsedData)
+{
+    TRACE("(%p)\n", PreparsedData);
+    HeapFree(GetProcessHeap(), 0, PreparsedData);
+    return TRUE;
+}
+
 BOOLEAN WINAPI HidD_GetFeature(HANDLE HidDeviceObject, PVOID ReportBuffer, ULONG ReportBufferLength)
 {
     TRACE("(%p %p %u)\n", HidDeviceObject, ReportBuffer, ReportBufferLength);
@@ -65,3 +74,26 @@ BOOLEAN WINAPI HidD_GetProductString(HANDLE HidDeviceObject, PVOID Buffer, ULONG
     TRACE("(%p %p %u)\n", HidDeviceObject, Buffer, BufferLength);
     return DeviceIoControl(HidDeviceObject, IOCTL_HID_GET_PRODUCT_STRING, NULL, 0, Buffer, BufferLength, NULL, NULL);
 }
+
+BOOLEAN WINAPI HidD_GetPreparsedData(HANDLE HidDeviceObject, PHIDP_PREPARSED_DATA *PreparsedData)
+{
+    HID_COLLECTION_INFORMATION info;
+    PHIDP_PREPARSED_DATA data;
+
+    TRACE("(%p %p)\n", HidDeviceObject, PreparsedData);
+
+    if (!DeviceIoControl(HidDeviceObject, IOCTL_HID_GET_COLLECTION_INFORMATION, NULL, 0,
+                         &info, sizeof(HID_COLLECTION_INFORMATION), NULL, NULL))
+        return FALSE;
+
+    if (!(data = HeapAlloc(GetProcessHeap(), 0, info.DescriptorSize))) return FALSE;
+
+    if (!DeviceIoControl(HidDeviceObject, IOCTL_HID_GET_COLLECTION_DESCRIPTOR, NULL, 0,
+                         data, info.DescriptorSize, NULL, NULL))
+    {
+        HeapFree( GetProcessHeap(), 0, data );
+        return FALSE;
+    }
+    *PreparsedData = data;
+    return TRUE;
+}
diff --git a/include/ddk/hidclass.h b/include/ddk/hidclass.h
index 81f892d..09dc467 100644
--- a/include/ddk/hidclass.h
+++ b/include/ddk/hidclass.h
@@ -56,6 +56,15 @@ DEFINE_GUID (GUID_DEVINTERFACE_HID, \
 #define IOCTL_HID_SET_DRIVER_CONFIG           HID_BUFFER_CTL_CODE(101)
 #define IOCTL_HID_GET_MS_GENRE_DESCRIPTOR     HID_OUT_CTL_CODE(121)
 
+typedef struct _HID_COLLECTION_INFORMATION {
+    ULONG   DescriptorSize;
+    BOOLEAN Polled;
+    UCHAR   Reserved1[1];
+    USHORT  VendorID;
+    USHORT  ProductID;
+    USHORT  VersionNumber;
+} HID_COLLECTION_INFORMATION, *PHID_COLLECTION_INFORMATION;
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/include/ddk/hidsdi.h b/include/ddk/hidsdi.h
index 5eb68ff..c8aae28 100644
--- a/include/ddk/hidsdi.h
+++ b/include/ddk/hidsdi.h
@@ -32,5 +32,7 @@ void WINAPI HidD_GetHidGuid(LPGUID guid);
 BOOLEAN WINAPI HidD_GetManufacturerString(HANDLE HidDeviceObject, PVOID Buffer, ULONG BufferLength);
 BOOLEAN WINAPI HidD_GetProductString(HANDLE HidDeviceObject, PVOID Buffer, ULONG BufferLength);
 BOOLEAN WINAPI HidD_SetFeature(HANDLE HidDeviceObject, PVOID ReportBuffer, ULONG ReportBufferLength);
+BOOLEAN WINAPI HidD_GetPreparsedData( HANDLE HidDeviceObject, PHIDP_PREPARSED_DATA *PreparsedData);
+BOOLEAN WINAPI HidD_FreePreparsedData(PHIDP_PREPARSED_DATA PreparsedData);
 
 #endif  /* __WINE_HIDSDI_H */




More information about the wine-cvs mailing list