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