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#ifndef USB_DIR_OUT
82 USB_DIR_OUT = 0x00, /* to device */
83#endif
84#ifndef USB_DIR_IN
85 USB_DIR_IN = 0x80, /* to host */
86#endif
87};
88
89typedef struct usb_ctrlrequest_t {
90 union {
99
101#ifndef USB_REQ_GET_STATUS
103#endif
104#ifndef USB_REQ_CLEAR_FEATURE
106#endif
107#ifndef USB_REQ_SET_FEATURE
109#endif
110#ifndef USB_REQ_SET_ADDRESS
112#endif
113#ifndef USB_REQ_GET_DESCRIPTOR
115#endif
116#ifndef USB_REQ_SET_DESCRIPTOR
118#endif
119#ifndef USB_REQ_GET_CONFIGURATION
121#endif
122#ifndef USB_REQ_SET_CONFIGURATION
124#endif
125#ifndef USB_REQ_GET_INTERFACE
127#endif
128#ifndef USB_REQ_SET_INTERFACE
130#endif
131#ifndef USB_REQ_SYNCH_FRAME
133#endif
134};
135
136#ifndef USB_TYPE_MASK
138 USB_TYPE_MASK = (0x03 << 5),
139 USB_TYPE_STANDARD = (0x00 << 5),
140 USB_TYPE_CLASS = (0x01 << 5),
141 USB_TYPE_VENDOR = (0x02 << 5),
142 USB_TYPE_RESERVED = (0x03 << 5),
143};
144#endif
145
146#ifndef USB_RECIP_MASK
153 /* From Wireless USB 1.0 */
156};
157#endif
158
160 USB_CLASS_PER_INTERFACE = 0, /* for DeviceClass */
170 USB_CLASS_CSCID = 0x0b, /* chip+ smart card */
171 USB_CLASS_CONTENT_SEC = 0x0d, /* content security */
177
179};
180
182#ifndef USB_DT_DEVICE
184#endif
185#ifndef USB_DT_CONFIG
187#endif
188#ifndef USB_DT_STRING
190#endif
191#ifndef USB_DT_INTERFACE
193#endif
194#ifndef USB_DT_ENDPOINT
196#endif
197#ifndef USB_DT_DEVICE_QUALIFIER
199#endif
200#ifndef USB_DT_OTHER_SPEED_CONFIG
202#endif
203#ifndef USB_DT_INTERFACE_POWER
205#endif
210
216
222};
223
228
234
235typedef struct usb_device_desc_t {
238
252
253typedef struct usb_config_desc_t {
256
264
266 USB_CONFIG_ATT_ONE = (1 << 7), /* must be set */
267 USB_CONFIG_ATT_SELFPOWER = (1 << 6), /* self powered */
268 USB_CONFIG_ATT_WAKEUP = (1 << 5), /* can wakeup */
269 USB_CONFIG_ATT_BATTERY = (1 << 4), /* battery powered */
270};
271
273#ifndef USB_DEVICE_SELF_POWERED
274 USB_DEVICE_SELF_POWERED = 0, /* (read only) */
275#endif
276#ifndef USB_DEVICE_REMOTE_WAKEUP
277 USB_DEVICE_REMOTE_WAKEUP = 1, /* dev may initiate wakeup */
278#endif
279};
280
281typedef struct usb_interface_desc_t {
284
293
294typedef struct usb_endpoint_desc_t {
297
302
303 /* NOTE: these two are _only_ in audio endpoints. */
304 /* use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof. */
308
312
320
321typedef enum usb_device_speed_t {
322 USB_SPEED_UNKNOWN = 0, /* enumerating */
323#ifndef USB_SPEED_LOW
324 USB_SPEED_LOW, /* usb 1.1 */
325#endif
326#ifndef USB_SPEED_FULL
327 USB_SPEED_FULL, /* usb 1.1 */
328#endif
329#ifndef USB_SPEED_HIGH
330 USB_SPEED_HIGH, /* usb 2.0 */
331#endif
332#ifndef USB_SPEED_WIRELESS
333 USB_SPEED_WIRELESS, /* wireless (usb 2.5) */
334#endif
335#ifndef USB_SPEED_SUPER
336 USB_SPEED_SUPER, /* usb 3.0 */
337#endif
338#ifndef USB_SPEED_SUPER_PLUS
339 USB_SPEED_SUPER_PLUS, /* usb 3.1 */
340#endif
342
349};
350
359};
360
361/*============================ GLOBAL VARIABLES ==============================*/
362/*============================ LOCAL VARIABLES ===============================*/
363/*============================ PROTOTYPES ====================================*/
364
365static inline int vsf_usb_hex_to_bin(char ch)
366{
367 if ((ch >= '0') && (ch <= '9')) {
368 return ch - '0';
369 }
370 ch = tolower(ch);
371 if ((ch >= 'a') && (ch <= 'f')) {
372 return ch - 'a' + 10;
373 }
374 return -1;
375}
376
377#ifdef __cplusplus
378}
379#endif
380
381#endif // __USB_COMMON_H__
unsigned short uint16_t
Definition stdint.h:7
unsigned char uint8_t
Definition stdint.h:5
Definition usb_common.h:229
uint8_t bDescriptorType
Definition usb_common.h:231
uint8_t bLength
Definition usb_common.h:230
uint8_t bDescriptorSubType
Definition usb_common.h:232
Definition usb_common.h:253
uint8_t bConfigurationValue
Definition usb_common.h:259
uint8_t bDescriptorType
Definition usb_common.h:255
uint8_t bmAttributes
Definition usb_common.h:261
uint8_t bMaxPower
Definition usb_common.h:262
uint8_t bLength
Definition usb_common.h:254
uint8_t bNumInterfaces
Definition usb_common.h:258
uint8_t iConfiguration
Definition usb_common.h:260
uint16_t wTotalLength
Definition usb_common.h:257
Definition usb_common.h:89
uint16_t wIndex
Definition usb_common.h:96
uint8_t bRequestType
Definition usb_common.h:91
uint8_t bmRequestType
Definition usb_common.h:92
union usb_ctrlrequest_t::@194 VSF_CAL_PACKED
uint8_t bRequest
Definition usb_common.h:94
uint16_t wValue
Definition usb_common.h:95
uint16_t wLength
Definition usb_common.h:97
Definition usb_common.h:224
uint8_t bDescriptorType
Definition usb_common.h:226
uint8_t bLength
Definition usb_common.h:225
Definition usb_common.h:235
uint8_t bNumConfigurations
Definition usb_common.h:250
uint8_t bDescriptorType
Definition usb_common.h:237
uint8_t bMaxPacketSize0
Definition usb_common.h:243
uint8_t bDeviceClass
Definition usb_common.h:240
uint16_t idVendor
Definition usb_common.h:244
uint16_t bcdUSB
Definition usb_common.h:239
uint16_t bcdDevice
Definition usb_common.h:246
uint8_t iManufacturer
Definition usb_common.h:247
uint8_t iProduct
Definition usb_common.h:248
uint16_t idProduct
Definition usb_common.h:245
uint8_t bDeviceProtocol
Definition usb_common.h:242
uint8_t bLength
Definition usb_common.h:236
uint8_t iSerialNumber
Definition usb_common.h:249
uint8_t bDeviceSubClass
Definition usb_common.h:241
Definition usb_common.h:294
uint8_t bInterval
Definition usb_common.h:301
uint8_t bmAttributes
Definition usb_common.h:299
uint8_t bEndpointAddress
Definition usb_common.h:298
uint8_t bLength
Definition usb_common.h:295
uint8_t bDescriptorType
Definition usb_common.h:296
uint8_t bSynchAddress
Definition usb_common.h:306
uint8_t bRefresh
Definition usb_common.h:305
uint16_t wMaxPacketSize
Definition usb_common.h:300
Definition usb_common.h:309
uint8_t bLength
Definition usb_common.h:310
uint8_t bInterfaceCount
Definition usb_common.h:314
uint8_t bFunctionProtocol
Definition usb_common.h:317
uint8_t iFunction
Definition usb_common.h:318
uint8_t bFunctionClass
Definition usb_common.h:315
uint8_t bDescriptorType
Definition usb_common.h:311
uint8_t bFunctionSubClass
Definition usb_common.h:316
uint8_t bFirstInterface
Definition usb_common.h:313
Definition usb_common.h:281
uint8_t bAlternateSetting
Definition usb_common.h:286
uint8_t bInterfaceClass
Definition usb_common.h:288
uint8_t bInterfaceProtocol
Definition usb_common.h:290
uint8_t bDescriptorType
Definition usb_common.h:283
uint8_t iInterface
Definition usb_common.h:291
uint8_t bInterfaceNumber
Definition usb_common.h:285
uint8_t bNumEndpoints
Definition usb_common.h:287
uint8_t bInterfaceSubClass
Definition usb_common.h:289
uint8_t bLength
Definition usb_common.h:282
usb_desc_type_t
Definition usb_common.h:181
@ USB_DT_DEVICE_CAPABILITY
Definition usb_common.h:208
@ USB_DT_ENDPOINT
Definition usb_common.h:195
@ USB_DT_INTERFACE_ASSOCIATION
Definition usb_common.h:206
@ USB_DT_SS_ENDPOINT_COMP
Definition usb_common.h:209
@ USB_DT_CS_ENDPOINT
Definition usb_common.h:215
@ USB_DT_CONFIG
Definition usb_common.h:186
@ USB_DT_CS_DEVICE
Definition usb_common.h:211
@ USB_DT_INTERFACE
Definition usb_common.h:192
@ USB_DT_CS_INTERFACE
Definition usb_common.h:214
@ USB_DT_BOS
Definition usb_common.h:207
@ USB_DT_STRING
Definition usb_common.h:189
@ USB_DT_INTERFACE_POWER
Definition usb_common.h:204
@ USB_DT_REPORT
Definition usb_common.h:218
@ USB_DT_DEVICE_QUALIFIER
Definition usb_common.h:198
@ USB_DT_CS_STRING
Definition usb_common.h:213
@ USB_DT_HID
Definition usb_common.h:217
@ USB_DT_PHYSICAL
Definition usb_common.h:219
@ USB_DT_CS_CONFIG
Definition usb_common.h:212
@ USB_DT_HUB
Definition usb_common.h:220
@ USB_DT_SUPERSPEED_HUB
Definition usb_common.h:221
@ USB_DT_OTHER_SPEED_CONFIG
Definition usb_common.h:201
@ USB_DT_DEVICE
Definition usb_common.h:183
usb_device_speed_t
Definition usb_common.h:321
@ USB_SPEED_LOW
Definition usb_common.h:324
@ USB_SPEED_FULL
Definition usb_common.h:327
@ USB_SPEED_HIGH
Definition usb_common.h:330
@ USB_SPEED_UNKNOWN
Definition usb_common.h:322
@ USB_SPEED_SUPER_PLUS
Definition usb_common.h:339
@ USB_SPEED_WIRELESS
Definition usb_common.h:333
@ USB_SPEED_SUPER
Definition usb_common.h:336
usb_feature_t
Definition usb_common.h:272
@ USB_DEVICE_REMOTE_WAKEUP
Definition usb_common.h:277
@ USB_DEVICE_SELF_POWERED
Definition usb_common.h:274
usb_endpoint_sync_t
Definition usb_common.h:343
@ USB_ENDPOINT_SYNC_SYNC
Definition usb_common.h:348
@ USB_ENDPOINT_SYNC_NONE
Definition usb_common.h:345
@ USB_ENDPOINT_SYNC_ADAPTIVE
Definition usb_common.h:347
@ USB_ENDPOINT_SYNCTYPE
Definition usb_common.h:344
@ USB_ENDPOINT_SYNC_ASYNC
Definition usb_common.h:346
usb_req_recip_t
Definition usb_common.h:147
@ USB_RECIP_ENDPOINT
Definition usb_common.h:151
@ USB_RECIP_DEVICE
Definition usb_common.h:149
@ USB_RECIP_RPIPE
Definition usb_common.h:155
@ USB_RECIP_OTHER
Definition usb_common.h:152
@ USB_RECIP_MASK
Definition usb_common.h:148
@ USB_RECIP_INTERFACE
Definition usb_common.h:150
@ USB_RECIP_PORT
Definition usb_common.h:154
usb_endpoint_xfer_t
Definition usb_common.h:351
@ USB_ENDPOINT_XFERTYPE_MASK
Definition usb_common.h:352
@ USB_ENDPOINT_XFER_BULK
Definition usb_common.h:355
@ USB_ENDPOINT_XFER_INT
Definition usb_common.h:356
@ USB_ENDPOINT_XFER_ISOC
Definition usb_common.h:354
@ USB_ENDPOINT_XFER_BULK_STREAM
Definition usb_common.h:357
@ USB_ENDPOINT_MAX_ADJUSTABLE
Definition usb_common.h:358
@ USB_ENDPOINT_XFER_CONTROL
Definition usb_common.h:353
usb_req_type_t
Definition usb_common.h:137
@ USB_TYPE_RESERVED
Definition usb_common.h:142
@ USB_TYPE_VENDOR
Definition usb_common.h:141
@ USB_TYPE_MASK
Definition usb_common.h:138
@ USB_TYPE_CLASS
Definition usb_common.h:140
@ USB_TYPE_STANDARD
Definition usb_common.h:139
usb_class_t
Definition usb_common.h:159
@ USB_CLASS_AUDIO
Definition usb_common.h:161
@ USB_CLASS_MISC
Definition usb_common.h:174
@ USB_CLASS_VIDEO
Definition usb_common.h:172
@ USB_CLASS_PHYSICAL
Definition usb_common.h:164
@ USB_CLASS_HID
Definition usb_common.h:163
@ USB_SUBCLASS_VENDOR_SPEC
Definition usb_common.h:178
@ USB_CLASS_PRINTER
Definition usb_common.h:166
@ USB_CLASS_COMM
Definition usb_common.h:162
@ USB_CLASS_APP_SPEC
Definition usb_common.h:175
@ USB_CLASS_PER_INTERFACE
Definition usb_common.h:160
@ USB_CLASS_CDC_DATA
Definition usb_common.h:169
@ USB_CLASS_HUB
Definition usb_common.h:168
@ USB_CLASS_STILL_IMAGE
Definition usb_common.h:165
@ USB_CLASS_CSCID
Definition usb_common.h:170
@ USB_CLASS_CONTENT_SEC
Definition usb_common.h:171
@ USB_CLASS_VENDOR_SPEC
Definition usb_common.h:176
@ USB_CLASS_MASS_STORAGE
Definition usb_common.h:167
@ USB_CLASS_WIRELESS_CONTROLLER
Definition usb_common.h:173
usb_dir_t
Definition usb_common.h:79
@ USB_DIR_OUT
Definition usb_common.h:82
@ USB_DIR_IN
Definition usb_common.h:85
@ USB_DIR_MASK
Definition usb_common.h:80
usb_req_t
Definition usb_common.h:100
@ USB_REQ_SYNCH_FRAME
Definition usb_common.h:132
@ USB_REQ_SET_INTERFACE
Definition usb_common.h:129
@ USB_REQ_GET_DESCRIPTOR
Definition usb_common.h:114
@ USB_REQ_SET_DESCRIPTOR
Definition usb_common.h:117
@ USB_REQ_CLEAR_FEATURE
Definition usb_common.h:105
@ USB_REQ_GET_INTERFACE
Definition usb_common.h:126
@ USB_REQ_GET_CONFIGURATION
Definition usb_common.h:120
@ USB_REQ_SET_ADDRESS
Definition usb_common.h:111
@ USB_REQ_SET_CONFIGURATION
Definition usb_common.h:123
@ USB_REQ_GET_STATUS
Definition usb_common.h:102
@ USB_REQ_SET_FEATURE
Definition usb_common.h:108
usb_config_desc_att_t
Definition usb_common.h:265
@ USB_CONFIG_ATT_BATTERY
Definition usb_common.h:269
@ USB_CONFIG_ATT_WAKEUP
Definition usb_common.h:268
@ USB_CONFIG_ATT_ONE
Definition usb_common.h:266
@ USB_CONFIG_ATT_SELFPOWER
Definition usb_common.h:267
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@3f77d3b