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