56 #define POST_PACK __attribute__((__packed__))
57 #define ALIGNED(n) __attribute__((aligned (n)))
59 #define PRE_PACK __packed
61 #define ALIGNED(n) __align(n)
62 #elif defined(__ICCARM__)
63 #define PRE_PACK __packed
68 PRE_PACK
struct POST_PACK _WB_T
74 typedef struct _WB_T WB_T;
79 PRE_PACK uint16_t POST_PACK W;
83 typedef union __WORD_BYTE WORD_BYTE;
89 #define REQUEST_HOST_TO_DEVICE 0
91 #define REQUEST_DEVICE_TO_HOST 1
98 #define REQUEST_STANDARD 0
100 #define REQUEST_CLASS 1
102 #define REQUEST_VENDOR 2
104 #define REQUEST_RESERVED 3
111 #define REQUEST_TO_DEVICE 0
113 #define REQUEST_TO_INTERFACE 1
115 #define REQUEST_TO_ENDPOINT 2
117 #define REQUEST_TO_OTHER 3
121 PRE_PACK
struct POST_PACK _BM_T
123 uint8_t Recipient : 5;
128 typedef struct _BM_T BM_T;
138 typedef union _REQUEST_TYPE REQUEST_TYPE;
144 #define USB_REQUEST_GET_STATUS 0
146 #define USB_REQUEST_CLEAR_FEATURE 1
148 #define USB_REQUEST_SET_FEATURE 3
150 #define USB_REQUEST_SET_ADDRESS 5
152 #define USB_REQUEST_GET_DESCRIPTOR 6
154 #define USB_REQUEST_SET_DESCRIPTOR 7
156 #define USB_REQUEST_GET_CONFIGURATION 8
158 #define USB_REQUEST_SET_CONFIGURATION 9
160 #define USB_REQUEST_GET_INTERFACE 10
162 #define USB_REQUEST_SET_INTERFACE 11
164 #define USB_REQUEST_SYNC_FRAME 12
171 #define USB_GETSTATUS_SELF_POWERED 0x01
173 #define USB_GETSTATUS_REMOTE_WAKEUP 0x02
175 #define USB_GETSTATUS_ENDPOINT_STALL 0x01
182 #define USB_FEATURE_ENDPOINT_STALL 0
184 #define USB_FEATURE_REMOTE_WAKEUP 1
186 #define USB_FEATURE_TEST_MODE 2
190 PRE_PACK
struct POST_PACK _USB_SETUP_PACKET
212 typedef struct _USB_SETUP_PACKET USB_SETUP_PACKET;
219 #define USB_DEVICE_DESCRIPTOR_TYPE 1
221 #define USB_CONFIGURATION_DESCRIPTOR_TYPE 2
223 #define USB_STRING_DESCRIPTOR_TYPE 3
225 #define USB_INTERFACE_DESCRIPTOR_TYPE 4
227 #define USB_ENDPOINT_DESCRIPTOR_TYPE 5
229 #define USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE 6
231 #define USB_OTHER_SPEED_CONFIG_DESCRIPTOR_TYPE 7
233 #define USB_INTERFACE_POWER_DESCRIPTOR_TYPE 8
235 #define USB_OTG_DESCRIPTOR_TYPE 9
237 #define USB_DEBUG_DESCRIPTOR_TYPE 10
239 #define USB_INTERFACE_ASSOCIATION_DESCRIPTOR_TYPE 11
246 #define USB_DEVICE_CLASS_RESERVED 0x00
248 #define USB_DEVICE_CLASS_AUDIO 0x01
250 #define USB_DEVICE_CLASS_COMMUNICATIONS 0x02
252 #define USB_DEVICE_CLASS_HUMAN_INTERFACE 0x03
254 #define USB_DEVICE_CLASS_MONITOR 0x04
256 #define USB_DEVICE_CLASS_PHYSICAL_INTERFACE 0x05
258 #define USB_DEVICE_CLASS_POWER 0x06
260 #define USB_DEVICE_CLASS_PRINTER 0x07
262 #define USB_DEVICE_CLASS_STORAGE 0x08
264 #define USB_DEVICE_CLASS_HUB 0x09
266 #define USB_DEVICE_CLASS_MISCELLANEOUS 0xEF
268 #define USB_DEVICE_CLASS_APP 0xFE
270 #define USB_DEVICE_CLASS_VENDOR_SPECIFIC 0xFF
277 #define USB_CONFIG_POWERED_MASK 0x40
279 #define USB_CONFIG_BUS_POWERED 0x80
281 #define USB_CONFIG_SELF_POWERED 0xC0
283 #define USB_CONFIG_REMOTE_WAKEUP 0x20
293 #define USB_ENDPOINT_DIRECTION_MASK 0x80
295 #define USB_ENDPOINT_OUT(addr) ((addr) | 0x00)
297 #define USB_ENDPOINT_IN(addr) ((addr) | 0x80)
304 #define USB_ENDPOINT_TYPE_MASK 0x03
306 #define USB_ENDPOINT_TYPE_CONTROL 0x00
308 #define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01
310 #define USB_ENDPOINT_TYPE_BULK 0x02
312 #define USB_ENDPOINT_TYPE_INTERRUPT 0x03
314 #define USB_ENDPOINT_SYNC_MASK 0x0C
316 #define USB_ENDPOINT_SYNC_NO_SYNCHRONIZATION 0x00
318 #define USB_ENDPOINT_SYNC_ASYNCHRONOUS 0x04
320 #define USB_ENDPOINT_SYNC_ADAPTIVE 0x08
322 #define USB_ENDPOINT_SYNC_SYNCHRONOUS 0x0C
324 #define USB_ENDPOINT_USAGE_MASK 0x30
326 #define USB_ENDPOINT_USAGE_DATA 0x00
328 #define USB_ENDPOINT_USAGE_FEEDBACK 0x10
330 #define USB_ENDPOINT_USAGE_IMPLICIT_FEEDBACK 0x20
332 #define USB_ENDPOINT_USAGE_RESERVED 0x30
336 #define USB_ENDPOINT_0_HS_MAXP 64
338 #define USB_ENDPOINT_0_LS_MAXP 8
340 #define USB_ENDPOINT_BULK_HS_MAXP 512
343 PRE_PACK
struct POST_PACK _USB_DEVICE_DESCRIPTOR
409 typedef struct _USB_DEVICE_DESCRIPTOR USB_DEVICE_DESCRIPTOR;
412 PRE_PACK
struct POST_PACK _USB_DEVICE_QUALIFIER_DESCRIPTOR
425 typedef struct _USB_DEVICE_QUALIFIER_DESCRIPTOR USB_DEVICE_QUALIFIER_DESCRIPTOR;
428 PRE_PACK
struct POST_PACK _USB_CONFIGURATION_DESCRIPTOR
485 typedef struct _USB_CONFIGURATION_DESCRIPTOR USB_CONFIGURATION_DESCRIPTOR;
488 PRE_PACK
struct POST_PACK _USB_INTERFACE_DESCRIPTOR
534 typedef struct _USB_INTERFACE_DESCRIPTOR USB_INTERFACE_DESCRIPTOR;
537 PRE_PACK
struct POST_PACK _USB_ENDPOINT_DESCRIPTOR
617 typedef struct _USB_ENDPOINT_DESCRIPTOR USB_ENDPOINT_DESCRIPTOR;
620 PRE_PACK
struct POST_PACK _USB_STRING_DESCRIPTOR
627 typedef struct _USB_STRING_DESCRIPTOR USB_STRING_DESCRIPTOR;
630 PRE_PACK
struct POST_PACK _USB_COMMON_DESCRIPTOR
636 typedef struct _USB_COMMON_DESCRIPTOR USB_COMMON_DESCRIPTOR;
639 PRE_PACK
struct POST_PACK _USB_OTHER_SPEED_CONFIGURATION
646 uint8_t IConfiguration;
651 typedef struct _USB_OTHER_SPEED_CONFIGURATION USB_OTHER_SPEED_CONFIGURATION;
658 #define WBVAL(x) ((x) & 0xFF),(((x) >> 8) & 0xFF)
659 #define B3VAL(x) ((x) & 0xFF),(((x) >> 8) & 0xFF),(((x) >> 16) & 0xFF)
661 #define USB_DEVICE_DESC_SIZE (sizeof(USB_DEVICE_DESCRIPTOR))
662 #define USB_CONFIGUARTION_DESC_SIZE (sizeof(USB_CONFIGURATION_DESCRIPTOR))
663 #define USB_INTERFACE_DESC_SIZE (sizeof(USB_INTERFACE_DESCRIPTOR))
664 #define USB_ENDPOINT_DESC_SIZE (sizeof(USB_ENDPOINT_DESCRIPTOR))
665 #define USB_DEVICE_QUALI_SIZE (sizeof(USB_DEVICE_QUALIFIER_DESCRIPTOR))
666 #define USB_OTHER_SPEED_CONF_SIZE (sizeof(USB_OTHER_SPEED_CONFIGURATION))