Aric Stewart : hid: Implement HidP_GetCaps.

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


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

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

hid: Implement HidP_GetCaps.

---

 dlls/hid/Makefile.in |  1 +
 dlls/hid/hid.spec    |  2 +-
 dlls/hid/hidp.c      | 53 ++++++++++++++++++++++++++++++++++++++
 dlls/hid/parse.h     | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 127 insertions(+), 1 deletion(-)

diff --git a/dlls/hid/Makefile.in b/dlls/hid/Makefile.in
index 3a115ca..97ae959 100644
--- a/dlls/hid/Makefile.in
+++ b/dlls/hid/Makefile.in
@@ -3,6 +3,7 @@ IMPORTLIB = hid
 
 C_SRCS = \
 	hidd.c \
+	hidp.c \
 	main.c
 
 RC_SRCS = version.rc
diff --git a/dlls/hid/hid.spec b/dlls/hid/hid.spec
index f58953a..9d7899f 100644
--- a/dlls/hid/hid.spec
+++ b/dlls/hid/hid.spec
@@ -19,7 +19,7 @@
 @ stub HidD_SetNumInputBuffers
 @ stub HidD_SetOutputReport
 @ stub HidP_GetButtonCaps
-@ stub HidP_GetCaps
+@ stdcall HidP_GetCaps(ptr ptr)
 @ stub HidP_GetData
 @ stub HidP_GetExtendedAttributes
 @ stub HidP_GetLinkCollectionNodes
diff --git a/dlls/hid/hidp.c b/dlls/hid/hidp.c
new file mode 100644
index 0000000..a6f462c
--- /dev/null
+++ b/dlls/hid/hidp.c
@@ -0,0 +1,53 @@
+/*
+ * Human Input Devices
+ *
+ * Copyright (C) 2015 Aric Stewart
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "config.h"
+
+#include <stdarg.h>
+
+#define NONAMELESSUNION
+#define WIN32_NO_STATUS
+#include "windef.h"
+#include "winbase.h"
+#include "winternl.h"
+#include "winioctl.h"
+#include "ddk/wdm.h"
+
+#include "hidusage.h"
+#include "ddk/hidpi.h"
+#include "parse.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(hidp);
+
+NTSTATUS WINAPI HidP_GetCaps(PHIDP_PREPARSED_DATA PreparsedData,
+    PHIDP_CAPS Capabilities)
+{
+    PWINE_HIDP_PREPARSED_DATA data = (PWINE_HIDP_PREPARSED_DATA)PreparsedData;
+
+    TRACE("(%p, %p)\n",PreparsedData, Capabilities);
+
+    if (data->magic != HID_MAGIC)
+        return HIDP_STATUS_INVALID_PREPARSED_DATA;
+
+    *Capabilities = data->caps;
+
+    return HIDP_STATUS_SUCCESS;
+}
diff --git a/dlls/hid/parse.h b/dlls/hid/parse.h
new file mode 100644
index 0000000..1d902f8
--- /dev/null
+++ b/dlls/hid/parse.h
@@ -0,0 +1,72 @@
+/*
+ * Internal HID structures
+ *
+ * Copyright 2015 Aric Stewart
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __HID_PARSE_H
+#define __HID_PARSE_H
+
+#define HID_MAGIC 0x8491759
+
+typedef enum {
+    UnknownElement = 0,
+    ButtonElement,
+    ValueElement,
+} WINE_ELEMENT_TYPE;
+
+typedef struct
+{
+    WINE_ELEMENT_TYPE ElementType;
+    UINT  valueStartBit;
+    UINT  bitCount;
+    union {
+        HIDP_VALUE_CAPS value;
+        HIDP_BUTTON_CAPS button;
+    } caps;
+} WINE_HID_ELEMENT;
+
+typedef struct
+{
+    UCHAR reportID;
+    DWORD dwSize;
+    DWORD elementCount;
+    WINE_HID_ELEMENT Elements[1];
+} WINE_HID_REPORT;
+
+typedef struct
+{
+    DWORD magic;
+    DWORD dwSize;
+    HIDP_CAPS caps;
+
+    DWORD dwInputReportCount;
+    DWORD dwOutputReportCount;
+    DWORD dwFeatureReportCount;
+
+    DWORD dwOutputReportOffset;
+    DWORD dwFeatureReportOffset;
+
+    WINE_HID_REPORT InputReports[1];
+} WINE_HIDP_PREPARSED_DATA, *PWINE_HIDP_PREPARSED_DATA;
+
+#define HID_NEXT_REPORT(d,r) ((r)?(WINE_HID_REPORT*)(((BYTE*)(r))+(r)->dwSize):(d)->InputReports)
+#define HID_INPUT_REPORTS(d) ((d)->InputReports)
+#define HID_OUTPUT_REPORTS(d) ((WINE_HID_REPORT*)(((BYTE*)(d)->InputReports)+(d)->dwOutputReportOffset))
+#define HID_FEATURE_REPORTS(d) ((WINE_HID_REPORT*)(((BYTE*)(d)->InputReports)+(d)->dwFeatureReportOffset))
+
+#endif /* __HID_PARSE_H */




More information about the wine-cvs mailing list