6
* This file is part of the ReactOS PSDK package.
9
* Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11
* THIS SOFTWARE IS NOT COPYRIGHTED
13
* This source code is offered for use in the public domain. You may
14
* use, modify or distribute it freely.
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.
31
#define BMREQUEST_HOST_TO_DEVICE 0
32
#define BMREQUEST_DEVICE_TO_HOST 1
34
#define BMREQUEST_STANDARD 0
35
#define BMREQUEST_CLASS 1
36
#define BMREQUEST_VENDOR 2
38
#define BMREQUEST_TO_DEVICE 0
39
#define BMREQUEST_TO_INTERFACE 1
40
#define BMREQUEST_TO_ENDPOINT 2
41
#define BMREQUEST_TO_OTHER 3
43
#define MAXIMUM_USB_STRING_LENGTH 255
45
#define USB_GETSTATUS_SELF_POWERED 0x01
46
#define USB_GETSTATUS_REMOTE_WAKEUP_ENABLED 0x02
48
/* USB_COMMON_DESCRIPTOR.bDescriptorType constants */
49
#define USB_DEVICE_DESCRIPTOR_TYPE 0x01
50
#define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02
51
#define USB_STRING_DESCRIPTOR_TYPE 0x03
52
#define USB_INTERFACE_DESCRIPTOR_TYPE 0x04
53
#define USB_ENDPOINT_DESCRIPTOR_TYPE 0x05
54
#define USB_RESERVED_DESCRIPTOR_TYPE 0x06
55
#define USB_CONFIG_POWER_DESCRIPTOR_TYPE 0x07
56
#define USB_INTERFACE_POWER_DESCRIPTOR_TYPE 0x08
58
#define USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(d, i) ((USHORT)((USHORT)d << 8 | i))
60
/* USB_ENDPOINT_DESCRIPTOR.bmAttributes constants */
61
#define USB_ENDPOINT_TYPE_MASK 0x03
62
#define USB_ENDPOINT_TYPE_CONTROL 0x00
63
#define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01
64
#define USB_ENDPOINT_TYPE_BULK 0x02
65
#define USB_ENDPOINT_TYPE_INTERRUPT 0x03
67
/* USB_CONFIGURATION_DESCRIPTOR.bmAttributes constants */
68
#define USB_CONFIG_POWERED_MASK 0xc0
69
#define USB_CONFIG_BUS_POWERED 0x80
70
#define USB_CONFIG_SELF_POWERED 0x40
71
#define USB_CONFIG_REMOTE_WAKEUP 0x20
73
#define USB_ENDPOINT_DIRECTION_MASK 0x80
75
#define USB_ENDPOINT_DIRECTION_OUT(x) (!((x) & USB_ENDPOINT_DIRECTION_MASK))
76
#define USB_ENDPOINT_DIRECTION_IN(x) ((x) & USB_ENDPOINT_DIRECTION_MASK)
78
#define USB_REQUEST_GET_STATUS 0x00
79
#define USB_REQUEST_CLEAR_FEATURE 0x01
80
#define USB_REQUEST_SET_FEATURE 0x03
81
#define USB_REQUEST_SET_ADDRESS 0x05
82
#define USB_REQUEST_GET_DESCRIPTOR 0x06
83
#define USB_REQUEST_SET_DESCRIPTOR 0x07
84
#define USB_REQUEST_GET_CONFIGURATION 0x08
85
#define USB_REQUEST_SET_CONFIGURATION 0x09
86
#define USB_REQUEST_GET_INTERFACE 0x0A
87
#define USB_REQUEST_SET_INTERFACE 0x0B
88
#define USB_REQUEST_SYNC_FRAME 0x0C
90
#define USB_DEVICE_CLASS_RESERVED 0x00
91
#define USB_DEVICE_CLASS_AUDIO 0x01
92
#define USB_DEVICE_CLASS_COMMUNICATIONS 0x02
93
#define USB_DEVICE_CLASS_HUMAN_INTERFACE 0x03
94
#define USB_DEVICE_CLASS_MONITOR 0x04
95
#define USB_DEVICE_CLASS_PHYSICAL_INTERFACE 0x05
96
#define USB_DEVICE_CLASS_POWER 0x06
97
#define USB_DEVICE_CLASS_PRINTER 0x07
98
#define USB_DEVICE_CLASS_STORAGE 0x08
99
#define USB_DEVICE_CLASS_HUB 0x09
100
#define USB_DEVICE_CLASS_VENDOR_SPECIFIC 0xFF
102
#define USB_FEATURE_ENDPOINT_STALL 0x0000
103
#define USB_FEATURE_REMOTE_WAKEUP 0x0001
105
#define USB_FEATURE_INTERFACE_POWER_D0 0x0002
106
#define USB_FEATURE_INTERFACE_POWER_D1 0x0003
107
#define USB_FEATURE_INTERFACE_POWER_D2 0x0004
108
#define USB_FEATURE_INTERFACE_POWER_D3 0x0005
110
typedef struct _USB_DEVICE_DESCRIPTOR {
112
UCHAR bDescriptorType;
115
UCHAR bDeviceSubClass;
116
UCHAR bDeviceProtocol;
117
UCHAR bMaxPacketSize0;
124
UCHAR bNumConfigurations;
125
} USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR;
127
typedef struct _USB_ENDPOINT_DESCRIPTOR {
129
UCHAR bDescriptorType;
130
UCHAR bEndpointAddress;
132
USHORT wMaxPacketSize;
134
} USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR;
136
typedef struct _USB_CONFIGURATION_DESCRIPTOR {
138
UCHAR bDescriptorType;
140
UCHAR bNumInterfaces;
141
UCHAR bConfigurationValue;
142
UCHAR iConfiguration;
145
} USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR;
147
typedef struct _USB_INTERFACE_DESCRIPTOR {
149
UCHAR bDescriptorType;
150
UCHAR bInterfaceNumber;
151
UCHAR bAlternateSetting;
153
UCHAR bInterfaceClass;
154
UCHAR bInterfaceSubClass;
155
UCHAR bInterfaceProtocol;
157
} USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR;
159
typedef struct _USB_STRING_DESCRIPTOR {
161
UCHAR bDescriptorType;
163
} USB_STRING_DESCRIPTOR, *PUSB_STRING_DESCRIPTOR;
165
typedef struct _USB_COMMON_DESCRIPTOR {
167
UCHAR bDescriptorType;
168
} USB_COMMON_DESCRIPTOR, *PUSB_COMMON_DESCRIPTOR;
170
typedef struct _USB_HUB_DESCRIPTOR {
171
UCHAR bDescriptorLength;
172
UCHAR bDescriptorType;
173
UCHAR bNumberOfPorts;
174
USHORT wHubCharacteristics;
175
UCHAR bPowerOnToPowerGood;
176
UCHAR bHubControlCurrent;
177
UCHAR bRemoveAndPowerMask[64];
178
} USB_HUB_DESCRIPTOR, *PUSB_HUB_DESCRIPTOR;
180
#define USB_SUPPORT_D0_COMMAND 0x01
181
#define USB_SUPPORT_D1_COMMAND 0x02
182
#define USB_SUPPORT_D2_COMMAND 0x04
183
#define USB_SUPPORT_D3_COMMAND 0x08
185
#define USB_SUPPORT_D1_WAKEUP 0x10
186
#define USB_SUPPORT_D2_WAKEUP 0x20
188
typedef struct _USB_CONFIGURATION_POWER_DESCRIPTOR {
190
UCHAR bDescriptorType;
191
UCHAR SelfPowerConsumedD0[3];
192
UCHAR bPowerSummaryId;
193
UCHAR bBusPowerSavingD1;
194
UCHAR bSelfPowerSavingD1;
195
UCHAR bBusPowerSavingD2;
196
UCHAR bSelfPowerSavingD2;
197
UCHAR bBusPowerSavingD3;
198
UCHAR bSelfPowerSavingD3;
199
USHORT TransitionTimeFromD1;
200
USHORT TransitionTimeFromD2;
201
USHORT TransitionTimeFromD3;
202
} USB_CONFIGURATION_POWER_DESCRIPTOR, *PUSB_CONFIGURATION_POWER_DESCRIPTOR;
204
typedef struct _USB_INTERFACE_POWER_DESCRIPTOR {
206
UCHAR bDescriptorType;
207
UCHAR bmCapabilitiesFlags;
208
UCHAR bBusPowerSavingD1;
209
UCHAR bSelfPowerSavingD1;
210
UCHAR bBusPowerSavingD2;
211
UCHAR bSelfPowerSavingD2;
212
UCHAR bBusPowerSavingD3;
213
UCHAR bSelfPowerSavingD3;
214
USHORT TransitionTimeFromD1;
215
USHORT TransitionTimeFromD2;
216
USHORT TransitionTimeFromD3;
217
} USB_INTERFACE_POWER_DESCRIPTOR, *PUSB_INTERFACE_POWER_DESCRIPTOR;