#define _HIDPI_
#define _HIDPI_NO_FUNCTION_MACROS_
+#define NDEBUG
#include <ntddk.h>
#include <hidport.h>
#include <debug.h>
+#include <hubbusif.h>
+#include <usbbusif.h>
+#include <usbioctl.h>
+#include <usb.h>
+#include <usbdlib.h>
+
+#include <hidport.h>
typedef struct
{
KEVENT Event;
//
- // list for pending requests
+ // device descriptor
+ //
+ PUSB_DEVICE_DESCRIPTOR DeviceDescriptor;
+
+ //
+ // configuration descriptor
+ //
+ PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor;
+
+ //
+ // interface information
+ //
+ PUSBD_INTERFACE_INFORMATION InterfaceInfo;
+
+ //
+ // configuration handle
+ //
+ USBD_CONFIGURATION_HANDLE ConfigurationHandle;
+
+ //
+ // hid descriptor
+ //
+ PHID_DESCRIPTOR HidDescriptor;
+
+} HID_USB_DEVICE_EXTENSION, *PHID_USB_DEVICE_EXTENSION;
+
+typedef struct
+{
+ //
+ // request irp
+ //
+ PIRP Irp;
+
+ //
+ // work item
//
- LIST_ENTRY PendingRequests;
+ PIO_WORKITEM WorkItem;
+
+ //
+ // device object
+ //
+ PDEVICE_OBJECT DeviceObject;
+
+} HID_USB_RESET_CONTEXT, *PHID_USB_RESET_CONTEXT;
+
+
+NTSTATUS
+Hid_GetDescriptor(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN USHORT UrbFunction,
+ IN USHORT UrbLength,
+ IN OUT PVOID *UrbBuffer,
+ IN OUT PULONG UrbBufferLength,
+ IN UCHAR DescriptorType,
+ IN UCHAR Index,
+ IN USHORT LanguageIndex);
+
+NTSTATUS
+Hid_DispatchUrb(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PURB Urb);
-}HID_USB_DEVICE_EXTENSION, *PHID_USB_DEVICE_EXTENSION;
+#define USB_SET_IDLE_REQUEST 0xA
+#define USB_GET_PROTOCOL_REQUEST 0x3
+#define HIDUSB_TAG 'UdiH'
+#define HIDUSB_URB_TAG 'rUiH'