1 /*----------------------------------------------------------------------------
\r
2 * U S B - K e r n e l
\r
3 *----------------------------------------------------------------------------
\r
5 * Purpose: USB Definitions
\r
7 *----------------------------------------------------------------------------
\r
8 * This software is supplied "AS IS" without any warranties, express,
\r
9 * implied or statutory, including but not limited to the implied
\r
10 * warranties of fitness for purpose, satisfactory quality and
\r
11 * noninfringement. Keil extends you a royalty-free right to reproduce
\r
12 * and distribute executable files created using this software for use
\r
13 * on NXP Semiconductors LPC family microcontroller devices only. Nothing
\r
14 * else gives you the right to use this software.
\r
16 * Copyright (c) 2009 Keil - An ARM Company. All rights reserved.
\r
17 *---------------------------------------------------------------------------*/
\r
21 #include "lpc_types.h"
\r
23 #if defined ( __GNUC__ )
\r
24 #define __packed __attribute__((__packed__))
\r
27 #if defined ( __CC_ARM )
\r
28 typedef __packed union {
\r
29 #elif defined ( __GNUC__ )
\r
30 typedef union __packed {
\r
31 #elif defined ( __IAR_SYSTEMS_ICC__ )
\r
36 #if defined ( __CC_ARM )
\r
38 #elif defined ( __GNUC__ )
\r
40 #elif defined ( __IAR_SYSTEMS_ICC__ )
\r
47 #ifdef __IAR_SYSTEMS_ICC__
\r
51 #ifdef __IAR_SYSTEMS_ICC__
\r
56 /* bmRequestType.Dir */
\r
57 #define REQUEST_HOST_TO_DEVICE 0
\r
58 #define REQUEST_DEVICE_TO_HOST 1
\r
60 /* bmRequestType.Type */
\r
61 #define REQUEST_STANDARD 0
\r
62 #define REQUEST_CLASS 1
\r
63 #define REQUEST_VENDOR 2
\r
64 #define REQUEST_RESERVED 3
\r
66 /* bmRequestType.Recipient */
\r
67 #define REQUEST_TO_DEVICE 0
\r
68 #define REQUEST_TO_INTERFACE 1
\r
69 #define REQUEST_TO_ENDPOINT 2
\r
70 #define REQUEST_TO_OTHER 3
\r
72 /* bmRequestType Definition */
\r
73 #if defined ( __CC_ARM )
\r
74 typedef __packed union _REQUEST_TYPE {
\r
75 #elif defined ( __GNUC__ )
\r
76 typedef union __packed _REQUEST_TYPE {
\r
77 #elif defined ( __IAR_SYSTEMS_ICC__ )
\r
79 typedef union _REQUEST_TYPE {
\r
81 #if defined ( __CC_ARM )
\r
82 __packed struct _BM {
\r
83 #elif defined ( __GNUC__ )
\r
84 struct __packed _BM {
\r
85 #elif defined ( __IAR_SYSTEMS_ICC__ )
\r
89 uint8_t Recipient : 5;
\r
93 #ifdef __IAR_SYSTEMS_ICC__
\r
98 #ifdef __IAR_SYSTEMS_ICC__
\r
102 /* USB Standard Request Codes */
\r
103 #define USB_REQUEST_GET_STATUS 0
\r
104 #define USB_REQUEST_CLEAR_FEATURE 1
\r
105 #define USB_REQUEST_SET_FEATURE 3
\r
106 #define USB_REQUEST_SET_ADDRESS 5
\r
107 #define USB_REQUEST_GET_DESCRIPTOR 6
\r
108 #define USB_REQUEST_SET_DESCRIPTOR 7
\r
109 #define USB_REQUEST_GET_CONFIGURATION 8
\r
110 #define USB_REQUEST_SET_CONFIGURATION 9
\r
111 #define USB_REQUEST_GET_INTERFACE 10
\r
112 #define USB_REQUEST_SET_INTERFACE 11
\r
113 #define USB_REQUEST_SYNC_FRAME 12
\r
115 /* USB GET_STATUS Bit Values */
\r
116 #define USB_GETSTATUS_SELF_POWERED 0x01
\r
117 #define USB_GETSTATUS_REMOTE_WAKEUP 0x02
\r
118 #define USB_GETSTATUS_ENDPOINT_STALL 0x01
\r
120 /* USB Standard Feature selectors */
\r
121 #define USB_FEATURE_ENDPOINT_STALL 0
\r
122 #define USB_FEATURE_REMOTE_WAKEUP 1
\r
124 /* USB Default Control Pipe Setup Packet */
\r
125 #if defined ( __CC_ARM )
\r
126 typedef __packed struct _USB_SETUP_PACKET {
\r
127 #elif defined ( __GNUC__ )
\r
128 typedef struct __packed _USB_SETUP_PACKET {
\r
129 #elif defined ( __IAR_SYSTEMS_ICC__ )
\r
131 typedef struct _USB_SETUP_PACKET {
\r
133 REQUEST_TYPE bmRequestType;
\r
138 } USB_SETUP_PACKET;
\r
139 #ifdef __IAR_SYSTEMS_ICC__
\r
144 /* USB Descriptor Types */
\r
145 #define USB_DEVICE_DESCRIPTOR_TYPE 1
\r
146 #define USB_CONFIGURATION_DESCRIPTOR_TYPE 2
\r
147 #define USB_STRING_DESCRIPTOR_TYPE 3
\r
148 #define USB_INTERFACE_DESCRIPTOR_TYPE 4
\r
149 #define USB_ENDPOINT_DESCRIPTOR_TYPE 5
\r
150 #define USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE 6
\r
151 #define USB_OTHER_SPEED_CONFIG_DESCRIPTOR_TYPE 7
\r
152 #define USB_INTERFACE_POWER_DESCRIPTOR_TYPE 8
\r
153 #define USB_OTG_DESCRIPTOR_TYPE 9
\r
154 #define USB_DEBUG_DESCRIPTOR_TYPE 10
\r
155 #define USB_INTERFACE_ASSOCIATION_DESCRIPTOR_TYPE 11
\r
157 /* USB Device Classes */
\r
158 #define USB_DEVICE_CLASS_RESERVED 0x00
\r
159 #define USB_DEVICE_CLASS_AUDIO 0x01
\r
160 #define USB_DEVICE_CLASS_COMMUNICATIONS 0x02
\r
161 #define USB_DEVICE_CLASS_HUMAN_INTERFACE 0x03
\r
162 #define USB_DEVICE_CLASS_MONITOR 0x04
\r
163 #define USB_DEVICE_CLASS_PHYSICAL_INTERFACE 0x05
\r
164 #define USB_DEVICE_CLASS_POWER 0x06
\r
165 #define USB_DEVICE_CLASS_PRINTER 0x07
\r
166 #define USB_DEVICE_CLASS_STORAGE 0x08
\r
167 #define USB_DEVICE_CLASS_HUB 0x09
\r
168 #define USB_DEVICE_CLASS_MISCELLANEOUS 0xEF
\r
169 #define USB_DEVICE_CLASS_VENDOR_SPECIFIC 0xFF
\r
171 /* bmAttributes in Configuration Descriptor */
\r
172 #define USB_CONFIG_POWERED_MASK 0x40
\r
173 #define USB_CONFIG_BUS_POWERED 0x80
\r
174 #define USB_CONFIG_SELF_POWERED 0xC0
\r
175 #define USB_CONFIG_REMOTE_WAKEUP 0x20
\r
177 /* bMaxPower in Configuration Descriptor */
\r
178 #define USB_CONFIG_POWER_MA(mA) ((mA)/2)
\r
180 /* bEndpointAddress in Endpoint Descriptor */
\r
181 #define USB_ENDPOINT_DIRECTION_MASK 0x80
\r
182 #define USB_ENDPOINT_OUT(addr) ((addr) | 0x00)
\r
183 #define USB_ENDPOINT_IN(addr) ((addr) | 0x80)
\r
185 /* bmAttributes in Endpoint Descriptor */
\r
186 #define USB_ENDPOINT_TYPE_MASK 0x03
\r
187 #define USB_ENDPOINT_TYPE_CONTROL 0x00
\r
188 #define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01
\r
189 #define USB_ENDPOINT_TYPE_BULK 0x02
\r
190 #define USB_ENDPOINT_TYPE_INTERRUPT 0x03
\r
191 #define USB_ENDPOINT_SYNC_MASK 0x0C
\r
192 #define USB_ENDPOINT_SYNC_NO_SYNCHRONIZATION 0x00
\r
193 #define USB_ENDPOINT_SYNC_ASYNCHRONOUS 0x04
\r
194 #define USB_ENDPOINT_SYNC_ADAPTIVE 0x08
\r
195 #define USB_ENDPOINT_SYNC_SYNCHRONOUS 0x0C
\r
196 #define USB_ENDPOINT_USAGE_MASK 0x30
\r
197 #define USB_ENDPOINT_USAGE_DATA 0x00
\r
198 #define USB_ENDPOINT_USAGE_FEEDBACK 0x10
\r
199 #define USB_ENDPOINT_USAGE_IMPLICIT_FEEDBACK 0x20
\r
200 #define USB_ENDPOINT_USAGE_RESERVED 0x30
\r
202 /* USB Standard Device Descriptor */
\r
203 #if defined ( __CC_ARM )
\r
204 typedef __packed struct _USB_DEVICE_DESCRIPTOR {
\r
205 #elif defined ( __GNUC__ )
\r
206 typedef struct __packed _USB_DEVICE_DESCRIPTOR {
\r
207 #elif defined ( __IAR_SYSTEMS_ICC__ )
\r
209 typedef struct _USB_DEVICE_DESCRIPTOR {
\r
212 uint8_t bDescriptorType;
\r
214 uint8_t bDeviceClass;
\r
215 uint8_t bDeviceSubClass;
\r
216 uint8_t bDeviceProtocol;
\r
217 uint8_t bMaxPacketSize0;
\r
219 uint16_t idProduct;
\r
220 uint16_t bcdDevice;
\r
221 uint8_t iManufacturer;
\r
223 uint8_t iSerialNumber;
\r
224 uint8_t bNumConfigurations;
\r
225 } USB_DEVICE_DESCRIPTOR;
\r
226 #ifdef __IAR_SYSTEMS_ICC__
\r
230 /* USB 2.0 Device Qualifier Descriptor */
\r
231 #if defined ( __CC_ARM )
\r
232 typedef __packed struct _USB_DEVICE_QUALIFIER_DESCRIPTOR {
\r
233 #elif defined ( __GNUC__ )
\r
234 typedef struct __packed _USB_DEVICE_QUALIFIER_DESCRIPTOR {
\r
235 #elif defined ( __IAR_SYSTEMS_ICC__ )
\r
237 typedef struct _USB_DEVICE_QUALIFIER_DESCRIPTOR {
\r
240 uint8_t bDescriptorType;
\r
242 uint8_t bDeviceClass;
\r
243 uint8_t bDeviceSubClass;
\r
244 uint8_t bDeviceProtocol;
\r
245 uint8_t bMaxPacketSize0;
\r
246 uint8_t bNumConfigurations;
\r
248 } USB_DEVICE_QUALIFIER_DESCRIPTOR;
\r
249 #ifdef __IAR_SYSTEMS_ICC__
\r
253 #if defined ( __CC_ARM )
\r
254 typedef __packed struct _USB_CONFIGURATION_DESCRIPTOR {
\r
255 #elif defined ( __GNUC__ )
\r
256 typedef struct __packed _USB_CONFIGURATION_DESCRIPTOR {
\r
257 #elif defined ( __IAR_SYSTEMS_ICC__ )
\r
259 typedef struct _USB_CONFIGURATION_DESCRIPTOR {
\r
262 uint8_t bDescriptorType;
\r
263 uint16_t wTotalLength;
\r
264 uint8_t bNumInterfaces;
\r
265 uint8_t bConfigurationValue;
\r
266 uint8_t iConfiguration;
\r
267 uint8_t bmAttributes;
\r
269 } USB_CONFIGURATION_DESCRIPTOR;
\r
270 #ifdef __IAR_SYSTEMS_ICC__
\r
274 /* USB Standard Interface Descriptor */
\r
275 #if defined ( __CC_ARM )
\r
276 typedef __packed struct _USB_INTERFACE_DESCRIPTOR {
\r
277 #elif defined ( __GNUC__ )
\r
278 typedef struct __packed _USB_INTERFACE_DESCRIPTOR {
\r
279 #elif defined ( __IAR_SYSTEMS_ICC__ )
\r
281 typedef struct _USB_INTERFACE_DESCRIPTOR {
\r
284 uint8_t bDescriptorType;
\r
285 uint8_t bInterfaceNumber;
\r
286 uint8_t bAlternateSetting;
\r
287 uint8_t bNumEndpoints;
\r
288 uint8_t bInterfaceClass;
\r
289 uint8_t bInterfaceSubClass;
\r
290 uint8_t bInterfaceProtocol;
\r
291 uint8_t iInterface;
\r
292 } USB_INTERFACE_DESCRIPTOR;
\r
293 #ifdef __IAR_SYSTEMS_ICC__
\r
297 /* USB Standard Endpoint Descriptor */
\r
298 #if defined ( __CC_ARM )
\r
299 typedef __packed struct _USB_ENDPOINT_DESCRIPTOR {
\r
300 #elif defined ( __GNUC__ )
\r
301 typedef struct __packed _USB_ENDPOINT_DESCRIPTOR {
\r
302 #elif defined ( __IAR_SYSTEMS_ICC__ )
\r
304 typedef struct _USB_ENDPOINT_DESCRIPTOR {
\r
307 uint8_t bDescriptorType;
\r
308 uint8_t bEndpointAddress;
\r
309 uint8_t bmAttributes;
\r
310 uint16_t wMaxPacketSize;
\r
312 } USB_ENDPOINT_DESCRIPTOR;
\r
313 #ifdef __IAR_SYSTEMS_ICC__
\r
317 /* USB String Descriptor */
\r
318 #if defined ( __CC_ARM )
\r
319 typedef __packed struct _USB_STRING_DESCRIPTOR {
\r
320 #elif defined ( __GNUC__ )
\r
321 typedef struct __packed _USB_STRING_DESCRIPTOR {
\r
322 #elif defined ( __IAR_SYSTEMS_ICC__ )
\r
324 typedef struct _USB_STRING_DESCRIPTOR {
\r
327 uint8_t bDescriptorType;
\r
328 uint16_t bString/*[]*/;
\r
329 } USB_STRING_DESCRIPTOR;
\r
330 #ifdef __IAR_SYSTEMS_ICC__
\r
334 /* USB Common Descriptor */
\r
335 #if defined ( __CC_ARM )
\r
336 typedef __packed struct _USB_COMMON_DESCRIPTOR {
\r
337 #elif defined ( __GNUC__ )
\r
338 typedef struct __packed _USB_COMMON_DESCRIPTOR {
\r
339 #elif defined ( __IAR_SYSTEMS_ICC__ )
\r
341 typedef struct _USB_COMMON_DESCRIPTOR {
\r
344 uint8_t bDescriptorType;
\r
345 } USB_COMMON_DESCRIPTOR;
\r
346 #ifdef __IAR_SYSTEMS_ICC__
\r
352 #endif /* __USB_H__ */
\r