]> git.sur5r.net Git - freertos/blob - FreeRTOS-Plus/Demo/FreeRTOS_Plus_UDP_and_CLI_LPC1830_GCC/ThirdParty/USB_CDC/include/usb.h
629a7a0361444efac947ae9def6a2687b3f71761
[freertos] / FreeRTOS-Plus / Demo / FreeRTOS_Plus_UDP_and_CLI_LPC1830_GCC / ThirdParty / USB_CDC / include / usb.h
1 /**********************************************************************
2 * $Id$          usb.h           2011-06-02
3 *//**
4 * @file         usb.h
5 * @brief        USB Definitions
6 * @version      1.0
7 * @date         02. June. 2011
8 * @author       NXP MCU SW Application Team
9 *
10 * Copyright(C) 2011, NXP Semiconductor
11 * All rights reserved.
12 *
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 **********************************************************************/
25
26 #ifndef __USB_H__
27 #define __USB_H__
28
29 #include "usbcfg.h"
30
31 #ifdef USE_USB0
32 #define LPC_USB LPC_USB0        // Use USB0
33 #else
34 #define LPC_USB LPC_USB1        // Use USB1
35 #endif
36 #if defined   (  __GNUC__  )
37 #define __packed __attribute__((__packed__))
38 #endif
39
40 #if defined     (  __CC_ARM  )
41 typedef __packed union {
42 #elif defined   (  __GNUC__  )
43 typedef union __packed {
44 #elif defined   (  __IAR_SYSTEMS_ICC__  )
45 #pragma pack(1)
46 typedef union {
47 #endif
48   uint16_t W;
49 #if defined     (  __CC_ARM  )
50   __packed struct {
51 #elif defined   (  __GNUC__  )
52   struct __packed {
53 #elif defined   (  __IAR_SYSTEMS_ICC__  )
54 #pragma pack(1)
55   struct {
56 #endif
57     uint8_t L;
58     uint8_t H;
59   } WB;
60 #ifdef __IAR_SYSTEMS_ICC__
61 #pragma pack()
62 #endif
63 } WORD_BYTE;
64 #ifdef __IAR_SYSTEMS_ICC__
65 #pragma pack()
66 #endif
67
68
69 /* bmRequestType.Dir */
70 #define REQUEST_HOST_TO_DEVICE     0
71 #define REQUEST_DEVICE_TO_HOST     1
72
73 /* bmRequestType.Type */
74 #define REQUEST_STANDARD           0
75 #define REQUEST_CLASS              1
76 #define REQUEST_VENDOR             2
77 #define REQUEST_RESERVED           3
78
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
84
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__  )
91 #pragma pack(1)
92 typedef union _REQUEST_TYPE {
93 #endif
94 #if defined     (  __CC_ARM  )
95         __packed struct _BM {
96 #elif defined   (  __GNUC__  )
97         struct __packed _BM {
98 #elif defined   (  __IAR_SYSTEMS_ICC__  )
99 #pragma pack(1)
100         struct _BM {
101 #endif
102     uint8_t Recipient : 5;
103     uint8_t Type      : 2;
104     uint8_t Dir       : 1;
105   } BM;
106 #ifdef __IAR_SYSTEMS_ICC__
107 #pragma pack()
108 #endif
109   uint8_t B;
110 } REQUEST_TYPE;
111 #ifdef __IAR_SYSTEMS_ICC__
112 #pragma pack()
113 #endif
114
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
127
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
132
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
137
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__  )
144 #pragma pack(1)
145 typedef struct _USB_SETUP_PACKET {
146 #endif
147   REQUEST_TYPE bmRequestType;
148   uint8_t         bRequest;
149   WORD_BYTE    wValue;
150   WORD_BYTE    wIndex;
151   uint16_t         wLength;
152 } USB_SETUP_PACKET;
153 #ifdef __IAR_SYSTEMS_ICC__
154 #pragma pack()
155 #endif
156
157
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
170
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
184
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
190
191 /* bMaxPower in Configuration Descriptor */
192 #define USB_CONFIG_POWER_MA(mA)                ((mA)/2)
193
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)
198
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
215
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__  )
222 #pragma pack(1)
223 typedef struct _USB_DEVICE_DESCRIPTOR {
224 #endif
225   uint8_t  bLength;
226   uint8_t  bDescriptorType;
227   uint16_t  bcdUSB;
228   uint8_t  bDeviceClass;
229   uint8_t  bDeviceSubClass;
230   uint8_t  bDeviceProtocol;
231   uint8_t  bMaxPacketSize0;
232   uint16_t  idVendor;
233   uint16_t  idProduct;
234   uint16_t  bcdDevice;
235   uint8_t  iManufacturer;
236   uint8_t  iProduct;
237   uint8_t  iSerialNumber;
238   uint8_t  bNumConfigurations;
239 } USB_DEVICE_DESCRIPTOR;
240 #ifdef __IAR_SYSTEMS_ICC__
241 #pragma pack()
242 #endif
243
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__  )
250 #pragma pack(1)
251 typedef struct _USB_DEVICE_QUALIFIER_DESCRIPTOR {
252 #endif
253   uint8_t  bLength;
254   uint8_t  bDescriptorType;
255   uint16_t  bcdUSB;
256   uint8_t  bDeviceClass;
257   uint8_t  bDeviceSubClass;
258   uint8_t  bDeviceProtocol;
259   uint8_t  bMaxPacketSize0;
260   uint8_t  bNumConfigurations;
261   uint8_t  bReserved;
262 } USB_DEVICE_QUALIFIER_DESCRIPTOR;
263 #ifdef __IAR_SYSTEMS_ICC__
264 #pragma pack()
265 #endif
266
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__  )
273 #pragma pack(1)
274 typedef struct _USB_CONFIGURATION_DESCRIPTOR {
275 #endif
276   uint8_t  bLength;
277   uint8_t  bDescriptorType;
278   uint16_t  wTotalLength;
279   uint8_t  bNumInterfaces;
280   uint8_t  bConfigurationValue;
281   uint8_t  iConfiguration;
282   uint8_t  bmAttributes;
283   uint8_t  bMaxPower;
284 } USB_CONFIGURATION_DESCRIPTOR;
285 #ifdef __IAR_SYSTEMS_ICC__
286 #pragma pack()
287 #endif
288
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__  )
295 #pragma pack(1)
296 typedef struct _USB_INTERFACE_DESCRIPTOR {
297 #endif
298   uint8_t  bLength;
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;
306   uint8_t  iInterface;
307 } USB_INTERFACE_DESCRIPTOR;
308 #ifdef __IAR_SYSTEMS_ICC__
309 #pragma pack()
310 #endif
311
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__  )
318 #pragma pack(1)
319 typedef struct _USB_ENDPOINT_DESCRIPTOR {
320 #endif
321   uint8_t  bLength;
322   uint8_t  bDescriptorType;
323   uint8_t  bEndpointAddress;
324   uint8_t  bmAttributes;
325   uint16_t  wMaxPacketSize;
326   uint8_t  bInterval;
327 } USB_ENDPOINT_DESCRIPTOR;
328 #ifdef __IAR_SYSTEMS_ICC__
329 #pragma pack()
330 #endif
331
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__  )
338 #pragma pack(1)
339 typedef struct _USB_STRING_DESCRIPTOR {
340 #endif
341   uint8_t  bLength;
342   uint8_t  bDescriptorType;
343   uint16_t  bString/*[]*/;
344 } USB_STRING_DESCRIPTOR;
345 #ifdef __IAR_SYSTEMS_ICC__
346 #pragma pack()
347 #endif
348
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__  )
355 #pragma pack(1)
356 typedef struct _USB_COMMON_DESCRIPTOR {
357 #endif
358   uint8_t  bLength;
359   uint8_t  bDescriptorType;
360 } USB_COMMON_DESCRIPTOR;
361
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__  )
368 #pragma pack(1)
369 typedef struct _USB_OTHER_SPEED_CONFIGURATION {
370 #endif
371
372   uint8_t  bLength;
373   uint8_t  bDescriptorType;
374   uint16_t wTotalLength;
375   uint8_t  bNumInterfaces;
376   uint8_t  bConfigurationValue;
377   uint8_t  IConfiguration;
378   uint8_t  bmAttributes;
379   uint8_t  bMaxPower;
380 } USB_OTHER_SPEED_CONFIGURATION;
381
382
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 */
397
398 /* call back structure */
399 typedef struct _USB_INIT_
400 {
401   uint32_t ep0_maxp;
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);
416 } LPC_USBDRV_INIT_T;
417
418 #ifdef __IAR_SYSTEMS_ICC__
419 #pragma pack()
420 #endif
421
422 #endif  /* __USB_H__ */