ec4916e6da69634a45faaa957b7ccb3e1dba2e10
[rapper.git] / new_cmsis / usb / usb.h
1 /*----------------------------------------------------------------------------
2  *      U S B  -  K e r n e l
3  *----------------------------------------------------------------------------
4  * Name:    usb.h
5  * Purpose: USB Definitions
6  * Version: V1.20
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.
15  *
16  * Copyright (c) 2009 Keil - An ARM Company. All rights reserved.
17  *---------------------------------------------------------------------------*/
18
19 #ifndef __USB_H__
20 #define __USB_H__
21 #include "lpc_types.h"
22
23 #if defined   (  __GNUC__  )
24 #define __packed __attribute__((__packed__))
25 #endif
26
27 #if defined     (  __CC_ARM  )
28 typedef __packed union {
29 #elif defined   (  __GNUC__  )
30 typedef union __packed {
31 #elif defined   (  __IAR_SYSTEMS_ICC__  )
32 #pragma pack(1)
33 typedef union {
34 #endif
35   uint16_t W;
36 #if defined     (  __CC_ARM  )
37   __packed struct {
38 #elif defined   (  __GNUC__  )
39   struct __packed {
40 #elif defined   (  __IAR_SYSTEMS_ICC__  )
41 #pragma pack(1)
42   struct {
43 #endif
44     uint8_t L;
45     uint8_t H;
46   } WB;
47 #ifdef __IAR_SYSTEMS_ICC__
48 #pragma pack()
49 #endif
50 } WORD_BYTE;
51 #ifdef __IAR_SYSTEMS_ICC__
52 #pragma pack()
53 #endif
54
55
56 /* bmRequestType.Dir */
57 #define REQUEST_HOST_TO_DEVICE     0
58 #define REQUEST_DEVICE_TO_HOST     1
59
60 /* bmRequestType.Type */
61 #define REQUEST_STANDARD           0
62 #define REQUEST_CLASS              1
63 #define REQUEST_VENDOR             2
64 #define REQUEST_RESERVED           3
65
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
71
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__  )
78 #pragma pack(1)
79 typedef union _REQUEST_TYPE {
80 #endif
81 #if defined     (  __CC_ARM  )
82         __packed struct _BM {
83 #elif defined   (  __GNUC__  )
84         struct __packed _BM {
85 #elif defined   (  __IAR_SYSTEMS_ICC__  )
86 #pragma pack(1)
87         struct _BM {
88 #endif
89     uint8_t Recipient : 5;
90     uint8_t Type      : 2;
91     uint8_t Dir       : 1;
92   } BM;
93 #ifdef __IAR_SYSTEMS_ICC__
94 #pragma pack()
95 #endif
96   uint8_t B;
97 } REQUEST_TYPE;
98 #ifdef __IAR_SYSTEMS_ICC__
99 #pragma pack()
100 #endif
101
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
114
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
119
120 /* USB Standard Feature selectors */
121 #define USB_FEATURE_ENDPOINT_STALL             0
122 #define USB_FEATURE_REMOTE_WAKEUP              1
123
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__  )
130 #pragma pack(1)
131 typedef struct _USB_SETUP_PACKET {
132 #endif
133   REQUEST_TYPE bmRequestType;
134   uint8_t         bRequest;
135   WORD_BYTE    wValue;
136   WORD_BYTE    wIndex;
137   uint16_t         wLength;
138 } USB_SETUP_PACKET;
139 #ifdef __IAR_SYSTEMS_ICC__
140 #pragma pack()
141 #endif
142
143
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
156
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
170
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
176
177 /* bMaxPower in Configuration Descriptor */
178 #define USB_CONFIG_POWER_MA(mA)                ((mA)/2)
179
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)
184
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
201
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__  )
208 #pragma pack(1)
209 typedef struct _USB_DEVICE_DESCRIPTOR {
210 #endif
211   uint8_t  bLength;
212   uint8_t  bDescriptorType;
213   uint16_t  bcdUSB;
214   uint8_t  bDeviceClass;
215   uint8_t  bDeviceSubClass;
216   uint8_t  bDeviceProtocol;
217   uint8_t  bMaxPacketSize0;
218   uint16_t  idVendor;
219   uint16_t  idProduct;
220   uint16_t  bcdDevice;
221   uint8_t  iManufacturer;
222   uint8_t  iProduct;
223   uint8_t  iSerialNumber;
224   uint8_t  bNumConfigurations;
225 } USB_DEVICE_DESCRIPTOR;
226 #ifdef __IAR_SYSTEMS_ICC__
227 #pragma pack()
228 #endif
229
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__  )
236 #pragma pack(1)
237 typedef struct _USB_DEVICE_QUALIFIER_DESCRIPTOR {
238 #endif
239   uint8_t  bLength;
240   uint8_t  bDescriptorType;
241   uint16_t  bcdUSB;
242   uint8_t  bDeviceClass;
243   uint8_t  bDeviceSubClass;
244   uint8_t  bDeviceProtocol;
245   uint8_t  bMaxPacketSize0;
246   uint8_t  bNumConfigurations;
247   uint8_t  bReserved;
248 } USB_DEVICE_QUALIFIER_DESCRIPTOR;
249 #ifdef __IAR_SYSTEMS_ICC__
250 #pragma pack()
251 #endif
252
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__  )
258 #pragma pack(1)
259 typedef struct _USB_CONFIGURATION_DESCRIPTOR {
260 #endif
261   uint8_t  bLength;
262   uint8_t  bDescriptorType;
263   uint16_t  wTotalLength;
264   uint8_t  bNumInterfaces;
265   uint8_t  bConfigurationValue;
266   uint8_t  iConfiguration;
267   uint8_t  bmAttributes;
268   uint8_t  bMaxPower;
269 } USB_CONFIGURATION_DESCRIPTOR;
270 #ifdef __IAR_SYSTEMS_ICC__
271 #pragma pack()
272 #endif
273
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__  )
280 #pragma pack(1)
281 typedef struct _USB_INTERFACE_DESCRIPTOR {
282 #endif
283   uint8_t  bLength;
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;
291   uint8_t  iInterface;
292 } USB_INTERFACE_DESCRIPTOR;
293 #ifdef __IAR_SYSTEMS_ICC__
294 #pragma pack()
295 #endif
296
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__  )
303 #pragma pack(1)
304 typedef struct _USB_ENDPOINT_DESCRIPTOR {
305 #endif
306   uint8_t  bLength;
307   uint8_t  bDescriptorType;
308   uint8_t  bEndpointAddress;
309   uint8_t  bmAttributes;
310   uint16_t  wMaxPacketSize;
311   uint8_t  bInterval;
312 } USB_ENDPOINT_DESCRIPTOR;
313 #ifdef __IAR_SYSTEMS_ICC__
314 #pragma pack()
315 #endif
316
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__  )
323 #pragma pack(1)
324 typedef struct _USB_STRING_DESCRIPTOR {
325 #endif
326   uint8_t  bLength;
327   uint8_t  bDescriptorType;
328   uint16_t  bString/*[]*/;
329 } USB_STRING_DESCRIPTOR;
330 #ifdef __IAR_SYSTEMS_ICC__
331 #pragma pack()
332 #endif
333
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__  )
340 #pragma pack(1)
341 typedef struct _USB_COMMON_DESCRIPTOR {
342 #endif
343   uint8_t  bLength;
344   uint8_t  bDescriptorType;
345 } USB_COMMON_DESCRIPTOR;
346 #ifdef __IAR_SYSTEMS_ICC__
347 #pragma pack()
348 #endif
349
350
351
352 #endif  /* __USB_H__ */