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;
133 PRE_PACK uint8_t POST_PACK B;
137 typedef union _REQUEST_TYPE REQUEST_TYPE;
143 #define USB_REQUEST_GET_STATUS 0
145 #define USB_REQUEST_CLEAR_FEATURE 1
147 #define USB_REQUEST_SET_FEATURE 3
149 #define USB_REQUEST_SET_ADDRESS 5
151 #define USB_REQUEST_GET_DESCRIPTOR 6
153 #define USB_REQUEST_SET_DESCRIPTOR 7
155 #define USB_REQUEST_GET_CONFIGURATION 8
157 #define USB_REQUEST_SET_CONFIGURATION 9
159 #define USB_REQUEST_GET_INTERFACE 10
161 #define USB_REQUEST_SET_INTERFACE 11
163 #define USB_REQUEST_SYNC_FRAME 12
170 #define USB_GETSTATUS_SELF_POWERED 0x01
172 #define USB_GETSTATUS_REMOTE_WAKEUP 0x02
174 #define USB_GETSTATUS_ENDPOINT_STALL 0x01
181 #define USB_FEATURE_ENDPOINT_STALL 0
183 #define USB_FEATURE_REMOTE_WAKEUP 1
185 #define USB_FEATURE_TEST_MODE 2
189 PRE_PACK
struct POST_PACK _USB_SETUP_PACKET
211 typedef struct _USB_SETUP_PACKET USB_SETUP_PACKET;
218 #define USB_DEVICE_DESCRIPTOR_TYPE 1
220 #define USB_CONFIGURATION_DESCRIPTOR_TYPE 2
222 #define USB_STRING_DESCRIPTOR_TYPE 3
224 #define USB_INTERFACE_DESCRIPTOR_TYPE 4
226 #define USB_ENDPOINT_DESCRIPTOR_TYPE 5
228 #define USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE 6
230 #define USB_OTHER_SPEED_CONFIG_DESCRIPTOR_TYPE 7
232 #define USB_INTERFACE_POWER_DESCRIPTOR_TYPE 8
234 #define USB_OTG_DESCRIPTOR_TYPE 9
236 #define USB_DEBUG_DESCRIPTOR_TYPE 10
238 #define USB_INTERFACE_ASSOCIATION_DESCRIPTOR_TYPE 11
245 #define USB_DEVICE_CLASS_RESERVED 0x00
247 #define USB_DEVICE_CLASS_AUDIO 0x01
249 #define USB_DEVICE_CLASS_COMMUNICATIONS 0x02
251 #define USB_DEVICE_CLASS_HUMAN_INTERFACE 0x03
253 #define USB_DEVICE_CLASS_MONITOR 0x04
255 #define USB_DEVICE_CLASS_PHYSICAL_INTERFACE 0x05
257 #define USB_DEVICE_CLASS_POWER 0x06
259 #define USB_DEVICE_CLASS_PRINTER 0x07
261 #define USB_DEVICE_CLASS_STORAGE 0x08
263 #define USB_DEVICE_CLASS_HUB 0x09
265 #define USB_DEVICE_CLASS_MISCELLANEOUS 0xEF
267 #define USB_DEVICE_CLASS_APP 0xFE
269 #define USB_DEVICE_CLASS_VENDOR_SPECIFIC 0xFF
276 #define USB_CONFIG_POWERED_MASK 0x40
278 #define USB_CONFIG_BUS_POWERED 0x80
280 #define USB_CONFIG_SELF_POWERED 0xC0
282 #define USB_CONFIG_REMOTE_WAKEUP 0x20
292 #define USB_ENDPOINT_DIRECTION_MASK 0x80
294 #define USB_ENDPOINT_OUT(addr) ((addr) | 0x00)
296 #define USB_ENDPOINT_IN(addr) ((addr) | 0x80)
303 #define USB_ENDPOINT_TYPE_MASK 0x03
305 #define USB_ENDPOINT_TYPE_CONTROL 0x00
307 #define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01
309 #define USB_ENDPOINT_TYPE_BULK 0x02
311 #define USB_ENDPOINT_TYPE_INTERRUPT 0x03
313 #define USB_ENDPOINT_SYNC_MASK 0x0C
315 #define USB_ENDPOINT_SYNC_NO_SYNCHRONIZATION 0x00
317 #define USB_ENDPOINT_SYNC_ASYNCHRONOUS 0x04
319 #define USB_ENDPOINT_SYNC_ADAPTIVE 0x08
321 #define USB_ENDPOINT_SYNC_SYNCHRONOUS 0x0C
323 #define USB_ENDPOINT_USAGE_MASK 0x30
325 #define USB_ENDPOINT_USAGE_DATA 0x00
327 #define USB_ENDPOINT_USAGE_FEEDBACK 0x10
329 #define USB_ENDPOINT_USAGE_IMPLICIT_FEEDBACK 0x20
331 #define USB_ENDPOINT_USAGE_RESERVED 0x30
335 #define USB_ENDPOINT_0_HS_MAXP 64
337 #define USB_ENDPOINT_0_LS_MAXP 8
339 #define USB_ENDPOINT_BULK_HS_MAXP 512
342 PRE_PACK
struct POST_PACK _USB_DEVICE_DESCRIPTOR
408 typedef struct _USB_DEVICE_DESCRIPTOR USB_DEVICE_DESCRIPTOR;
411 PRE_PACK
struct POST_PACK _USB_DEVICE_QUALIFIER_DESCRIPTOR
424 typedef struct _USB_DEVICE_QUALIFIER_DESCRIPTOR USB_DEVICE_QUALIFIER_DESCRIPTOR;
427 PRE_PACK
struct POST_PACK _USB_CONFIGURATION_DESCRIPTOR
484 typedef struct _USB_CONFIGURATION_DESCRIPTOR USB_CONFIGURATION_DESCRIPTOR;
487 PRE_PACK
struct POST_PACK _USB_INTERFACE_DESCRIPTOR
533 typedef struct _USB_INTERFACE_DESCRIPTOR USB_INTERFACE_DESCRIPTOR;
536 PRE_PACK
struct POST_PACK _USB_ENDPOINT_DESCRIPTOR
616 typedef struct _USB_ENDPOINT_DESCRIPTOR USB_ENDPOINT_DESCRIPTOR;
619 PRE_PACK
struct POST_PACK _USB_STRING_DESCRIPTOR
626 typedef struct _USB_STRING_DESCRIPTOR USB_STRING_DESCRIPTOR;
629 PRE_PACK
struct POST_PACK _USB_COMMON_DESCRIPTOR
635 typedef struct _USB_COMMON_DESCRIPTOR USB_COMMON_DESCRIPTOR;
638 PRE_PACK
struct POST_PACK _USB_OTHER_SPEED_CONFIGURATION
645 uint8_t IConfiguration;
650 typedef struct _USB_OTHER_SPEED_CONFIGURATION USB_OTHER_SPEED_CONFIGURATION;
657 #define WBVAL(x) ((x) & 0xFF),(((x) >> 8) & 0xFF)
658 #define B3VAL(x) ((x) & 0xFF),(((x) >> 8) & 0xFF),(((x) >> 16) & 0xFF)
660 #define USB_DEVICE_DESC_SIZE (sizeof(USB_DEVICE_DESCRIPTOR))
661 #define USB_CONFIGUARTION_DESC_SIZE (sizeof(USB_CONFIGURATION_DESCRIPTOR))
662 #define USB_INTERFACE_DESC_SIZE (sizeof(USB_INTERFACE_DESCRIPTOR))
663 #define USB_ENDPOINT_DESC_SIZE (sizeof(USB_ENDPOINT_DESCRIPTOR))
664 #define USB_DEVICE_QUALI_SIZE (sizeof(USB_DEVICE_QUALIFIER_DESCRIPTOR))
665 #define USB_OTHER_SPEED_CONF_SIZE (sizeof(USB_OTHER_SPEED_CONFIGURATION))