19 #ifndef USB_DESCRIPTOR_H
20 #define USB_DESCRIPTOR_H
33 #define USB_SETUP_REQ_GET_STATUS 0x00
34 #define USB_SETUP_REQ_CLEAR_FEATURE 0x01
35 #define USB_SETUP_REQ_SET_FEATURE 0x03
36 #define USB_SETUP_REQ_SET_ADDRESS 0x05
37 #define USB_SETUP_REQ_GET_DESCRIPTOR 0x06
38 #define USB_SETUP_REQ_SET_DESCRIPTOR 0x07
39 #define USB_SETUP_REQ_GET_CONFIGURATION 0x08
40 #define USB_SETUP_REQ_SET_CONFIGURATION 0x09
41 #define USB_SETUP_REQ_GET_INTERFACE 0x0a
42 #define USB_SETUP_REQ_SET_INTERFACE 0x0b
43 #define USB_SETUP_REQ_SYNCH_FRAME 0x0c
50 #define USB_TYPE_DESCRIPTOR_DEVICE 0x01
51 #define USB_TYPE_DESCRIPTOR_CONFIGURATION 0x02
52 #define USB_TYPE_DESCRIPTOR_STRING 0x03
53 #define USB_TYPE_DESCRIPTOR_INTERFACE 0x04
54 #define USB_TYPE_DESCRIPTOR_ENDPOINT 0x05
55 #define USB_TYPE_DESCRIPTOR_DEV_QUALIFIER 0x06
56 #define USB_TYPE_DESCRIPTOR_SPEED_CONFIG 0x07
57 #define USB_TYPE_DESCRIPTOR_IFACE_POWER 0x08
58 #define USB_TYPE_DESCRIPTOR_INTERFACE_ASSOC 0x0b
65 #define USB_FEATURE_ENDPOINT_HALT 0x00
66 #define USB_FEATURE_DEVICE_REMOTE_WAKEUP 0x01
67 #define USB_FEATURE_TEST_MODE 0x02
75 #define USB_CONF_ATTR_RESERVED 0x80
76 #define USB_CONF_ATTR_SELF_POWERED 0x40
77 #define USB_CONF_ATTR_REM_WAKEUP 0x20
84 #define USB_SETUP_REQUEST_DEVICE2HOST 0x80
88 #define USB_SETUP_REQUEST_RECIPIENT_MASK 0x1f
89 #define USB_SETUP_REQUEST_RECIPIENT_DEVICE 0x00
90 #define USB_SETUP_REQUEST_RECIPIENT_INTERFACE 0x01
91 #define USB_SETUP_REQUEST_RECIPIENT_ENDPOINT 0x02
92 #define USB_SETUP_REQUEST_RECIPIENT_OTHER 0x03
94 #define USB_SETUP_REQUEST_TYPE_MASK 0x60
95 #define USB_SETUP_REQUEST_TYPE_STANDARD 0x00
96 #define USB_SETUP_REQUEST_TYPE_CLASS 0x20
97 #define USB_SETUP_REQUEST_TYPE_VENDOR 0x40
103 #define USB_ENDPOINT_DESCRIPTOR_INTERVAL_ISOCHRONOUS 1
109 #define USB_CLASS_AUDIO 0x01
110 #define USB_CLASS_CDC_CONTROL 0x02
111 #define USB_CLASS_HID 0x03
112 #define USB_CLASS_PHYSICAL 0x05
113 #define USB_CLASS_IMAGE 0x06
114 #define USB_CLASS_PRINTER 0x07
115 #define USB_CLASS_MASS_STORAGE 0x08
116 #define USB_CLASS_CDC_DATA 0x0a
117 #define USB_CLASS_VENDOR 0xff
123 typedef struct __attribute__((packed)) {
143 typedef struct __attribute__((packed)) {
157 typedef struct __attribute__((packed)) {
172 typedef struct __attribute__((packed)) {
184 typedef struct __attribute__((packed)) {
193 typedef struct __attribute__((packed)) {
207 typedef struct __attribute__((packed)) {
#define USB_SETUP_REQUEST_DEVICE2HOST
Request direction From device to host if the bit is set
static bool usb_setup_is_read(usb_setup_t *pkt)
getter for setup packet direction
USB configuration descriptor (USB 2.0 spec table 9-10)
uint16_t total_length
Total length of the configuration
uint8_t idx
Configuration descriptor string index
uint8_t attributes
Configuration attributes (USB_CONF_ATTR)
uint8_t max_power
Maximum power consumption in 2mA steps
uint8_t num_interfaces
Number of interfaces supported by this configuration
uint8_t length
Size of this descriptor
uint8_t type
Descriptor type (USB_TYPE_DESCRIPTOR_CONFIGURATION)
uint8_t val
Value to select this configuration by
USB device descriptor (USB 2.0 spec table 9-8)
uint8_t subclass
Device subclass code
uint8_t num_configurations
Number of possible configurations
uint8_t length
Size of this descriptor.
uint8_t max_packet_size
EP0 max packet size (8, 16, 32 or 64 bytes)
uint16_t vendor_id
Vendor ID (as assigned by the USB-IF)
uint8_t serial_idx
Device serial number string index number
uint16_t product_id
Product ID
uint8_t manufacturer_idx
Manufacturer string index number
uint8_t product_idx
Product string index number
uint16_t bcd_usb
Binary-coded decimal USB release specification
uint16_t bcd_device
Binary-coded decimal device release
uint8_t protocol
Device protocol code
uint8_t type
Descriptor type (USB_TYPE_DESCRIPTOR_DEVICE)
USB endpoint descriptor (USB 2.0 spec table 9-13)
uint8_t interval
Polling interval for the endpoint
uint8_t address
Address of the endpoint
uint8_t type
Descriptor type (USB_TYPE_DESCRIPTOR_ENDPOINT)
uint16_t max_packet_size
Maximum packet size of the endpoint
uint8_t length
Size of this descriptor
uint8_t attributes
Attributes of the endpoint
USB interface association descriptor (Interface Association Descriptors table 9-Z)
uint8_t first_interface
Index of the first associated interface.
uint8_t length
Size of this descriptor.
uint8_t subclass
Subclass code.
uint8_t type
Descriptor type (USB_TYPE_DESCRIPTOR_INTERFACE_ASSOC)
uint8_t protocol
Protocol code.
uint8_t idx
Descriptor string index.
uint8_t interface_count
Number of associated interfaces.
USB interface descriptor (USB 2.0 spec table 9-12)
uint8_t length
Size of this descriptor
uint8_t interface_num
Interface number
uint8_t type
Descriptor type (USB_TYPE_DESCRIPTOR_INTERFACE)
uint8_t num_endpoints
Number of endpoints used by this interface
uint8_t alternate_setting
Alternate setting index
uint8_t protocol
Protocol code
uint8_t idx
Interface descriptor string index
uint8_t subclass
Subclass code as assigned by the USB-IF
USB string descriptor (USB 2.0 spec table 9-16)
uint8_t length
Size of this descriptor.
uint8_t type
String descriptor type
USB setup packet (USB 2.0 spec table 9-2)
uint16_t index
Index/offset word
uint16_t length
Length of the data stage.
uint8_t request
Specific request