1 /**********************************************************************
2 * $Id$ usb.h 2011-06-02
5 * @brief USB Definitions
8 * @author NXP MCU SW Application Team
10 * Copyright(C) 2011, NXP Semiconductor
11 * All rights reserved.
13 ***********************************************************************
14 * Software that is described herein is for illustrative purposes only
15 * which provides customers with programming information regarding the
16 * products. This software is supplied "AS IS" without any warranties.
17 * NXP Semiconductors assumes no responsibility or liability for the
18 * use of the software, conveys no license or title under any patent,
19 * copyright, or mask work right to the product. NXP Semiconductors
20 * reserves the right to make changes in the software without
21 * notification. NXP Semiconductors also make no representation or
22 * warranty that such application will be suitable for the specified
23 * use without further testing or modification.
24 **********************************************************************/
32 #define LPC_USB LPC_USB0 // Use USB0
34 #define LPC_USB LPC_USB1 // Use USB1
36 #if defined ( __GNUC__ )
37 #define __packed __attribute__((__packed__))
40 #if defined ( __CC_ARM )
41 typedef __packed union {
42 #elif defined ( __GNUC__ )
43 typedef union __packed {
44 #elif defined ( __IAR_SYSTEMS_ICC__ )
49 #if defined ( __CC_ARM )
51 #elif defined ( __GNUC__ )
53 #elif defined ( __IAR_SYSTEMS_ICC__ )
60 #ifdef __IAR_SYSTEMS_ICC__
64 #ifdef __IAR_SYSTEMS_ICC__
69 /* bmRequestType.Dir */
70 #define REQUEST_HOST_TO_DEVICE 0
71 #define REQUEST_DEVICE_TO_HOST 1
73 /* bmRequestType.Type */
74 #define REQUEST_STANDARD 0
75 #define REQUEST_CLASS 1
76 #define REQUEST_VENDOR 2
77 #define REQUEST_RESERVED 3
79 /* bmRequestType.Recipient */
80 #define REQUEST_TO_DEVICE 0
81 #define REQUEST_TO_INTERFACE 1
82 #define REQUEST_TO_ENDPOINT 2
83 #define REQUEST_TO_OTHER 3
85 /* bmRequestType Definition */
86 #if defined ( __CC_ARM )
87 typedef __packed union _REQUEST_TYPE {
88 #elif defined ( __GNUC__ )
89 typedef union __packed _REQUEST_TYPE {
90 #elif defined ( __IAR_SYSTEMS_ICC__ )
92 typedef union _REQUEST_TYPE {
94 #if defined ( __CC_ARM )
96 #elif defined ( __GNUC__ )
98 #elif defined ( __IAR_SYSTEMS_ICC__ )
102 uint8_t Recipient : 5;
106 #ifdef __IAR_SYSTEMS_ICC__
111 #ifdef __IAR_SYSTEMS_ICC__
115 /* USB Standard Request Codes */
116 #define USB_REQUEST_GET_STATUS 0
117 #define USB_REQUEST_CLEAR_FEATURE 1
118 #define USB_REQUEST_SET_FEATURE 3
119 #define USB_REQUEST_SET_ADDRESS 5
120 #define USB_REQUEST_GET_DESCRIPTOR 6
121 #define USB_REQUEST_SET_DESCRIPTOR 7
122 #define USB_REQUEST_GET_CONFIGURATION 8
123 #define USB_REQUEST_SET_CONFIGURATION 9
124 #define USB_REQUEST_GET_INTERFACE 10
125 #define USB_REQUEST_SET_INTERFACE 11
126 #define USB_REQUEST_SYNC_FRAME 12
128 /* USB GET_STATUS Bit Values */
129 #define USB_GETSTATUS_SELF_POWERED 0x01
130 #define USB_GETSTATUS_REMOTE_WAKEUP 0x02
131 #define USB_GETSTATUS_ENDPOINT_STALL 0x01
133 /* USB Standard Feature selectors */
134 #define USB_FEATURE_ENDPOINT_STALL 0
135 #define USB_FEATURE_REMOTE_WAKEUP 1
136 #define USB_FEATURE_TEST_MODE 2
138 /* USB Default Control Pipe Setup Packet */
139 #if defined ( __CC_ARM )
140 typedef __packed struct _USB_SETUP_PACKET {
141 #elif defined ( __GNUC__ )
142 typedef struct __packed _USB_SETUP_PACKET {
143 #elif defined ( __IAR_SYSTEMS_ICC__ )
145 typedef struct _USB_SETUP_PACKET {
147 REQUEST_TYPE bmRequestType;
153 #ifdef __IAR_SYSTEMS_ICC__
158 /* USB Descriptor Types */
159 #define USB_DEVICE_DESCRIPTOR_TYPE 1
160 #define USB_CONFIGURATION_DESCRIPTOR_TYPE 2
161 #define USB_STRING_DESCRIPTOR_TYPE 3
162 #define USB_INTERFACE_DESCRIPTOR_TYPE 4
163 #define USB_ENDPOINT_DESCRIPTOR_TYPE 5
164 #define USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE 6
165 #define USB_OTHER_SPEED_CONFIG_DESCRIPTOR_TYPE 7
166 #define USB_INTERFACE_POWER_DESCRIPTOR_TYPE 8
167 #define USB_OTG_DESCRIPTOR_TYPE 9
168 #define USB_DEBUG_DESCRIPTOR_TYPE 10
169 #define USB_INTERFACE_ASSOCIATION_DESCRIPTOR_TYPE 11
171 /* USB Device Classes */
172 #define USB_DEVICE_CLASS_RESERVED 0x00
173 #define USB_DEVICE_CLASS_AUDIO 0x01
174 #define USB_DEVICE_CLASS_COMMUNICATIONS 0x02
175 #define USB_DEVICE_CLASS_HUMAN_INTERFACE 0x03
176 #define USB_DEVICE_CLASS_MONITOR 0x04
177 #define USB_DEVICE_CLASS_PHYSICAL_INTERFACE 0x05
178 #define USB_DEVICE_CLASS_POWER 0x06
179 #define USB_DEVICE_CLASS_PRINTER 0x07
180 #define USB_DEVICE_CLASS_STORAGE 0x08
181 #define USB_DEVICE_CLASS_HUB 0x09
182 #define USB_DEVICE_CLASS_MISCELLANEOUS 0xEF
183 #define USB_DEVICE_CLASS_VENDOR_SPECIFIC 0xFF
185 /* bmAttributes in Configuration Descriptor */
186 #define USB_CONFIG_POWERED_MASK 0x40
187 #define USB_CONFIG_BUS_POWERED 0x80
188 #define USB_CONFIG_SELF_POWERED 0xC0
189 #define USB_CONFIG_REMOTE_WAKEUP 0x20
191 /* bMaxPower in Configuration Descriptor */
192 #define USB_CONFIG_POWER_MA(mA) ((mA)/2)
194 /* bEndpointAddress in Endpoint Descriptor */
195 #define USB_ENDPOINT_DIRECTION_MASK 0x80
196 #define USB_ENDPOINT_OUT(addr) ((addr) | 0x00)
197 #define USB_ENDPOINT_IN(addr) ((addr) | 0x80)
199 /* bmAttributes in Endpoint Descriptor */
200 #define USB_ENDPOINT_TYPE_MASK 0x03
201 #define USB_ENDPOINT_TYPE_CONTROL 0x00
202 #define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01
203 #define USB_ENDPOINT_TYPE_BULK 0x02
204 #define USB_ENDPOINT_TYPE_INTERRUPT 0x03
205 #define USB_ENDPOINT_SYNC_MASK 0x0C
206 #define USB_ENDPOINT_SYNC_NO_SYNCHRONIZATION 0x00
207 #define USB_ENDPOINT_SYNC_ASYNCHRONOUS 0x04
208 #define USB_ENDPOINT_SYNC_ADAPTIVE 0x08
209 #define USB_ENDPOINT_SYNC_SYNCHRONOUS 0x0C
210 #define USB_ENDPOINT_USAGE_MASK 0x30
211 #define USB_ENDPOINT_USAGE_DATA 0x00
212 #define USB_ENDPOINT_USAGE_FEEDBACK 0x10
213 #define USB_ENDPOINT_USAGE_IMPLICIT_FEEDBACK 0x20
214 #define USB_ENDPOINT_USAGE_RESERVED 0x30
216 /* USB Standard Device Descriptor */
217 #if defined ( __CC_ARM )
218 typedef __packed struct _USB_DEVICE_DESCRIPTOR {
219 #elif defined ( __GNUC__ )
220 typedef struct __packed _USB_DEVICE_DESCRIPTOR {
221 #elif defined ( __IAR_SYSTEMS_ICC__ )
223 typedef struct _USB_DEVICE_DESCRIPTOR {
226 uint8_t bDescriptorType;
228 uint8_t bDeviceClass;
229 uint8_t bDeviceSubClass;
230 uint8_t bDeviceProtocol;
231 uint8_t bMaxPacketSize0;
235 uint8_t iManufacturer;
237 uint8_t iSerialNumber;
238 uint8_t bNumConfigurations;
239 } USB_DEVICE_DESCRIPTOR;
240 #ifdef __IAR_SYSTEMS_ICC__
244 /* USB 2.0 Device Qualifier Descriptor */
245 #if defined ( __CC_ARM )
246 typedef __packed struct _USB_DEVICE_QUALIFIER_DESCRIPTOR {
247 #elif defined ( __GNUC__ )
248 typedef struct __packed _USB_DEVICE_QUALIFIER_DESCRIPTOR {
249 #elif defined ( __IAR_SYSTEMS_ICC__ )
251 typedef struct _USB_DEVICE_QUALIFIER_DESCRIPTOR {
254 uint8_t bDescriptorType;
256 uint8_t bDeviceClass;
257 uint8_t bDeviceSubClass;
258 uint8_t bDeviceProtocol;
259 uint8_t bMaxPacketSize0;
260 uint8_t bNumConfigurations;
262 } USB_DEVICE_QUALIFIER_DESCRIPTOR;
263 #ifdef __IAR_SYSTEMS_ICC__
267 /* USB Standard Configuration Descriptor */
268 #if defined ( __CC_ARM )
269 typedef __packed struct _USB_CONFIGURATION_DESCRIPTOR {
270 #elif defined ( __GNUC__ )
271 typedef struct __packed _USB_CONFIGURATION_DESCRIPTOR {
272 #elif defined ( __IAR_SYSTEMS_ICC__ )
274 typedef struct _USB_CONFIGURATION_DESCRIPTOR {
277 uint8_t bDescriptorType;
278 uint16_t wTotalLength;
279 uint8_t bNumInterfaces;
280 uint8_t bConfigurationValue;
281 uint8_t iConfiguration;
282 uint8_t bmAttributes;
284 } USB_CONFIGURATION_DESCRIPTOR;
285 #ifdef __IAR_SYSTEMS_ICC__
289 /* USB Standard Interface Descriptor */
290 #if defined ( __CC_ARM )
291 typedef __packed struct _USB_INTERFACE_DESCRIPTOR {
292 #elif defined ( __GNUC__ )
293 typedef struct __packed _USB_INTERFACE_DESCRIPTOR {
294 #elif defined ( __IAR_SYSTEMS_ICC__ )
296 typedef struct _USB_INTERFACE_DESCRIPTOR {
299 uint8_t bDescriptorType;
300 uint8_t bInterfaceNumber;
301 uint8_t bAlternateSetting;
302 uint8_t bNumEndpoints;
303 uint8_t bInterfaceClass;
304 uint8_t bInterfaceSubClass;
305 uint8_t bInterfaceProtocol;
307 } USB_INTERFACE_DESCRIPTOR;
308 #ifdef __IAR_SYSTEMS_ICC__
312 /* USB Standard Endpoint Descriptor */
313 #if defined ( __CC_ARM )
314 typedef __packed struct _USB_ENDPOINT_DESCRIPTOR {
315 #elif defined ( __GNUC__ )
316 typedef struct __packed _USB_ENDPOINT_DESCRIPTOR {
317 #elif defined ( __IAR_SYSTEMS_ICC__ )
319 typedef struct _USB_ENDPOINT_DESCRIPTOR {
322 uint8_t bDescriptorType;
323 uint8_t bEndpointAddress;
324 uint8_t bmAttributes;
325 uint16_t wMaxPacketSize;
327 } USB_ENDPOINT_DESCRIPTOR;
328 #ifdef __IAR_SYSTEMS_ICC__
332 /* USB String Descriptor */
333 #if defined ( __CC_ARM )
334 typedef __packed struct _USB_STRING_DESCRIPTOR {
335 #elif defined ( __GNUC__ )
336 typedef struct __packed _USB_STRING_DESCRIPTOR {
337 #elif defined ( __IAR_SYSTEMS_ICC__ )
339 typedef struct _USB_STRING_DESCRIPTOR {
342 uint8_t bDescriptorType;
343 uint16_t bString/*[]*/;
344 } USB_STRING_DESCRIPTOR;
345 #ifdef __IAR_SYSTEMS_ICC__
349 /* USB Common Descriptor */
350 #if defined ( __CC_ARM )
351 typedef __packed struct _USB_COMMON_DESCRIPTOR {
352 #elif defined ( __GNUC__ )
353 typedef struct __packed _USB_COMMON_DESCRIPTOR {
354 #elif defined ( __IAR_SYSTEMS_ICC__ )
356 typedef struct _USB_COMMON_DESCRIPTOR {
359 uint8_t bDescriptorType;
360 } USB_COMMON_DESCRIPTOR;
362 /* USB Other Speed Configuration */
363 #if defined ( __CC_ARM )
364 typedef __packed struct _USB_OTHER_SPEED_CONFIGURATION {
365 #elif defined ( __GNUC__ )
366 typedef struct __packed _USB_OTHER_SPEED_CONFIGURATION {
367 #elif defined ( __IAR_SYSTEMS_ICC__ )
369 typedef struct _USB_OTHER_SPEED_CONFIGURATION {
373 uint8_t bDescriptorType;
374 uint16_t wTotalLength;
375 uint8_t bNumInterfaces;
376 uint8_t bConfigurationValue;
377 uint8_t IConfiguration;
378 uint8_t bmAttributes;
380 } USB_OTHER_SPEED_CONFIGURATION;
383 /* USB Endpoint Callback Events */
384 #define USB_EVT_SETUP 1 /* Setup Packet */
385 #define USB_EVT_OUT 2 /* OUT Packet */
386 #define USB_EVT_IN 3 /* IN Packet */
387 #define USB_EVT_OUT_NAK 4 /* OUT Packet - Not Acknowledged */
388 #define USB_EVT_IN_NAK 5 /* IN Packet - Not Acknowledged */
389 #define USB_EVT_OUT_STALL 6 /* OUT Packet - Stalled */
390 #define USB_EVT_IN_STALL 7 /* IN Packet - Stalled */
391 #define USB_EVT_OUT_DMA_EOT 8 /* DMA OUT EP - End of Transfer */
392 #define USB_EVT_IN_DMA_EOT 9 /* DMA IN EP - End of Transfer */
393 #define USB_EVT_OUT_DMA_NDR 10 /* DMA OUT EP - New Descriptor Request */
394 #define USB_EVT_IN_DMA_NDR 11 /* DMA IN EP - New Descriptor Request */
395 #define USB_EVT_OUT_DMA_ERR 12 /* DMA OUT EP - Error */
396 #define USB_EVT_IN_DMA_ERR 13 /* DMA IN EP - Error */
398 /* call back structure */
399 typedef struct _USB_INIT_
402 /* USB Device Events Callback Functions */
403 void (* USB_Power_Event)(uint32_t power);
404 void (* USB_Reset_Event)(void);
405 void (* USB_Suspend_Event)(void);
406 void (* USB_Resume_Event)(void);
407 void (* USB_WakeUp_Event)(void);
408 void (* USB_SOF_Event)(void);
409 void (* USB_Error_Event)(uint32_t error);
410 /* USB Core Events Callback Functions */
411 void (* USB_Configure_Event)(void);
412 void (* USB_Interface_Event)(void);
413 void (* USB_Feature_Event)(void);
414 /* USB Endpoint Events Callback Pointers */
415 void (* USB_P_EP[4])(uint32_t event);
418 #ifdef __IAR_SYSTEMS_ICC__
422 #endif /* __USB_H__ */