17#define USB_SPEED_FULL (0x00U)
18#define USB_SPEED_LOW (0x01U)
19#define USB_SPEED_HIGH (0x02U)
20#define USB_SPEED_SUPER (0x04U)
23typedef struct _usb_setup_struct
25 uint8_t bmRequestType;
33#define USB_ENDPOINT_CONTROL (0x00U)
34#define USB_ENDPOINT_ISOCHRONOUS (0x01U)
35#define USB_ENDPOINT_BULK (0x02U)
36#define USB_ENDPOINT_INTERRUPT (0x03U)
43#define USB_DESCRIPTOR_LENGTH_DEVICE (0x12U)
44#define USB_DESCRIPTOR_LENGTH_CONFIGURE (0x09U)
45#define USB_DESCRIPTOR_LENGTH_INTERFACE (0x09U)
46#define USB_DESCRIPTOR_LENGTH_ENDPOINT (0x07U)
47#define USB_DESCRIPTOR_LENGTH_ENDPOINT_COMPANION (0x06U)
48#define USB_DESCRIPTOR_LENGTH_DEVICE_QUALITIER (0x0AU)
49#define USB_DESCRIPTOR_LENGTH_OTG_DESCRIPTOR (5U)
50#define USB_DESCRIPTOR_LENGTH_BOS_DESCRIPTOR (5U)
51#define USB_DESCRIPTOR_LENGTH_DEVICE_CAPABILITY_USB20_EXTENSION (0x07U)
52#define USB_DESCRIPTOR_LENGTH_DEVICE_CAPABILITY_SUPERSPEED (0x0AU)
55#define USB_DESCRIPTOR_TYPE_DEVICE_CAPABILITY_WIRELESS (0x01U)
56#define USB_DESCRIPTOR_TYPE_DEVICE_CAPABILITY_USB20_EXTENSION (0x02U)
57#define USB_DESCRIPTOR_TYPE_DEVICE_CAPABILITY_SUPERSPEED (0x03U)
60#define USB_DESCRIPTOR_TYPE_DEVICE (0x01U)
61#define USB_DESCRIPTOR_TYPE_CONFIGURE (0x02U)
62#define USB_DESCRIPTOR_TYPE_STRING (0x03U)
63#define USB_DESCRIPTOR_TYPE_INTERFACE (0x04U)
64#define USB_DESCRIPTOR_TYPE_ENDPOINT (0x05U)
65#define USB_DESCRIPTOR_TYPE_DEVICE_QUALITIER (0x06U)
66#define USB_DESCRIPTOR_TYPE_OTHER_SPEED_CONFIGURATION (0x07U)
67#define USB_DESCRIPTOR_TYPE_INTERFAACE_POWER (0x08U)
68#define USB_DESCRIPTOR_TYPE_OTG (0x09U)
69#define USB_DESCRIPTOR_TYPE_INTERFACE_ASSOCIATION (0x0BU)
70#define USB_DESCRIPTOR_TYPE_BOS (0x0F)
71#define USB_DESCRIPTOR_TYPE_DEVICE_CAPABILITY (0x10)
73#define USB_DESCRIPTOR_TYPE_HID (0x21U)
74#define USB_DESCRIPTOR_TYPE_HID_REPORT (0x22U)
75#define USB_DESCRIPTOR_TYPE_HID_PHYSICAL (0x23U)
77#define USB_DESCRIPTOR_TYPE_ENDPOINT_COMPANION (0x30U)
80#define USB_REQUEST_TYPE_DIR_MASK (0x80U)
81#define USB_REQUEST_TYPE_DIR_SHIFT (7U)
82#define USB_REQUEST_TYPE_DIR_OUT (0x00U)
83#define USB_REQUEST_TYPE_DIR_IN (0x80U)
85#define USB_REQUEST_TYPE_TYPE_MASK (0x60U)
86#define USB_REQUEST_TYPE_TYPE_SHIFT (5U)
87#define USB_REQUEST_TYPE_TYPE_STANDARD (0U)
88#define USB_REQUEST_TYPE_TYPE_CLASS (0x20U)
89#define USB_REQUEST_TYPE_TYPE_VENDOR (0x40U)
91#define USB_REQUEST_TYPE_RECIPIENT_MASK (0x1FU)
92#define USB_REQUEST_TYPE_RECIPIENT_SHIFT (0U)
93#define USB_REQUEST_TYPE_RECIPIENT_DEVICE (0x00U)
94#define USB_REQUEST_TYPE_RECIPIENT_INTERFACE (0x01U)
95#define USB_REQUEST_TYPE_RECIPIENT_ENDPOINT (0x02U)
96#define USB_REQUEST_TYPE_RECIPIENT_OTHER (0x03U)
99#define USB_REQUEST_STANDARD_GET_STATUS (0x00U)
100#define USB_REQUEST_STANDARD_CLEAR_FEATURE (0x01U)
101#define USB_REQUEST_STANDARD_SET_FEATURE (0x03U)
102#define USB_REQUEST_STANDARD_SET_ADDRESS (0x05U)
103#define USB_REQUEST_STANDARD_GET_DESCRIPTOR (0x06U)
104#define USB_REQUEST_STANDARD_SET_DESCRIPTOR (0x07U)
105#define USB_REQUEST_STANDARD_GET_CONFIGURATION (0x08U)
106#define USB_REQUEST_STANDARD_SET_CONFIGURATION (0x09U)
107#define USB_REQUEST_STANDARD_GET_INTERFACE (0x0AU)
108#define USB_REQUEST_STANDARD_SET_INTERFACE (0x0BU)
109#define USB_REQUEST_STANDARD_SYNCH_FRAME (0x0CU)
112#define USB_REQUEST_STANDARD_GET_STATUS_DEVICE_SELF_POWERED_SHIFT (0U)
113#define USB_REQUEST_STANDARD_GET_STATUS_DEVICE_REMOTE_WARKUP_SHIFT (1U)
115#define USB_REQUEST_STANDARD_GET_STATUS_ENDPOINT_HALT_MASK (0x01U)
116#define USB_REQUEST_STANDARD_GET_STATUS_ENDPOINT_HALT_SHIFT (0U)
118#define USB_REQUEST_STANDARD_GET_STATUS_OTG_STATUS_SELECTOR (0xF000U)
121#define USB_REQUEST_STANDARD_FEATURE_SELECTOR_ENDPOINT_HALT (0U)
122#define USB_REQUEST_STANDARD_FEATURE_SELECTOR_DEVICE_REMOTE_WAKEUP (1U)
123#define USB_REQUEST_STANDARD_FEATURE_SELECTOR_DEVICE_TEST_MODE (2U)
124#define USB_REQUEST_STANDARD_FEATURE_SELECTOR_B_HNP_ENABLE (3U)
125#define USB_REQUEST_STANDARD_FEATURE_SELECTOR_A_HNP_SUPPORT (4U)
126#define USB_REQUEST_STANDARD_FEATURE_SELECTOR_A_ALT_HNP_SUPPORT (5U)
129#define USB_DESCRIPTOR_CONFIGURE_ATTRIBUTE_D7_MASK (0x80U)
130#define USB_DESCRIPTOR_CONFIGURE_ATTRIBUTE_D7_SHIFT (7U)
132#define USB_DESCRIPTOR_CONFIGURE_ATTRIBUTE_SELF_POWERED_MASK (0x40U)
133#define USB_DESCRIPTOR_CONFIGURE_ATTRIBUTE_SELF_POWERED_SHIFT (6U)
135#define USB_DESCRIPTOR_CONFIGURE_ATTRIBUTE_REMOTE_WAKEUP_MASK (0x20U)
136#define USB_DESCRIPTOR_CONFIGURE_ATTRIBUTE_REMOTE_WAKEUP_SHIFT (5U)
139#define USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_MASK (0x80U)
140#define USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT (7U)
141#define USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_OUT (0U)
142#define USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_IN (0x80U)
144#define USB_DESCRIPTOR_ENDPOINT_ADDRESS_NUMBER_MASK (0x0FU)
145#define USB_DESCRIPTOR_ENDPOINT_ADDRESS_NUMBER_SHFIT (0U)
147#define USB_DESCRIPTOR_ENDPOINT_ATTRIBUTE_TYPE_MASK (0x03U)
148#define USB_DESCRIPTOR_ENDPOINT_ATTRIBUTE_NUMBER_SHFIT (0U)
150#define USB_DESCRIPTOR_ENDPOINT_ATTRIBUTE_SYNC_TYPE_MASK (0x0CU)
151#define USB_DESCRIPTOR_ENDPOINT_ATTRIBUTE_SYNC_TYPE_SHFIT (2U)
152#define USB_DESCRIPTOR_ENDPOINT_ATTRIBUTE_SYNC_TYPE_NO_SYNC (0x00U)
153#define USB_DESCRIPTOR_ENDPOINT_ATTRIBUTE_SYNC_TYPE_ASYNC (0x04U)
154#define USB_DESCRIPTOR_ENDPOINT_ATTRIBUTE_SYNC_TYPE_ADAPTIVE (0x08U)
155#define USB_DESCRIPTOR_ENDPOINT_ATTRIBUTE_SYNC_TYPE_SYNC (0x0CU)
157#define USB_DESCRIPTOR_ENDPOINT_ATTRIBUTE_USAGE_TYPE_MASK (0x30U)
158#define USB_DESCRIPTOR_ENDPOINT_ATTRIBUTE_USAGE_TYPE_SHFIT (4U)
159#define USB_DESCRIPTOR_ENDPOINT_ATTRIBUTE_USAGE_TYPE_DATA_ENDPOINT (0x00U)
160#define USB_DESCRIPTOR_ENDPOINT_ATTRIBUTE_USAGE_TYPE_FEEDBACK_ENDPOINT (0x10U)
161#define USB_DESCRIPTOR_ENDPOINT_ATTRIBUTE_USAGE_TYPE_IMPLICIT_FEEDBACK_DATA_ENDPOINT (0x20U)
163#define USB_DESCRIPTOR_ENDPOINT_MAXPACKETSIZE_SIZE_MASK (0x07FFu)
164#define USB_DESCRIPTOR_ENDPOINT_MAXPACKETSIZE_MULT_TRANSACTIONS_MASK (0x1800u)
165#define USB_DESCRIPTOR_ENDPOINT_MAXPACKETSIZE_MULT_TRANSACTIONS_SHFIT (11U)
168#define USB_DESCRIPTOR_OTG_ATTRIBUTES_SRP_MASK (0x01u)
169#define USB_DESCRIPTOR_OTG_ATTRIBUTES_HNP_MASK (0x02u)
170#define USB_DESCRIPTOR_OTG_ATTRIBUTES_ADP_MASK (0x04u)
173#define USB_DESCRIPTOR_DEVICE_CAPABILITY_USB20_EXTENSION_LPM_MASK (0x02U)
174#define USB_DESCRIPTOR_DEVICE_CAPABILITY_USB20_EXTENSION_LPM_SHIFT (1U)
175#define USB_DESCRIPTOR_DEVICE_CAPABILITY_USB20_EXTENSION_BESL_MASK (0x04U)
176#define USB_DESCRIPTOR_DEVICE_CAPABILITY_USB20_EXTENSION_BESL_SHIFT (2U)
179typedef struct _usb_language
186typedef struct _usb_language_list
188 uint8_t *languageString;
189 uint32_t stringLength;
190 usb_language_t *languageList;
192} usb_language_list_t;
194typedef struct _usb_descriptor_common
197 uint8_t bDescriptorType;
199} usb_descriptor_common_t;
201typedef struct _usb_descriptor_device
204 uint8_t bDescriptorType;
206 uint8_t bDeviceClass;
207 uint8_t bDeviceSubClass;
208 uint8_t bDeviceProtocol;
209 uint8_t bMaxPacketSize0;
211 uint8_t idProduct[2];
212 uint8_t bcdDevice[2];
213 uint8_t iManufacturer;
215 uint8_t iSerialNumber;
216 uint8_t bNumConfigurations;
217} usb_descriptor_device_t;
219typedef struct _usb_descriptor_configuration
222 uint8_t bDescriptorType;
223 uint8_t wTotalLength[2];
224 uint8_t bNumInterfaces;
225 uint8_t bConfigurationValue;
226 uint8_t iConfiguration;
227 uint8_t bmAttributes;
229} usb_descriptor_configuration_t;
231typedef struct _usb_descriptor_interface
234 uint8_t bDescriptorType;
235 uint8_t bInterfaceNumber;
236 uint8_t bAlternateSetting;
237 uint8_t bNumEndpoints;
238 uint8_t bInterfaceClass;
239 uint8_t bInterfaceSubClass;
240 uint8_t bInterfaceProtocol;
242} usb_descriptor_interface_t;
244typedef struct _usb_descriptor_endpoint
247 uint8_t bDescriptorType;
248 uint8_t bEndpointAddress;
249 uint8_t bmAttributes;
250 uint8_t wMaxPacketSize[2];
252} usb_descriptor_endpoint_t;
254typedef struct _usb_descriptor_endpoint_companion
257 uint8_t bDescriptorType;
259 uint8_t bmAttributes;
260 uint8_t wBytesPerInterval[2];
261} usb_descriptor_endpoint_companion_t;
263typedef struct _usb_descriptor_binary_device_object_store
266 uint8_t bDescriptorType;
267 uint8_t wTotalLength[2];
268 uint8_t bNumDeviceCaps;
269} usb_descriptor_bos_t;
271typedef struct _usb_descriptor_usb20_extension
274 uint8_t bDescriptorType;
275 uint8_t bDevCapabilityType;
276 uint8_t bmAttributes[4];
277} usb_descriptor_usb20_extension_t;
278typedef struct _usb_descriptor_super_speed_device_capability
281 uint8_t bDescriptorType;
282 uint8_t bDevCapabilityType;
283 uint8_t bmAttributes;
284 uint8_t wSpeedsSupported[2];
285 uint8_t bFunctionalitySupport;
286 uint8_t bU1DevExitLat;
287 uint8_t wU2DevExitLat[2];
288} usb_bos_device_capability_susperspeed_desc_t;
289typedef union _usb_descriptor_union
291 usb_descriptor_common_t common;
292 usb_descriptor_device_t device;
293 usb_descriptor_configuration_t configuration;
294 usb_descriptor_interface_t interface;
295 usb_descriptor_endpoint_t endpoint;
296 usb_descriptor_endpoint_companion_t endpointCompanion;
297} usb_descriptor_union_t;