More work on USB related definitions
[reactos.git] / include / psdk / usb100.h
1 /*
2 * usb100.h
3 *
4 * USB 1.0 support
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 */
22
23 #pragma once
24
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28
29 #include <pshpack1.h>
30
31 #define MAXIMUM_USB_STRING_LENGTH 255
32
33 #define USB_DEVICE_CLASS_RESERVED 0x00
34 #define USB_DEVICE_CLASS_AUDIO 0x01
35 #define USB_DEVICE_CLASS_COMMUNICATIONS 0x02
36 #define USB_DEVICE_CLASS_HUMAN_INTERFACE 0x03
37 #define USB_DEVICE_CLASS_MONITOR 0x04
38 #define USB_DEVICE_CLASS_PHYSICAL_INTERFACE 0x05
39 #define USB_DEVICE_CLASS_POWER 0x06
40 #define USB_DEVICE_CLASS_PRINTER 0x07
41 #define USB_DEVICE_CLASS_STORAGE 0x08
42 #define USB_DEVICE_CLASS_HUB 0x09
43 #define USB_DEVICE_CLASS_VENDOR_SPECIFIC 0xFF
44
45 #define USB_RESERVED_DESCRIPTOR_TYPE 0x06
46 #define USB_CONFIG_POWER_DESCRIPTOR_TYPE 0x07
47 #define USB_INTERFACE_POWER_DESCRIPTOR_TYPE 0x08
48
49 #define USB_REQUEST_GET_STATUS 0x00
50 #define USB_REQUEST_CLEAR_FEATURE 0x01
51 #define USB_REQUEST_SET_FEATURE 0x03
52 #define USB_REQUEST_SET_ADDRESS 0x05
53 #define USB_REQUEST_GET_DESCRIPTOR 0x06
54 #define USB_REQUEST_SET_DESCRIPTOR 0x07
55 #define USB_REQUEST_GET_CONFIGURATION 0x08
56 #define USB_REQUEST_SET_CONFIGURATION 0x09
57 #define USB_REQUEST_GET_INTERFACE 0x0A
58 #define USB_REQUEST_SET_INTERFACE 0x0B
59 #define USB_REQUEST_SYNC_FRAME 0x0C
60
61 #define USB_GETSTATUS_SELF_POWERED 0x01
62 #define USB_GETSTATUS_REMOTE_WAKEUP_ENABLED 0x02
63
64 #define BMREQUEST_HOST_TO_DEVICE 0
65 #define BMREQUEST_DEVICE_TO_HOST 1
66
67 #define BMREQUEST_STANDARD 0
68 #define BMREQUEST_CLASS 1
69 #define BMREQUEST_VENDOR 2
70
71 #define BMREQUEST_TO_DEVICE 0
72 #define BMREQUEST_TO_INTERFACE 1
73 #define BMREQUEST_TO_ENDPOINT 2
74 #define BMREQUEST_TO_OTHER 3
75
76 /* USB_COMMON_DESCRIPTOR.bDescriptorType constants */
77 #define USB_DEVICE_DESCRIPTOR_TYPE 0x01
78 #define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02
79 #define USB_STRING_DESCRIPTOR_TYPE 0x03
80 #define USB_INTERFACE_DESCRIPTOR_TYPE 0x04
81 #define USB_ENDPOINT_DESCRIPTOR_TYPE 0x05
82
83 typedef struct _USB_COMMON_DESCRIPTOR {
84 UCHAR bLength;
85 UCHAR bDescriptorType;
86 } USB_COMMON_DESCRIPTOR, *PUSB_COMMON_DESCRIPTOR;
87
88 #define USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(d, i) ((USHORT)((USHORT)d << 8 | i))
89
90 /* USB_CONFIGURATION_DESCRIPTOR.bmAttributes constants */
91 #define USB_CONFIG_POWERED_MASK 0xc0
92 #define USB_CONFIG_BUS_POWERED 0x80
93 #define USB_CONFIG_SELF_POWERED 0x40
94 #define USB_CONFIG_REMOTE_WAKEUP 0x20
95
96 typedef struct _USB_CONFIGURATION_DESCRIPTOR {
97 UCHAR bLength;
98 UCHAR bDescriptorType;
99 USHORT wTotalLength;
100 UCHAR bNumInterfaces;
101 UCHAR bConfigurationValue;
102 UCHAR iConfiguration;
103 UCHAR bmAttributes;
104 UCHAR MaxPower;
105 } USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR;
106
107 typedef struct _USB_DEVICE_DESCRIPTOR {
108 UCHAR bLength;
109 UCHAR bDescriptorType;
110 USHORT bcdUSB;
111 UCHAR bDeviceClass;
112 UCHAR bDeviceSubClass;
113 UCHAR bDeviceProtocol;
114 UCHAR bMaxPacketSize0;
115 USHORT idVendor;
116 USHORT idProduct;
117 USHORT bcdDevice;
118 UCHAR iManufacturer;
119 UCHAR iProduct;
120 UCHAR iSerialNumber;
121 UCHAR bNumConfigurations;
122 } USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR;
123
124 #define USB_ENDPOINT_DIRECTION_MASK 0x80
125
126 #define USB_ENDPOINT_DIRECTION_OUT(x) (!((x) & USB_ENDPOINT_DIRECTION_MASK))
127 #define USB_ENDPOINT_DIRECTION_IN(x) ((x) & USB_ENDPOINT_DIRECTION_MASK)
128
129 /* USB_ENDPOINT_DESCRIPTOR.bmAttributes constants */
130 #define USB_ENDPOINT_TYPE_MASK 0x03
131 #define USB_ENDPOINT_TYPE_CONTROL 0x00
132 #define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01
133 #define USB_ENDPOINT_TYPE_BULK 0x02
134 #define USB_ENDPOINT_TYPE_INTERRUPT 0x03
135
136 typedef struct _USB_ENDPOINT_DESCRIPTOR {
137 UCHAR bLength;
138 UCHAR bDescriptorType;
139 UCHAR bEndpointAddress;
140 UCHAR bmAttributes;
141 USHORT wMaxPacketSize;
142 UCHAR bInterval;
143 } USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR;
144
145 #define USB_FEATURE_ENDPOINT_STALL 0x0000
146 #define USB_FEATURE_REMOTE_WAKEUP 0x0001
147
148 typedef struct _USB_INTERFACE_DESCRIPTOR {
149 UCHAR bLength;
150 UCHAR bDescriptorType;
151 UCHAR bInterfaceNumber;
152 UCHAR bAlternateSetting;
153 UCHAR bNumEndpoints;
154 UCHAR bInterfaceClass;
155 UCHAR bInterfaceSubClass;
156 UCHAR bInterfaceProtocol;
157 UCHAR iInterface;
158 } USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR;
159
160 typedef struct _USB_STRING_DESCRIPTOR {
161 UCHAR bLength;
162 UCHAR bDescriptorType;
163 WCHAR bString[1];
164 } USB_STRING_DESCRIPTOR, *PUSB_STRING_DESCRIPTOR;
165
166 typedef struct _USB_HUB_DESCRIPTOR {
167 UCHAR bDescriptorLength;
168 UCHAR bDescriptorType;
169 UCHAR bNumberOfPorts;
170 USHORT wHubCharacteristics;
171 UCHAR bPowerOnToPowerGood;
172 UCHAR bHubControlCurrent;
173 UCHAR bRemoveAndPowerMask[64];
174 } USB_HUB_DESCRIPTOR, *PUSB_HUB_DESCRIPTOR;
175
176 #define USB_SUPPORT_D0_COMMAND 0x01
177 #define USB_SUPPORT_D1_COMMAND 0x02
178 #define USB_SUPPORT_D2_COMMAND 0x04
179 #define USB_SUPPORT_D3_COMMAND 0x08
180
181 #define USB_SUPPORT_D1_WAKEUP 0x10
182 #define USB_SUPPORT_D2_WAKEUP 0x20
183
184 typedef struct _USB_CONFIGURATION_POWER_DESCRIPTOR {
185 UCHAR bLength;
186 UCHAR bDescriptorType;
187 UCHAR SelfPowerConsumedD0[3];
188 UCHAR bPowerSummaryId;
189 UCHAR bBusPowerSavingD1;
190 UCHAR bSelfPowerSavingD1;
191 UCHAR bBusPowerSavingD2;
192 UCHAR bSelfPowerSavingD2;
193 UCHAR bBusPowerSavingD3;
194 UCHAR bSelfPowerSavingD3;
195 USHORT TransitionTimeFromD1;
196 USHORT TransitionTimeFromD2;
197 USHORT TransitionTimeFromD3;
198 } USB_CONFIGURATION_POWER_DESCRIPTOR, *PUSB_CONFIGURATION_POWER_DESCRIPTOR;
199
200 #define USB_FEATURE_INTERFACE_POWER_D0 0x0002
201 #define USB_FEATURE_INTERFACE_POWER_D1 0x0003
202 #define USB_FEATURE_INTERFACE_POWER_D2 0x0004
203 #define USB_FEATURE_INTERFACE_POWER_D3 0x0005
204
205 typedef struct _USB_INTERFACE_POWER_DESCRIPTOR {
206 UCHAR bLength;
207 UCHAR bDescriptorType;
208 UCHAR bmCapabilitiesFlags;
209 UCHAR bBusPowerSavingD1;
210 UCHAR bSelfPowerSavingD1;
211 UCHAR bBusPowerSavingD2;
212 UCHAR bSelfPowerSavingD2;
213 UCHAR bBusPowerSavingD3;
214 UCHAR bSelfPowerSavingD3;
215 USHORT TransitionTimeFromD1;
216 USHORT TransitionTimeFromD2;
217 USHORT TransitionTimeFromD3;
218 } USB_INTERFACE_POWER_DESCRIPTOR, *PUSB_INTERFACE_POWER_DESCRIPTOR;
219
220 #include <poppack.h>
221
222 #ifdef __cplusplus
223 }
224 #endif