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
176};
177
182
188
189typedef struct usb_device_desc_t {
192
206
207typedef struct usb_config_desc_t {
210
218
220 USB_CONFIG_ATT_ONE = (1 << 7), /* must be set */
221 USB_CONFIG_ATT_SELFPOWER = (1 << 6), /* self powered */
222 USB_CONFIG_ATT_WAKEUP = (1 << 5), /* can wakeup */
223 USB_CONFIG_ATT_BATTERY = (1 << 4), /* battery powered */
224};
225
227 USB_DEVICE_SELF_POWERED = 0, /* (read only) */
228 USB_DEVICE_REMOTE_WAKEUP = 1, /* dev may initiate wakeup */
229};
230
231typedef struct usb_interface_desc_t {
234
243
244typedef struct usb_endpoint_desc_t {
247
252
253 /* NOTE: these two are _only_ in audio endpoints. */
254 /* use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof. */
258
262
270
271typedef enum usb_device_speed_t {
272 USB_SPEED_UNKNOWN = 0, /* enumerating */
274 USB_SPEED_HIGH, /* usb 2.0 */
275 USB_SPEED_WIRELESS, /* wireless (usb 2.5) */
276 USB_SPEED_SUPER, /* usb 3.0 */
277 USB_SPEED_SUPER_PLUS, /* usb 3.1 */
279
286};
287
296};
297
298/*============================ GLOBAL VARIABLES ==============================*/
299/*============================ LOCAL VARIABLES ===============================*/
300/*============================ PROTOTYPES ====================================*/
301
302static inline int vsf_usb_hex_to_bin(char ch)
303{
304 if ((ch >= '0') && (ch <= '9')) {
305 return ch - '0';
306 }
307 ch = tolower(ch);
308 if ((ch >= 'a') && (ch <= 'f')) {
309 return ch - 'a' + 10;
310 }
311 return -1;
312}
313
314#ifdef __cplusplus
315}
316#endif
317
318#endif // __USB_COMMON_H__
unsigned short uint16_t
Definition stdint.h:7
unsigned char uint8_t
Definition stdint.h:5
Definition usb_common.h:183
uint8_t bDescriptorType
Definition usb_common.h:185
uint8_t bLength
Definition usb_common.h:184
uint8_t bDescriptorSubType
Definition usb_common.h:186
Definition usb_common.h:207
uint8_t bConfigurationValue
Definition usb_common.h:213
uint8_t bDescriptorType
Definition usb_common.h:209
uint8_t bmAttributes
Definition usb_common.h:215
uint8_t bMaxPower
Definition usb_common.h:216
uint8_t bLength
Definition usb_common.h:208
uint8_t bNumInterfaces
Definition usb_common.h:212
uint8_t iConfiguration
Definition usb_common.h:214
uint16_t wTotalLength
Definition usb_common.h:211
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:178
uint8_t bDescriptorType
Definition usb_common.h:180
uint8_t bLength
Definition usb_common.h:179
Definition usb_common.h:189
uint8_t bNumConfigurations
Definition usb_common.h:204
uint8_t bDescriptorType
Definition usb_common.h:191
uint8_t bMaxPacketSize0
Definition usb_common.h:197
uint8_t bDeviceClass
Definition usb_common.h:194
uint16_t idVendor
Definition usb_common.h:198
uint16_t bcdUSB
Definition usb_common.h:193
uint16_t bcdDevice
Definition usb_common.h:200
uint8_t iManufacturer
Definition usb_common.h:201
uint8_t iProduct
Definition usb_common.h:202
uint16_t idProduct
Definition usb_common.h:199
uint8_t bDeviceProtocol
Definition usb_common.h:196
uint8_t bLength
Definition usb_common.h:190
uint8_t iSerialNumber
Definition usb_common.h:203
uint8_t bDeviceSubClass
Definition usb_common.h:195
Definition usb_common.h:244
uint8_t bInterval
Definition usb_common.h:251
uint8_t bmAttributes
Definition usb_common.h:249
uint8_t bEndpointAddress
Definition usb_common.h:248
uint8_t bLength
Definition usb_common.h:245
uint8_t bDescriptorType
Definition usb_common.h:246
uint8_t bSynchAddress
Definition usb_common.h:256
uint8_t bRefresh
Definition usb_common.h:255
uint16_t wMaxPacketSize
Definition usb_common.h:250
Definition usb_common.h:259
uint8_t bLength
Definition usb_common.h:260
uint8_t bInterfaceCount
Definition usb_common.h:264
uint8_t bFunctionProtocol
Definition usb_common.h:267
uint8_t iFunction
Definition usb_common.h:268
uint8_t bFunctionClass
Definition usb_common.h:265
uint8_t bDescriptorType
Definition usb_common.h:261
uint8_t bFunctionSubClass
Definition usb_common.h:266
uint8_t bFirstInterface
Definition usb_common.h:263
Definition usb_common.h:231
uint8_t bAlternateSetting
Definition usb_common.h:236
uint8_t bInterfaceClass
Definition usb_common.h:238
uint8_t bInterfaceProtocol
Definition usb_common.h:240
uint8_t bDescriptorType
Definition usb_common.h:233
uint8_t iInterface
Definition usb_common.h:241
uint8_t bInterfaceNumber
Definition usb_common.h:235
uint8_t bNumEndpoints
Definition usb_common.h:237
uint8_t bInterfaceSubClass
Definition usb_common.h:239
uint8_t bLength
Definition usb_common.h:232
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_SUPERSPEED_HUB
Definition usb_common.h:175
@ 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:271
@ USB_SPEED_LOW
Definition usb_common.h:273
@ USB_SPEED_FULL
Definition usb_common.h:273
@ USB_SPEED_HIGH
Definition usb_common.h:274
@ USB_SPEED_UNKNOWN
Definition usb_common.h:272
@ USB_SPEED_SUPER_PLUS
Definition usb_common.h:277
@ USB_SPEED_WIRELESS
Definition usb_common.h:275
@ USB_SPEED_SUPER
Definition usb_common.h:276
usb_feature_t
Definition usb_common.h:226
@ USB_DEVICE_REMOTE_WAKEUP
Definition usb_common.h:228
@ USB_DEVICE_SELF_POWERED
Definition usb_common.h:227
usb_endpoint_sync_t
Definition usb_common.h:280
@ USB_ENDPOINT_SYNC_SYNC
Definition usb_common.h:285
@ USB_ENDPOINT_SYNC_NONE
Definition usb_common.h:282
@ USB_ENDPOINT_SYNC_ADAPTIVE
Definition usb_common.h:284
@ USB_ENDPOINT_SYNCTYPE
Definition usb_common.h:281
@ USB_ENDPOINT_SYNC_ASYNC
Definition usb_common.h:283
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:288
@ USB_ENDPOINT_XFERTYPE_MASK
Definition usb_common.h:289
@ USB_ENDPOINT_XFER_BULK
Definition usb_common.h:292
@ USB_ENDPOINT_XFER_INT
Definition usb_common.h:293
@ USB_ENDPOINT_XFER_ISOC
Definition usb_common.h:291
@ USB_ENDPOINT_XFER_BULK_STREAM
Definition usb_common.h:294
@ USB_ENDPOINT_MAX_ADJUSTABLE
Definition usb_common.h:295
@ USB_ENDPOINT_XFER_CONTROL
Definition usb_common.h:290
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:219
@ USB_CONFIG_ATT_BATTERY
Definition usb_common.h:223
@ USB_CONFIG_ATT_WAKEUP
Definition usb_common.h:222
@ USB_CONFIG_ATT_ONE
Definition usb_common.h:220
@ USB_CONFIG_ATT_SELFPOWER
Definition usb_common.h:221
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@3f519a5