descriptor.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2018 Koen Zandberg <koen@bergzand.net>
3  *
4  * This file is subject to the terms and conditions of the GNU Lesser General
5  * Public License v2.1. See the file LICENSE in the top level directory for
6  * more details.
7  */
19 #ifndef USB_DESCRIPTOR_H
20 #define USB_DESCRIPTOR_H
21 
22 #include <stdint.h>
23 #include <stdbool.h>
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
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
66 #define USB_CONF_ATTR_RESERVED 0x80
67 #define USB_CONF_ATTR_SELF_POWERED 0x40
68 #define USB_CONF_ATTR_REM_WAKEUP 0x20
75 #define USB_SETUP_REQUEST_DEVICE2HOST 0x80
79 #define USB_SETUP_REQUEST_RECIPIENT_MASK 0x1f
80 #define USB_SETUP_REQUEST_RECIPIENT_DEVICE 0x00
81 #define USB_SETUP_REQUEST_RECIPIENT_INTERFACE 0x01
82 #define USB_SETUP_REQUEST_RECIPIENT_ENDPOINT 0x02
83 #define USB_SETUP_REQUEST_RECIPIENT_OTHER 0x03
85 #define USB_SETUP_REQUEST_TYPE_MASK 0x60
86 #define USB_SETUP_REQUEST_TYPE_STANDARD 0x00
87 #define USB_SETUP_REQUEST_TYPE_CLASS 0x20
88 #define USB_SETUP_REQUEST_TYPE_VENDOR 0x40
94 #define USB_ENDPOINT_DESCRIPTOR_INTERVAL_ISOCHRONOUS 1
95 
100 #define USB_CLASS_AUDIO 0x01
101 #define USB_CLASS_CDC_CONTROL 0x02
102 #define USB_CLASS_HID 0x03
103 #define USB_CLASS_PHYSICAL 0x05
104 #define USB_CLASS_IMAGE 0x06
105 #define USB_CLASS_PRINTER 0x07
106 #define USB_CLASS_MASS_STORAGE 0x08
107 #define USB_CLASS_CDC_DATA 0x0a
108 #define USB_CLASS_VENDOR 0xff
114 typedef struct __attribute__((packed)) {
115  uint8_t length;
116  uint8_t type;
117  uint16_t bcd_usb;
118  uint8_t class;
119  uint8_t subclass;
120  uint8_t protocol;
121  uint8_t max_packet_size;
122  uint16_t vendor_id;
123  uint16_t product_id;
124  uint16_t bcd_device;
125  uint8_t manufacturer_idx;
126  uint8_t product_idx;
127  uint8_t serial_idx;
128  uint8_t num_configurations;
134 typedef struct __attribute__((packed)) {
135  uint8_t length;
136  uint8_t type;
137  uint16_t total_length;
138  uint8_t num_interfaces;
139  uint8_t val;
140  uint8_t idx;
141  uint8_t attributes;
142  uint8_t max_power;
148 typedef struct __attribute__((packed)) {
149  uint8_t length;
150  uint8_t type;
151  uint8_t interface_num;
152  uint8_t alternate_setting;
153  uint8_t num_endpoints;
154  uint8_t class;
155  uint8_t subclass;
156  uint8_t protocol;
157  uint8_t idx;
163 typedef struct __attribute__((packed)) {
164  uint8_t length;
165  uint8_t type;
166  uint8_t address;
167  uint8_t attributes;
168  uint16_t max_packet_size;
169  uint8_t interval;
175 typedef struct __attribute__((packed)) {
176  uint8_t length;
177  uint8_t type;
184 typedef struct __attribute__((packed)) {
185  uint8_t length;
186  uint8_t type;
187  uint8_t first_interface;
188  uint8_t interface_count;
189  uint8_t class;
190  uint8_t subclass;
191  uint8_t protocol;
192  uint8_t idx;
198 typedef struct __attribute__((packed)) {
199  uint8_t type;
200  uint8_t request;
201  uint16_t value;
202  uint16_t index;
203  uint16_t length;
214 static inline bool usb_setup_is_read(usb_setup_t *pkt)
215 {
217 }
218 
219 #ifdef __cplusplus
220 }
221 #endif
222 
223 #endif /* USB_DESCRIPTOR_H */
224 
USB configuration descriptor (USB 2.0 spec table 9-10)
Definition: descriptor.h:136
static bool usb_setup_is_read(usb_setup_t *pkt)
getter for setup packet direction
Definition: descriptor.h:216
USB setup packet (USB 2.0 spec table 9-2)
Definition: descriptor.h:200
uint8_t type
Request type.
Definition: descriptor.h:201
#define USB_SETUP_REQUEST_DEVICE2HOST
Request direction From device to host if the bit is set.
Definition: descriptor.h:75
USB device descriptor (USB 2.0 spec table 9-8)
Definition: descriptor.h:116
USB interface descriptor (USB 2.0 spec table 9-12)
Definition: descriptor.h:150
USB interface association descriptor (Interface Association Descriptors table 9-Z) ...
Definition: descriptor.h:186
USB string descriptor (USB 2.0 spec table 9-16)
Definition: descriptor.h:177
USB endpoint descriptor (USB 2.0 spec table 9-13)
Definition: descriptor.h:165