VSF Documented
usb_common.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __USB_COMMON_H__
19#define __USB_COMMON_H__
20
21/*============================ INCLUDES ======================================*/
22
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
29/*============================ MACROS ========================================*/
30
31#define DeviceRequest ((USB_DIR_IN | USB_TYPE_STANDARD | USB_RECIP_DEVICE) << 8)
32#define DeviceOutRequest ((USB_DIR_OUT | USB_TYPE_STANDARD | USB_RECIP_DEVICE) << 8)
33#define InterfaceRequest ((USB_DIR_IN | USB_TYPE_STANDARD | USB_RECIP_INTERFACE) << 8)
34#define EndpointRequest ((USB_DIR_IN | USB_TYPE_STANDARD | USB_RECIP_INTERFACE) << 8)
35#define EndpointOutRequest ((USB_DIR_OUT | USB_TYPE_STANDARD | USB_RECIP_INTERFACE) << 8)
36
37#define ClearHubFeature (0x2000 | USB_REQ_CLEAR_FEATURE)
38#define ClearPortFeature (0x2300 | USB_REQ_CLEAR_FEATURE)
39#define GetHubDescriptor (0xa000 | USB_REQ_GET_DESCRIPTOR)
40#define GetHubStatus (0xa000 | USB_REQ_GET_STATUS)
41#define GetPortStatus (0xa300 | USB_REQ_GET_STATUS)
42#define SetHubFeature (0x2000 | USB_REQ_SET_FEATURE)
43#define SetPortFeature (0x2300 | USB_REQ_SET_FEATURE)
44
45#define USB_ENDPOINT_HALT 0 /* IN/OUT will STALL */
46
47#define USB_DT_DEVICE_SIZE 18
48#define USB_DT_CONFIG_SIZE 9
49#define USB_DT_INTERFACE_SIZE 9
50#define USB_DT_ENDPOINT_SIZE 7
51#define USB_DT_ENDPOINT_AUDIO_SIZE 9
52#define USB_DT_DEVICE_QUALIFIER_SIZE 10
53#define USB_DT_INTERFACE_ASSOCIATION_SIZE 8
54#define USB_DT_BOS_SIZE 5
55
56/*============================ MACROFIED FUNCTIONS ===========================*/
57/*============================ TYPES =========================================*/
58
59typedef enum usb_pid_t {
60 USB_PID_EXT = 0xf0, /* USB 2.0 LPM ECN */
64 USB_PID_PING = 0xb4, /* USB 2.0 */
66 USB_PID_NYET = 0x96, /* USB 2.0 */
67 USB_PID_DATA2 = 0x87, /* USB 2.0 */
68 USB_PID_SPLIT = 0x78, /* USB 2.0 */
69 USB_PID_IN = 0x69,
72 USB_PID_PREAMBLE = 0x3c, /* Token mode */
73 USB_PID_ERR = 0x3c, /* USB 2.0: handshake mode */
76 USB_PID_MDATA = 0x0f, /* USB 2.0 */
78
81 USB_DIR_OUT = 0x00, /* to device */
82 USB_DIR_IN = 0x80, /* to host */
83};
84
85typedef struct usb_ctrlrequest_t {
86 union {
95
108};
109
111 USB_TYPE_MASK = (0x03 << 5),
112 USB_TYPE_STANDARD = (0x00 << 5),
113 USB_TYPE_CLASS = (0x01 << 5),
114 USB_TYPE_VENDOR = (0x02 << 5),
115 USB_TYPE_RESERVED = (0x03 << 5),
116};
117
124 /* From Wireless USB 1.0 */
127};
128
130 USB_CLASS_PER_INTERFACE = 0, /* for DeviceClass */
140 USB_CLASS_CSCID = 0x0b, /* chip+ smart card */
141 USB_CLASS_CONTENT_SEC = 0x0d, /* content security */
147
149};
150
164
170
175};
176
181
187
188typedef struct usb_device_desc_t {
191
205
206typedef struct usb_config_desc_t {
209
217
219 USB_CONFIG_ATT_ONE = (1 << 7), /* must be set */
220 USB_CONFIG_ATT_SELFPOWER = (1 << 6), /* self powered */
221 USB_CONFIG_ATT_WAKEUP = (1 << 5), /* can wakeup */
222 USB_CONFIG_ATT_BATTERY = (1 << 4), /* battery powered */
223};
224
226 USB_DEVICE_SELF_POWERED = 0, /* (read only) */
227 USB_DEVICE_REMOTE_WAKEUP = 1, /* dev may initiate wakeup */
228};
229
230typedef struct usb_interface_desc_t {
233
242
243typedef struct usb_endpoint_desc_t {
246
251
252 /* NOTE: these two are _only_ in audio endpoints. */
253 /* use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof. */
257
261
269
270typedef enum usb_device_speed_t {
271 USB_SPEED_UNKNOWN = 0, /* enumerating */
273 USB_SPEED_HIGH, /* usb 2.0 */
274 USB_SPEED_WIRELESS, /* wireless (usb 2.5) */
275 USB_SPEED_SUPER, /* usb 3.0 */
276 USB_SPEED_SUPER_PLUS, /* usb 3.1 */
278
285};
286
295};
296
297/*============================ GLOBAL VARIABLES ==============================*/
298/*============================ LOCAL VARIABLES ===============================*/
299/*============================ PROTOTYPES ====================================*/
300
301static inline int vsf_usb_hex_to_bin(char ch)
302{
303 if ((ch >= '0') && (ch <= '9')) {
304 return ch - '0';
305 }
306 ch = tolower(ch);
307 if ((ch >= 'a') && (ch <= 'f')) {
308 return ch - 'a' + 10;
309 }
310 return -1;
311}
312
313#ifdef __cplusplus
314}
315#endif
316
317#endif // __USB_COMMON_H__
unsigned short uint16_t
Definition stdint.h:7
unsigned char uint8_t
Definition stdint.h:5
Definition usb_common.h:182
uint8_t bDescriptorType
Definition usb_common.h:184
uint8_t bLength
Definition usb_common.h:183
uint8_t bDescriptorSubType
Definition usb_common.h:185
Definition usb_common.h:206
uint8_t bConfigurationValue
Definition usb_common.h:212
uint8_t bDescriptorType
Definition usb_common.h:208
uint8_t bmAttributes
Definition usb_common.h:214
uint8_t bMaxPower
Definition usb_common.h:215
uint8_t bLength
Definition usb_common.h:207
uint8_t bNumInterfaces
Definition usb_common.h:211
uint8_t iConfiguration
Definition usb_common.h:213
uint16_t wTotalLength
Definition usb_common.h:210
Definition usb_common.h:85
uint16_t wIndex
Definition usb_common.h:92
uint8_t bRequestType
Definition usb_common.h:87
uint8_t bmRequestType
Definition usb_common.h:88
union usb_ctrlrequest_t::@194 VSF_CAL_PACKED
uint8_t bRequest
Definition usb_common.h:90
uint16_t wValue
Definition usb_common.h:91
uint16_t wLength
Definition usb_common.h:93
Definition usb_common.h:177
uint8_t bDescriptorType
Definition usb_common.h:179
uint8_t bLength
Definition usb_common.h:178
Definition usb_common.h:188
uint8_t bNumConfigurations
Definition usb_common.h:203
uint8_t bDescriptorType
Definition usb_common.h:190
uint8_t bMaxPacketSize0
Definition usb_common.h:196
uint8_t bDeviceClass
Definition usb_common.h:193
uint16_t idVendor
Definition usb_common.h:197
uint16_t bcdUSB
Definition usb_common.h:192
uint16_t bcdDevice
Definition usb_common.h:199
uint8_t iManufacturer
Definition usb_common.h:200
uint8_t iProduct
Definition usb_common.h:201
uint16_t idProduct
Definition usb_common.h:198
uint8_t bDeviceProtocol
Definition usb_common.h:195
uint8_t bLength
Definition usb_common.h:189
uint8_t iSerialNumber
Definition usb_common.h:202
uint8_t bDeviceSubClass
Definition usb_common.h:194
Definition usb_common.h:243
uint8_t bInterval
Definition usb_common.h:250
uint8_t bmAttributes
Definition usb_common.h:248
uint8_t bEndpointAddress
Definition usb_common.h:247
uint8_t bLength
Definition usb_common.h:244
uint8_t bDescriptorType
Definition usb_common.h:245
uint8_t bSynchAddress
Definition usb_common.h:255
uint8_t bRefresh
Definition usb_common.h:254
uint16_t wMaxPacketSize
Definition usb_common.h:249
Definition usb_common.h:258
uint8_t bLength
Definition usb_common.h:259
uint8_t bInterfaceCount
Definition usb_common.h:263
uint8_t bFunctionProtocol
Definition usb_common.h:266
uint8_t iFunction
Definition usb_common.h:267
uint8_t bFunctionClass
Definition usb_common.h:264
uint8_t bDescriptorType
Definition usb_common.h:260
uint8_t bFunctionSubClass
Definition usb_common.h:265
uint8_t bFirstInterface
Definition usb_common.h:262
Definition usb_common.h:230
uint8_t bAlternateSetting
Definition usb_common.h:235
uint8_t bInterfaceClass
Definition usb_common.h:237
uint8_t bInterfaceProtocol
Definition usb_common.h:239
uint8_t bDescriptorType
Definition usb_common.h:232
uint8_t iInterface
Definition usb_common.h:240
uint8_t bInterfaceNumber
Definition usb_common.h:234
uint8_t bNumEndpoints
Definition usb_common.h:236
uint8_t bInterfaceSubClass
Definition usb_common.h:238
uint8_t bLength
Definition usb_common.h:231
usb_desc_type_t
Definition usb_common.h:151
@ USB_DT_DEVICE_CAPABILITY
Definition usb_common.h:162
@ USB_DT_ENDPOINT
Definition usb_common.h:156
@ USB_DT_INTERFACE_ASSOCIATION
Definition usb_common.h:160
@ USB_DT_SS_ENDPOINT_COMP
Definition usb_common.h:163
@ USB_DT_CS_ENDPOINT
Definition usb_common.h:169
@ USB_DT_CONFIG
Definition usb_common.h:153
@ USB_DT_CS_DEVICE
Definition usb_common.h:165
@ USB_DT_INTERFACE
Definition usb_common.h:155
@ USB_DT_CS_INTERFACE
Definition usb_common.h:168
@ USB_DT_BOS
Definition usb_common.h:161
@ USB_DT_STRING
Definition usb_common.h:154
@ USB_DT_INTERFACE_POWER
Definition usb_common.h:159
@ USB_DT_REPORT
Definition usb_common.h:172
@ USB_DT_DEVICE_QUALIFIER
Definition usb_common.h:157
@ USB_DT_CS_STRING
Definition usb_common.h:167
@ USB_DT_HID
Definition usb_common.h:171
@ USB_DT_PHYSICAL
Definition usb_common.h:173
@ USB_DT_CS_CONFIG
Definition usb_common.h:166
@ USB_DT_HUB
Definition usb_common.h:174
@ USB_DT_OTHER_SPEED_CONFIG
Definition usb_common.h:158
@ USB_DT_DEVICE
Definition usb_common.h:152
usb_device_speed_t
Definition usb_common.h:270
@ USB_SPEED_LOW
Definition usb_common.h:272
@ USB_SPEED_FULL
Definition usb_common.h:272
@ USB_SPEED_HIGH
Definition usb_common.h:273
@ USB_SPEED_UNKNOWN
Definition usb_common.h:271
@ USB_SPEED_SUPER_PLUS
Definition usb_common.h:276
@ USB_SPEED_WIRELESS
Definition usb_common.h:274
@ USB_SPEED_SUPER
Definition usb_common.h:275
usb_feature_t
Definition usb_common.h:225
@ USB_DEVICE_REMOTE_WAKEUP
Definition usb_common.h:227
@ USB_DEVICE_SELF_POWERED
Definition usb_common.h:226
usb_endpoint_sync_t
Definition usb_common.h:279
@ USB_ENDPOINT_SYNC_SYNC
Definition usb_common.h:284
@ USB_ENDPOINT_SYNC_NONE
Definition usb_common.h:281
@ USB_ENDPOINT_SYNC_ADAPTIVE
Definition usb_common.h:283
@ USB_ENDPOINT_SYNCTYPE
Definition usb_common.h:280
@ USB_ENDPOINT_SYNC_ASYNC
Definition usb_common.h:282
usb_req_recip_t
Definition usb_common.h:118
@ USB_RECIP_ENDPOINT
Definition usb_common.h:122
@ USB_RECIP_DEVICE
Definition usb_common.h:120
@ USB_RECIP_RPIPE
Definition usb_common.h:126
@ USB_RECIP_OTHER
Definition usb_common.h:123
@ USB_RECIP_MASK
Definition usb_common.h:119
@ USB_RECIP_INTERFACE
Definition usb_common.h:121
@ USB_RECIP_PORT
Definition usb_common.h:125
usb_endpoint_xfer_t
Definition usb_common.h:287
@ USB_ENDPOINT_XFERTYPE_MASK
Definition usb_common.h:288
@ USB_ENDPOINT_XFER_BULK
Definition usb_common.h:291
@ USB_ENDPOINT_XFER_INT
Definition usb_common.h:292
@ USB_ENDPOINT_XFER_ISOC
Definition usb_common.h:290
@ USB_ENDPOINT_XFER_BULK_STREAM
Definition usb_common.h:293
@ USB_ENDPOINT_MAX_ADJUSTABLE
Definition usb_common.h:294
@ USB_ENDPOINT_XFER_CONTROL
Definition usb_common.h:289
usb_req_type_t
Definition usb_common.h:110
@ USB_TYPE_RESERVED
Definition usb_common.h:115
@ USB_TYPE_VENDOR
Definition usb_common.h:114
@ USB_TYPE_MASK
Definition usb_common.h:111
@ USB_TYPE_CLASS
Definition usb_common.h:113
@ USB_TYPE_STANDARD
Definition usb_common.h:112
usb_class_t
Definition usb_common.h:129
@ USB_CLASS_AUDIO
Definition usb_common.h:131
@ USB_CLASS_MISC
Definition usb_common.h:144
@ USB_CLASS_VIDEO
Definition usb_common.h:142
@ USB_CLASS_PHYSICAL
Definition usb_common.h:134
@ USB_CLASS_HID
Definition usb_common.h:133
@ USB_SUBCLASS_VENDOR_SPEC
Definition usb_common.h:148
@ USB_CLASS_PRINTER
Definition usb_common.h:136
@ USB_CLASS_COMM
Definition usb_common.h:132
@ USB_CLASS_APP_SPEC
Definition usb_common.h:145
@ USB_CLASS_PER_INTERFACE
Definition usb_common.h:130
@ USB_CLASS_CDC_DATA
Definition usb_common.h:139
@ USB_CLASS_HUB
Definition usb_common.h:138
@ USB_CLASS_STILL_IMAGE
Definition usb_common.h:135
@ USB_CLASS_CSCID
Definition usb_common.h:140
@ USB_CLASS_CONTENT_SEC
Definition usb_common.h:141
@ USB_CLASS_VENDOR_SPEC
Definition usb_common.h:146
@ USB_CLASS_MASS_STORAGE
Definition usb_common.h:137
@ USB_CLASS_WIRELESS_CONTROLLER
Definition usb_common.h:143
usb_dir_t
Definition usb_common.h:79
@ USB_DIR_OUT
Definition usb_common.h:81
@ USB_DIR_IN
Definition usb_common.h:82
@ USB_DIR_MASK
Definition usb_common.h:80
usb_req_t
Definition usb_common.h:96
@ USB_REQ_SYNCH_FRAME
Definition usb_common.h:107
@ USB_REQ_SET_INTERFACE
Definition usb_common.h:106
@ USB_REQ_GET_DESCRIPTOR
Definition usb_common.h:101
@ USB_REQ_SET_DESCRIPTOR
Definition usb_common.h:102
@ USB_REQ_CLEAR_FEATURE
Definition usb_common.h:98
@ USB_REQ_GET_INTERFACE
Definition usb_common.h:105
@ USB_REQ_GET_CONFIGURATION
Definition usb_common.h:103
@ USB_REQ_SET_ADDRESS
Definition usb_common.h:100
@ USB_REQ_SET_CONFIGURATION
Definition usb_common.h:104
@ USB_REQ_GET_STATUS
Definition usb_common.h:97
@ USB_REQ_SET_FEATURE
Definition usb_common.h:99
usb_config_desc_att_t
Definition usb_common.h:218
@ USB_CONFIG_ATT_BATTERY
Definition usb_common.h:222
@ USB_CONFIG_ATT_WAKEUP
Definition usb_common.h:221
@ USB_CONFIG_ATT_ONE
Definition usb_common.h:219
@ USB_CONFIG_ATT_SELFPOWER
Definition usb_common.h:220
usb_pid_t
Definition usb_common.h:59
@ USB_PID_MDATA
Definition usb_common.h:76
@ USB_PID_STALL
Definition usb_common.h:75
@ USB_PID_PREAMBLE
Definition usb_common.h:72
@ USB_PID_DATA1
Definition usb_common.h:71
@ USB_PID_NAK
Definition usb_common.h:70
@ USB_PID_PING
Definition usb_common.h:64
@ USB_PID_ACK
Definition usb_common.h:62
@ USB_PID_ERR
Definition usb_common.h:73
@ USB_PID_SOF
Definition usb_common.h:65
@ USB_PID_IN
Definition usb_common.h:69
@ USB_PID_DATA2
Definition usb_common.h:67
@ USB_PID_EXT
Definition usb_common.h:60
@ USB_PID_OUT
Definition usb_common.h:61
@ USB_PID_DATA0
Definition usb_common.h:63
@ USB_PID_NYET
Definition usb_common.h:66
@ USB_PID_SPLIT
Definition usb_common.h:68
@ USB_PID_SETUP
Definition usb_common.h:74
struct vk_romfs_header_t VSF_CAL_PACKED
Generated from commit: vsfteam/vsf@1c19fdc