UPS: apcupsd clean sources
[tomato.git] / release / src / router / apcupsd / src / win32 / winusb.h
blob2ecb2e9a7cbef02a6a830ea944b79ab98fc43775
1 #ifndef __WINUSB_H
2 #define __WINUSB_H
4 #include "ddk/usb100.h"
5 #include "ddk/usbioctl.h"
7 // Windows API default is uppercase - ugh!
8 #if !defined(bool)
9 #define bool BOOLEAN
10 #endif
11 #if !defined(true)
12 #define true TRUE
13 #endif
14 #if !defined(false)
15 #define false FALSE
16 #endif
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
24 #endif
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)
30 #endif
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;
37 UCHAR Speed;
38 BOOLEAN DeviceIsHub;
39 USHORT DeviceAddress;
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;
44 #endif
46 #ifndef USB_HUB_CAP_FLAGS
47 typedef union _USB_HUB_CAP_FLAGS {
48 ULONG ul;
49 struct {
50 ULONG HubIsHighSpeedCapable:1;
51 ULONG HubIsHighSpeed:1;
52 ULONG HubIsMultiTtCapable:1;
53 ULONG HubIsMultiTt:1;
54 ULONG HubIsRoot:1;
55 ULONG HubIsArmedWakeOnConnect:1;
56 ULONG ReservedMBZ:26;
58 } USB_HUB_CAP_FLAGS, *PUSB_HUB_CAP_FLAGS;
59 #endif
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;
65 #endif
67 #ifndef USB_GET_HUB_CAPABILITIES_EX
68 #define USB_GET_HUB_CAPABILITIES_EX 276
69 #endif
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 )
75 #endif
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) \
86 do { \
87 HMODULE h = GetModuleHandle(#dll); \
88 if(!h) \
89 h = LoadLibrary(#dll); \
90 if(!h) \
91 break; \
92 if((name = (__dll_##name##_t)GetProcAddress(h, #name))) \
93 break; \
94 if((name = (__dll_##name##_t)GetProcAddress(h, #name "A"))) \
95 break; \
96 if((name = (__dll_##name##_t)GetProcAddress(h, #name "W"))) \
97 break; \
98 } while(0)
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
109 #define RAW_IO 0x07
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 {
119 UsbdPipeTypeControl,
120 UsbdPipeTypeIsochronous,
121 UsbdPipeTypeBulk,
122 UsbdPipeTypeInterrupt
123 } USBD_PIPE_TYPE;
125 typedef struct {
126 USBD_PIPE_TYPE PipeType;
127 UCHAR PipeId;
128 USHORT MaximumPacketSize;
129 UCHAR Interval;
130 } WINUSB_PIPE_INFORMATION, *PWINUSB_PIPE_INFORMATION;
132 #pragma pack(1)
133 typedef struct {
134 UCHAR RequestType;
135 UCHAR Request;
136 USHORT Value;
137 USHORT Index;
138 USHORT Length;
139 } WINUSB_SETUP_PACKET, *PWINUSB_SETUP_PACKET;
140 #pragma pack()
142 typedef void *WINUSB_INTERFACE_HANDLE, *PWINUSB_INTERFACE_HANDLE;
144 #endif // __WINUSB_H