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