4 #include "ddk/usb100.h"
5 #include "ddk/usbioctl.h"
7 // Windows API default is uppercase - ugh!
20 * Some of the EX stuff is not yet in MinGW => define it
22 #ifndef USB_GET_NODE_CONNECTION_INFORMATION_EX
23 #define USB_GET_NODE_CONNECTION_INFORMATION_EX 274
26 #ifndef IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX
27 #define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX \
28 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION_EX, \
29 METHOD_BUFFERED, FILE_ANY_ACCESS)
32 #ifndef USB_NODE_CONNECTION_INFORMATION_EX
33 typedef struct _USB_NODE_CONNECTION_INFORMATION_EX
{
34 ULONG ConnectionIndex
;
35 USB_DEVICE_DESCRIPTOR DeviceDescriptor
;
36 UCHAR CurrentConfigurationValue
;
40 ULONG NumberOfOpenPipes
;
41 USB_CONNECTION_STATUS ConnectionStatus
;
42 USB_PIPE_INFO PipeList
[0];
43 } USB_NODE_CONNECTION_INFORMATION_EX
, *PUSB_NODE_CONNECTION_INFORMATION_EX
;
46 #ifndef USB_HUB_CAP_FLAGS
47 typedef union _USB_HUB_CAP_FLAGS
{
50 ULONG HubIsHighSpeedCapable
:1;
51 ULONG HubIsHighSpeed
:1;
52 ULONG HubIsMultiTtCapable
:1;
55 ULONG HubIsArmedWakeOnConnect
:1;
58 } USB_HUB_CAP_FLAGS
, *PUSB_HUB_CAP_FLAGS
;
61 #ifndef USB_HUB_CAPABILITIES_EX
62 typedef struct _USB_HUB_CAPABILITIES_EX
{
63 USB_HUB_CAP_FLAGS CapabilityFlags
;
64 } USB_HUB_CAPABILITIES_EX
, *PUSB_HUB_CAPABILITIES_EX
;
67 #ifndef USB_GET_HUB_CAPABILITIES_EX
68 #define USB_GET_HUB_CAPABILITIES_EX 276
71 #ifndef IOCTL_USB_GET_HUB_CAPABILITIES_EX
72 #define IOCTL_USB_GET_HUB_CAPABILITIES_EX \
73 CTL_CODE( FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES_EX, \
74 METHOD_BUFFERED, FILE_ANY_ACCESS )
78 * WinUSB macros - from libusb-win32 1.x
81 #define DLL_DECLARE(api, ret, name, args) \
82 typedef ret (api * __dll_##name##_t)args; \
83 static __dll_##name##_t name
85 #define DLL_LOAD(dll, name) \
87 HMODULE h = GetModuleHandle(#dll); \
89 h = LoadLibrary(#dll); \
92 if((name = (__dll_##name##_t)GetProcAddress(h, #name))) \
94 if((name = (__dll_##name##_t)GetProcAddress(h, #name "A"))) \
96 if((name = (__dll_##name##_t)GetProcAddress(h, #name "W"))) \
101 /* winusb.dll interface */
103 #define SHORT_PACKET_TERMINATE 0x01
104 #define AUTO_CLEAR_STALL 0x02
105 #define PIPE_TRANSFER_TIMEOUT 0x03
106 #define IGNORE_SHORT_PACKETS 0x04
107 #define ALLOW_PARTIAL_READS 0x05
108 #define AUTO_FLUSH 0x06
110 #define MAXIMUM_TRANSFER_SIZE 0x08
111 #define AUTO_SUSPEND 0x81
112 #define SUSPEND_DELAY 0x83
113 #define DEVICE_SPEED 0x01
114 #define LowSpeed 0x01
115 #define FullSpeed 0x02
116 #define HighSpeed 0x03
118 typedef enum _USBD_PIPE_TYPE
{
120 UsbdPipeTypeIsochronous
,
122 UsbdPipeTypeInterrupt
126 USBD_PIPE_TYPE PipeType
;
128 USHORT MaximumPacketSize
;
130 } WINUSB_PIPE_INFORMATION
, *PWINUSB_PIPE_INFORMATION
;
139 } WINUSB_SETUP_PACKET
, *PWINUSB_SETUP_PACKET
;
142 typedef void *WINUSB_INTERFACE_HANDLE
, *PWINUSB_INTERFACE_HANDLE
;