/*++ Copyright (c) 1996, 1997 Microsoft Corporation Module Name: hidmini.h --*/ #ifndef __HIDMINI_H__ #define __HIDMINI_H__ #include #include // // Declarations of HID descriptor formats // #include typedef struct _USB_HID_DESCRIPTOR { UCHAR bLength; UCHAR bDescriptorType; USHORT bcdHID; UCHAR bCountry; UCHAR bNumDescriptors; UCHAR bReportType; USHORT wReportLength; } USB_HID_DESCRIPTOR, * PUSB_HID_DESCRIPTOR; typedef struct _USB_PHYSICAL_DESCRIPTOR { UCHAR bNumber; USHORT wLength; } USB_PHYSICAL_DESCRIPTOR, * PUSB_PHYSICAL_DESCRIPTOR; typedef UCHAR HID_REPORT_DESCRIPTOR, *PHID_REPORT_DESCRIPTOR; #include // // Device Extension // // This data structure is hooked onto HIDCLASS' device extension, so both drivers can // have their own private data on each device object. // typedef struct _DEVICE_EXTENSION { ULONG DeviceState; USB_HID_DESCRIPTOR HidDescriptor; PHID_REPORT_DESCRIPTOR ReportDescriptor; PUSB_STRING_DESCRIPTOR StringDescriptor; PUSB_PHYSICAL_DESCRIPTOR PhysicalDescriptor; ULONG NumPendingRequests; KEVENT AllRequestsCompleteEvent; } DEVICE_EXTENSION, *PDEVICE_EXTENSION; #define DEVICE_STATE_NONE 0 #define DEVICE_STATE_STARTING 1 #define DEVICE_STATE_RUNNING 2 #define DEVICE_STATE_STOPPING 3 #define DEVICE_STATE_STOPPED 4 #define DEVICE_STATE_REMOVING 5 // // Device Extension Macros // #define GET_MINIDRIVER_DEVICE_EXTENSION(DO) ((PDEVICE_EXTENSION) (((PHID_DEVICE_EXTENSION)(DO)->DeviceExtension)->MiniDeviceExtension)) #define GET_NEXT_DEVICE_OBJECT(DO) (((PHID_DEVICE_EXTENSION)(DO)->DeviceExtension)->NextDeviceObject) // // Built In descriptors for this device // HID_REPORT_DESCRIPTOR MyReportDescriptor[]; USB_HID_DESCRIPTOR MyHidDescriptor; PUSB_STRING_DESCRIPTOR MyStringDescriptor; PUSB_PHYSICAL_DESCRIPTOR MyPhysicalDescriptor; #define HIDMINI_PID 0xFEED #define HIDMINI_VID 0xBEEF #define HIDMINI_VERSION 0x0101 // // IO lists // extern KSPIN_LOCK HidMini_IrpReadLock; extern KSPIN_LOCK HidMini_IrpWriteLock; extern LIST_ENTRY HidMini_ReadIrpHead; extern LIST_ENTRY HidMini_WriteIrpHead; typedef struct { LIST_ENTRY List; union { PIRP Irp; }; } NODE, *PNODE; extern BOOLEAN IsRunning; // // Turn on debug printing and breaking, if appropriate // #if DBG #define DBGPrint(arg) DbgPrint arg #define DBGBREAK DbgBreakPoint() #else #define DBGPrint(arg) #define DBGBREAK #endif // // Function prototypes // NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING registryPath ); NTSTATUS HidMiniAbortPendingRequests( IN PDEVICE_OBJECT DeviceObject ); NTSTATUS HidMiniCreateClose( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS HidMiniIoctl( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS HidMiniPnP( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS HidMiniCreateDevice( IN PDRIVER_OBJECT DriverObject, IN OUT PDEVICE_OBJECT *DeviceObject ); NTSTATUS HidMiniAddDevice( IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT FunctionalDeviceObject ); NTSTATUS HidMiniStartDevice( IN PDEVICE_OBJECT DeviceObject ); NTSTATUS HidMiniStartCompletion( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context ); NTSTATUS HidMiniInitDevice( IN PDEVICE_OBJECT DeviceObject ); NTSTATUS HidMiniStopDevice( IN PDEVICE_OBJECT DeviceObject ); NTSTATUS HidMiniStopCompletion( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context ); NTSTATUS HidMiniQueryIDCompletion( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context ); NTSTATUS HidMiniRemoveDevice( IN PDEVICE_OBJECT DeviceObject ); VOID HidMiniUnload( IN PDRIVER_OBJECT DriverObject ); NTSTATUS HidMiniGetHIDDescriptor( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS HidMiniGetDeviceAttributes( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS HidMiniGetReportDescriptor( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS HidMiniGetStringDescriptor( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS HidMiniReadReport( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS HidMiniReadCompletion( PVOID Context ); NTSTATUS HidMiniWriteReport( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS HidMiniWriteCompletion( VOID ); NTSTATUS HidMiniGetString( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS HidMiniOpenCollection( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS HidMiniCloseCollection( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); VOID HidMiniIncrementPendingRequestCount( IN PDEVICE_EXTENSION DeviceExtension ); VOID HidMiniDecrementPendingRequestCount( IN PDEVICE_EXTENSION DeviceExtension ); #endif // _HIDMINI_H__