VSF Documented
vsf_usbh.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 __VSF_USBH_H__
19#define __VSF_USBH_H__
20
21/*============================ INCLUDES ======================================*/
23
24#if VSF_USE_USB_HOST == ENABLED
25
26#include "kernel/vsf_kernel.h"
27#include "../common/usb_common.h"
28
29#if defined(__VSF_USBH_CLASS_IMPLEMENT)
30# define __VSF_USBH_CLASS_IMPLEMENT_vk_usbh_hcd_t
31# define __VSF_USBH_CLASS_IMPLEMENT_vk_usbh_hcd_urb_t
32# define __VSF_USBH_CLASS_IMPLEMENT_vk_usbh_urb_t
33# define __VSF_USBH_CLASS_IMPLEMENT_vk_usbh_dev_t
34# define __VSF_USBH_CLASS_IMPLEMENT_vk_usbh_t
35# define __VSF_USBH_CLASS_IMPLEMENT_CLASS__
36#elif defined(__VSF_USBH_CLASS_IMPLEMENT_HCD__)
37# define __VSF_USBH_CLASS_IMPLEMENT_vk_usbh_hcd_t
38# define __VSF_USBH_CLASS_IMPLEMENT_vk_usbh_hcd_urb_t
39# define __VSF_USBH_CLASS_IMPLEMENT_vk_usbh_dev_t
40# if defined(__VSF_USBH_CLASS_IMPLEMENT_HUB__)
41# define __VSF_USBH_CLASS_INHERIT_vk_usbh_t
42# endif
43#elif defined(__VSF_USBH_CLASS_IMPLEMENT_CLASS__)
44# define __VSF_USBH_CLASS_IMPLEMENT_vk_usbh_dev_t
45# define __VSF_USBH_CLASS_INHERIT_vk_usbh_t
46# define __VSF_USBH_CLASS_INHERIT_vk_usbh_urb_t
47# if defined(__VSF_USBH_CLASS_IMPLEMENT_HUB__)
48# define __VSF_USBH_CLASS_IMPLEMENT_vk_usbh_dev_t
49# endif
50#endif
51
52#include "utilities/ooc_class.h"
53
54#ifdef __cplusplus
55extern "C" {
56#endif
57
58/*============================ MACROS ========================================*/
59
60#if VSF_KERNEL_CFG_EDA_SUPPORT_TIMER != ENABLED
61# error "USBH require VSF_KERNEL_CFG_EDA_SUPPORT_TIMER"
62#endif
63
64#if !defined(VSF_USBH_CFG_EDA_PRIORITY)
65# define VSF_USBH_CFG_EDA_PRIORITY vsf_prio_0
66#endif
67
68#ifndef VSF_USBH_CFG_ISO_EN
69# define VSF_USBH_CFG_ISO_EN ENABLED
70#endif
71#ifndef VSF_USBH_CFG_PIPE_HAS_EXTRA
72# define VSF_USBH_CFG_PIPE_HAS_EXTRA ENABLED
73#endif
74
75#if VSF_USBH_CFG_ISO_EN == ENABLED
76#ifndef VSF_USBH_CFG_ISO_PACKET_LIMIT
77#define VSF_USBH_CFG_ISO_PACKET_LIMIT 1
78#endif
79#endif
80
81#ifndef VSF_USBH_CFG_ENABLE_ROOT_HUB
82# define VSF_USBH_CFG_ENABLE_ROOT_HUB ENABLED
83#endif
84
85#ifndef VSF_USBH_CFG_MAX_DEVICE
86# define VSF_USBH_CFG_MAX_DEVICE 127
87#endif
88
89#ifdef VSF_USBH_CFG_HEAP_IFS
90# undef vsf_usbh_malloc
91# undef vsf_usbh_malloc_aligned
92# undef vsf_usbh_free
93# define vsf_usbh_malloc VSF_USBH_CFG_HEAP_IFS.Malloc
94# define vsf_usbh_malloc_aligned VSF_USBH_CFG_HEAP_IFS.MallocAligned
95# define vsf_usbh_free VSF_USBH_CFG_HEAP_IFS.Free
96#else
97# ifndef vsf_usbh_malloc
98# define vsf_usbh_malloc vsf_heap_malloc
99# else
100extern void * vsf_usbh_malloc(uint_fast32_t size);
101# endif
102# ifndef vsf_usbh_malloc_aligned
103# define vsf_usbh_malloc_aligned vsf_heap_malloc_aligned
104# else
106# endif
107# ifndef vsf_usbh_free
108# define vsf_usbh_free vsf_heap_free
109# else
110extern void vsf_usbh_free(void * buffer);
111# endif
112#endif
113
114
115
116
117#define VSF_USBH_MATCH_VID_PID(__VID, __PID) \
118 .match_vendor = true, \
119 .match_product = true, \
120 .idVendor = (__VID), \
121 .idProduct = (__PID),
122#define VSF_USBH_MATCH_DEV_CLASS(__CLASS, __SUB_CLASS, __PROTOCOL) \
123 .match_dev_class = true, \
124 .match_dev_subclass = true, \
125 .match_dev_protocol = true, \
126 .bDeviceClass = (__CLASS), \
127 .bDeviceSubClass = (__SUB_CLASS), \
128 .bDeviceProtocol = (__PROTOCOL),
129#define VSF_USBH_MATCH_IFS_CLASS(__CLASS, __SUB_CLASS, __PROTOCOL) \
130 .match_ifs_class = true, \
131 .match_ifs_subclass = true, \
132 .match_ifs_protocol = true, \
133 .bInterfaceClass = (__CLASS), \
134 .bInterfaceSubClass = (__SUB_CLASS), \
135 .bInterfaceProtocol = (__PROTOCOL),
136
137#define VSF_USBH_MATCH_FLAGS_VENDOR (1 << 0)
138#define VSF_USBH_MATCH_FLAGS_PRODUCT (1 << 1)
139#define VSF_USBH_MATCH_FLAGS_DEV_LO (1 << 2)
140#define VSF_USBH_MATCH_FLAGS_DEV_HI (1 << 3)
141#define VSF_USBH_MATCH_FLAGS_DEV_CLASS (1 << 4)
142#define VSF_USBH_MATCH_FLAGS_DEV_SUBCLASS (1 << 5)
143#define VSF_USBH_MATCH_FLAGS_DEV_PROTOCOL (1 << 6)
144#define VSF_USBH_MATCH_FLAGS_IFS_CLASS (1 << 7)
145#define VSF_USBH_MATCH_FLAGS_IFS_SUBCLASS (1 << 8)
146#define VSF_USBH_MATCH_FLAGS_IFS_PROTOCOL (1 << 9)
147#define VSF_USBH_MATCH_FLAGS_IFS_NUM (1 << 10)
148
149/*============================ MACROFIED FUNCTIONS ===========================*/
150/*============================ TYPES =========================================*/
151
156
161
162enum {
168};
169
170// struct vsf_hcd_urb_t.transfer_flags
171enum {
177};
178
179typedef struct vk_usbh_ifs_t {
181 void *param;
182
187
188typedef struct vk_usbh_dev_id_t {
189 union {
190 struct {
203 };
205 };
206
207 // naming convention: usb documents
218 //uint32_t driver_info;
220
227
228typedef struct vk_usbh_ifs_parser_t {
233
234typedef struct vk_usbh_dev_parser_t {
242 enum {
254
255#ifdef __cplusplus
256}
257#endif
258
259#if defined(__VSF_USBH_CLASS_IMPLEMENT_CLASS__)
260# define __VSF_CLASS_IMPLEMENT__
261#endif
262#include "utilities/ooc_class.h"
263
264#ifdef __cplusplus
265extern "C" {
266#endif
267
269 protected_member(
270 const char *name;
271 uint8_t dev_id_num;
272 const vk_usbh_dev_id_t *dev_ids;
273 void * (*probe)(vk_usbh_t *usbh, vk_usbh_dev_t *dev,
274 vk_usbh_ifs_parser_t *parser_ifs);
275 void (*disconnect)(vk_usbh_t *usbh, vk_usbh_dev_t *dev, void *param);
277};
278
279typedef struct vk_usbh_class_t {
283
284typedef union vk_usbh_pipe_flag_t {
285 struct {
295 };
298
299typedef struct vk_usbh_pipe_t {
300 implement(vk_usbh_pipe_flag_t)
303#if VSF_USBH_CFG_PIPE_HAS_EXTRA == ENABLED
304 void *extra;
305#endif
307
308#ifdef __cplusplus
309}
310#endif
311
312#if defined(__VSF_USBH_CLASS_IMPLEMENT_vk_usbh_hcd_t)
313# undef __VSF_USBH_CLASS_IMPLEMENT_vk_usbh_hcd_t
314# define __VSF_CLASS_IMPLEMENT__
315#endif
316#include "utilities/ooc_class.h"
317
318#ifdef __cplusplus
319extern "C" {
320#endif
321
323 private_member(
324 vsf_err_t (*init_evthandler)(vsf_eda_t *eda, vsf_evt_t evt, vk_usbh_hcd_t *hcd);
325 vsf_err_t (*fini)(vk_usbh_hcd_t *hcd);
326 vsf_err_t (*suspend)(vk_usbh_hcd_t *hcd);
327 vsf_err_t (*resume)(vk_usbh_hcd_t *hcd);
328 uint_fast16_t (*get_frame_number)(vk_usbh_hcd_t *hcd);
329 vsf_err_t (*alloc_device)(vk_usbh_hcd_t *hcd, vk_usbh_hcd_dev_t *dev);
330 void (*free_device)(vk_usbh_hcd_t *hcd, vk_usbh_hcd_dev_t *dev);
331 vk_usbh_hcd_urb_t * (*alloc_urb)(vk_usbh_hcd_t *hcd);
332 void (*free_urb)(vk_usbh_hcd_t *hcd, vk_usbh_hcd_urb_t *urb);
333 vsf_err_t (*submit_urb)(vk_usbh_hcd_t *hcd, vk_usbh_hcd_urb_t *urb);
334 vsf_err_t (*relink_urb)(vk_usbh_hcd_t *hcd, vk_usbh_hcd_urb_t *urb);
335
336 union {
337 int (*rh_control)(vk_usbh_hcd_t *hcd, vk_usbh_hcd_urb_t *urb);
338 struct {
339 // for virtual hcd without root hub
340 vsf_err_t (*reset_dev)(vk_usbh_hcd_t *hcd, vk_usbh_hcd_dev_t *dev);
341 bool (*is_dev_reset)(vk_usbh_hcd_t *hcd, vk_usbh_hcd_dev_t *dev);
342 };
343 };
345};
346
348 public_member(
349 const vk_usbh_hcd_drv_t *drv;
350 void *param;
351 enum usb_device_speed_t rh_speed;
353
354 private_member(
355 void *priv;
356 )
357};
358
359#if VSF_USBH_CFG_ISO_EN == ENABLED
366
370 //uint32_t error_count; /*!< number of errors (iso only) */
373#endif
374
375#ifdef __cplusplus
376}
377#endif
378
379#if defined(__VSF_USBH_CLASS_IMPLEMENT_vk_usbh_hcd_urb_t)
380# undef __VSF_USBH_CLASS_IMPLEMENT_vk_usbh_hcd_urb_t
381# define __VSF_CLASS_IMPLEMENT__
382#endif
383#include "utilities/ooc_class.h"
384
385#ifdef __cplusplus
386extern "C" {
387#endif
388
390 private_member(
391 void *dev_priv;
392 )
393};
394
395typedef void (*vsf_usbh_urb_complete_t)(void *param, vk_usbh_hcd_urb_t *);
396
398
399 private_member(
400 vk_usbh_hcd_dev_t *dev_hcd;
402
403 uint32_t transfer_length;
404 uint32_t actual_length;
406 uint16_t transfer_flags;
407 uint16_t interval;
410 void *buffer;
411 void (*free_buffer)(void *param);
412 void *free_buffer_param;
413
414 union {
415 struct usb_ctrlrequest_t setup_packet;
416#if VSF_USBH_CFG_ISO_EN == ENABLED
417 // TODO: iso_packet will enlarge every urb, need optimization
418 vk_usbh_hcd_iso_packet_t iso_packet;
419#endif
420 };
422
423 private_member(
425 union {
426 void *param;
427 vsf_eda_t *eda_caller;
428 };
429 uint32_t priv[0];
431};
432
433#ifdef __cplusplus
434}
435#endif
436
437#if defined(__VSF_USBH_CLASS_IMPLEMENT_vk_usbh_urb_t)
438# undef __VSF_USBH_CLASS_IMPLEMENT_vk_usbh_urb_t
439# define __VSF_CLASS_IMPLEMENT__
440#elif defined(__VSF_USBH_CLASS_INHERIT_vk_usbh_urb_t)
441# undef __VSF_USBH_CLASS_INHERIT_vk_usbh_urb_t
442# define __VSF_CLASS_INHERIT__
443#endif
444#include "utilities/ooc_class.h"
445
446#ifdef __cplusplus
447extern "C" {
448#endif
449
451 protected_member(
452 union {
454 vk_usbh_hcd_urb_t *urb_hcd;
455 };
457};
458
459#ifdef __cplusplus
460}
461#endif
462
463#if defined(__VSF_USBH_CLASS_IMPLEMENT_vk_usbh_dev_t)
464# undef __VSF_USBH_CLASS_IMPLEMENT_vk_usbh_dev_t
465# define __VSF_CLASS_IMPLEMENT__
466#endif
467#include "utilities/ooc_class.h"
468
469#ifdef __cplusplus
470extern "C" {
471#endif
472
473typedef struct vk_usbh_ep0_t {
477
479
480 public_member(
481 implement(vk_usbh_hcd_dev_t)
482 )
483
484 protected_member(
485 vk_usbh_ep0_t ep0;
486 vk_usbh_ifs_t *ifs;
487
488#if VSF_USBH_USE_HUB == ENABLED
489 vk_usbh_dev_t *dev_parent;
490 vsf_slist_node_t child_node;
491 vsf_slist_t children_list;
492#endif
493
494 uint8_t devnum;
495 uint8_t num_of_ifs;
496 uint8_t speed : 2;
497 uint8_t cur_config : 5;
498 uint8_t is_ep0_rdy : 1;
499 uint8_t maxchild : 4;
500 uint8_t index : 4;
502};
503
504#ifdef __cplusplus
505}
506#endif
507
508#if defined(__VSF_USBH_CLASS_IMPLEMENT_vk_usbh_t)
509# undef __VSF_USBH_CLASS_IMPLEMENT_vk_usbh_t
510# define __VSF_CLASS_IMPLEMENT__
511#elif defined(__VSF_USBH_CLASS_INHERIT_vk_usbh_t)
512# undef __VSF_USBH_CLASS_INHERIT_vk_usbh_t
513# define __VSF_CLASS_INHERIT__
514#endif
515#include "utilities/ooc_class.h"
516
517#ifdef __cplusplus
518extern "C" {
519#endif
520
521vsf_declare_bitmap(vk_usbh_devnum_bitmap, VSF_USBH_CFG_MAX_DEVICE + 1);
522
524
525 public_member(
526 implement(vk_usbh_hcd_t)
527 )
528
529 private_member(
530 vsf_bitmap(vk_usbh_devnum_bitmap) device_bitmap;
531#if VSF_USBH_CFG_ENABLE_ROOT_HUB == ENABLED
532 vk_usbh_dev_t *dev_rh;
533#endif
534 vsf_slist_t class_list;
535 )
536
537 protected_member(
538 vk_usbh_dev_t *dev_new;
539 vk_usbh_dev_parser_t *parser;
540
541 vsf_teda_t teda;
543};
544
545
546/*============================ GLOBAL VARIABLES ==============================*/
547/*============================ PROTOTYPES ====================================*/
548
549// APIs to be called by user
550extern vsf_err_t vk_usbh_init(vk_usbh_t *usbh);
551extern vsf_err_t vk_usbh_fini(vk_usbh_t *usbh);
554
555#if defined(__VSF_USBH_CLASS_IMPLEMENT) || defined(__VSF_USBH_CLASS_IMPLEMENT_HCD__)
556// APIs to be called by hcd drivers
558extern void vk_usbh_hcd_urb_complete(vk_usbh_hcd_urb_t *hcd_urb);
559#endif
560
561#if defined(__VSF_USBH_CLASS_IMPLEMENT_HUB__)
563 vk_usbh_dev_t *dev_parent, uint_fast8_t idx);
564extern void vk_usbh_disconnect_device(vk_usbh_t *usbh, vk_usbh_dev_t *dev);
565#endif
566
567#if defined(__VSF_USBH_CLASS_IMPLEMENT) || defined(__VSF_USBH_CLASS_IMPLEMENT_CLASS__)
568// APIs to be called by class drivers
570
571#define __vk_usbh_get_pipe5(...) __vk_usbh_get_pipe(__VA_ARGS__)
572#define __vk_usbh_get_pipe4(...) __vk_usbh_get_pipe5(__VA_ARGS__, 0)
573#define vk_usbh_get_pipe(...) \
574 __PLOOC_EVAL(__vk_usbh_get_pipe, __VA_ARGS__)(__VA_ARGS__)
576 uint8_t endpoint, uint8_t type, uint16_t size, uint8_t interval);
578 struct usb_endpoint_desc_t *desc_ep);
582 struct usb_endpoint_desc_t *desc_ep);
588extern void vk_usbh_unlink_urb(vk_usbh_t *usbh, vk_usbh_urb_t *urb);
589extern void vk_usbh_free_urb(vk_usbh_t *usbh, vk_usbh_urb_t *urb);
594extern void vk_usbh_urb_set_buffer(vk_usbh_urb_t *urb, void *buffer,
598extern void vk_usbh_urb_set_complete(vk_usbh_urb_t *urb, vsf_usbh_urb_complete_t complete, void *param);
599
601extern void vk_usbh_reset_dev(vk_usbh_t *usbh, vk_usbh_dev_t *dev);
602extern bool vk_usbh_is_dev_resetting(vk_usbh_t *usbh, vk_usbh_dev_t *dev);
603extern void vk_usbh_update_address(vk_usbh_dev_t *dev, uint_fast8_t address);
604
608
609#if VSF_USBH_CFG_ISO_EN == ENABLED
611#endif
612
613extern void vk_usbh_remove_interface(vk_usbh_t *usbh, vk_usbh_dev_t *dev,
614 vk_usbh_ifs_t *ifs);
615
617 struct usb_ctrlrequest_t *req);
619 struct usb_ctrlrequest_t *req, uint_fast16_t flags, vsf_eda_t *eda);
620
628 vk_usbh_dev_t *dev, uint_fast8_t configuration);
630 vk_usbh_dev_t *dev, uint_fast8_t ifnum, uint_fast8_t alternate);
632 uint_fast8_t ifs, uint_fast8_t feature);
634 uint_fast8_t endpoint, uint_fast8_t feature);
636 uint_fast8_t endpoint);
637
639 uint_fast8_t type, void **ptr);
640
643#endif
644
645#ifdef __cplusplus
646}
647#endif
648
649/*============================ INCLUDES ======================================*/
650
651// class drivers
652#if VSF_USBH_USE_HUB == ENABLED
654#endif
655#if VSF_USBH_USE_CDC == ENABLED
657#endif
658#if VSF_USBH_USE_ECM == ENABLED
660#endif
661#if VSF_USBH_USE_BTHCI == ENABLED
663#endif
664#if VSF_USBH_USE_HID == ENABLED
666#endif
667#if VSF_USBH_USE_DS4 == ENABLED
669#endif
670#if VSF_USBH_USE_NSPRO == ENABLED
672#endif
673#if VSF_USBH_USE_XB360 == ENABLED
675#endif
676#if VSF_USBH_USE_XB1 == ENABLED
678#endif
679#if VSF_USBH_USE_LIBUSB == ENABLED
681#endif
682#if VSF_USBH_USE_MSC == ENABLED
684#endif
685#if VSF_USBH_USE_UAC == ENABLED
687#endif
688#if VSF_USBH_USE_UVC == ENABLED
690#endif
691#if VSF_USBH_USE_DFU == ENABLED
693#endif
694#if VSF_USBH_USE_DL1X5 == ENABLED
696#endif
697
698// hcd drivers
699#if VSF_USBH_USE_HCD_OHCI == ENABLED
700# include "../driver/hcd/ohci/vsf_ohci.h"
701#endif
702#if VSF_USBH_USE_HCD_DWCOTG == ENABLED
703# include "../driver/otg/dwcotg/vsf_dwcotg_hcd.h"
704#endif
705#if VSF_USBH_USE_HCD_MUSB_FDRC == ENABLED
706# include "../driver/otg/musb/fdrc/vsf_musb_fdrc_hcd.h"
707#endif
708#if VSF_USBH_USE_HCD_LIBUSB == ENABLED
709# include "../driver/hcd/libusb_hcd/vsf_libusb_hcd.h"
710#endif
711#if VSF_USBH_USE_HCD_WINUSB == ENABLED
712# include "../driver/hcd/winusb_hcd/vsf_winusb_hcd.h"
713#endif
714#if VSF_USBH_USE_HCD_WEBUSB == ENABLED
715# include "../driver/hcd/webusb_hcd/vsf_webusb_hcd.h"
716#endif
717
718#undef __VSF_USBH_CLASS_IMPLEMENT
719#undef __VSF_USBH_CLASS_IMPLEMENT_CLASS__
720#undef __VSF_USBH_CLASS_IMPLEMENT_HCD__
721#undef __VSF_USBH_CLASS_IMPLEMENT_HUB__
722
723#endif
724#endif // __VSF_USBH_H__
vsf_err_t
Definition __type.h:42
@ VSF_ERR_NONE
none error
Definition __type.h:44
@ VSF_ERR_NOT_READY
service not ready yet
Definition __type.h:43
@ VSF_ERR_TIMEOUT
Definition __type.h:65
@ VSF_ERR_FAIL
failed
Definition __type.h:51
bool
Definition type.h:60
Definition vsf_usbh.h:268
Definition vsf_usbh.h:478
Definition vsf_usbh.h:389
Definition vsf_usbh.h:322
Definition vsf_usbh.h:347
Definition vsf_usbh.h:397
Definition vsf_usbh.h:523
Definition vsf_usbh.h:450
Definition vsf_eda.h:766
Definition vsf_eda.h:864
Definition vsf_eda.h:834
__le16 timeout
Definition ieee80211.h:94
#define vsf_dcl_class
Definition ooc_class.h:46
#define vsf_class(__name)
Definition ooc_class.h:48
unsigned short uint16_t
Definition stdint.h:7
unsigned char uint_fast8_t
Definition stdint.h:23
unsigned uint32_t
Definition stdint.h:9
int int32_t
Definition stdint.h:8
unsigned int uint_fast32_t
Definition stdint.h:27
short int16_t
Definition stdint.h:6
unsigned short uint_fast16_t
Definition stdint.h:25
unsigned char uint8_t
Definition stdint.h:5
short int_fast16_t
Definition stdint.h:24
Definition usb.h:152
Definition usb_common.h:203
Definition usb_common.h:85
Definition usb_common.h:185
Definition usb_common.h:240
Definition usb_common.h:227
Definition vsf_usbh.h:279
vsf_slist_node_t node
Definition vsf_usbh.h:281
const vk_usbh_class_drv_t * drv
Definition vsf_usbh.h:280
Definition vsf_usbh.h:188
uint16_t match_dev_lo
Definition vsf_usbh.h:193
uint16_t match_ifs_subclass
Definition vsf_usbh.h:199
uint16_t match_ifs_protocol
Definition vsf_usbh.h:200
uint8_t bDeviceProtocol
Definition vsf_usbh.h:213
uint16_t match_dev_protocol
Definition vsf_usbh.h:197
uint16_t match_ifs_class
Definition vsf_usbh.h:198
uint16_t match_flags
Definition vsf_usbh.h:204
uint8_t bInterfaceNumber
Definition vsf_usbh.h:217
uint16_t match_dev_hi
Definition vsf_usbh.h:194
uint16_t match_vendor
Definition vsf_usbh.h:191
uint16_t match_dev_subclass
Definition vsf_usbh.h:196
uint16_t idVendor
Definition vsf_usbh.h:208
uint8_t bDeviceSubClass
Definition vsf_usbh.h:212
uint16_t bcdDevice_lo
Definition vsf_usbh.h:210
uint16_t match_ifs_num
Definition vsf_usbh.h:201
uint8_t bInterfaceProtocol
Definition vsf_usbh.h:216
uint16_t bcdDevice_hi
Definition vsf_usbh.h:210
uint8_t bDeviceClass
Definition vsf_usbh.h:211
uint8_t bInterfaceSubClass
Definition vsf_usbh.h:215
uint16_t match_product
Definition vsf_usbh.h:192
uint16_t idProduct
Definition vsf_usbh.h:209
uint16_t match_dev_class
Definition vsf_usbh.h:195
uint8_t bInterfaceClass
Definition vsf_usbh.h:214
Definition vsf_usbh.h:234
vk_usbh_ifs_parser_t * parser_ifs
Definition vsf_usbh.h:237
struct usb_device_desc_t * desc_device
Definition vsf_usbh.h:235
@ VSF_USBH_PROBE_WAIT_SET_CONFIG
Definition vsf_usbh.h:251
@ VSF_USBH_PROBE_WAIT_CONFIG_DESC_SIZE
Definition vsf_usbh.h:249
@ VSF_USBH_PROBE_WAIT_SET_ADDRESS
Definition vsf_usbh.h:246
@ VSF_USBH_PROBE_WAIT_ADDRESS_STABLE
Definition vsf_usbh.h:247
@ VSF_USBH_PROBE_WAIT_FULL_CONFIG_DESC
Definition vsf_usbh.h:250
@ VSF_USBH_PROBE_WAIT_DEVICE_RESET
Definition vsf_usbh.h:245
@ VSF_USBH_PROBE_WAIT_DEVICE_DESC
Definition vsf_usbh.h:244
@ VSF_USBH_PROBE_WAIT_FULL_DEVICE_DESC
Definition vsf_usbh.h:248
@ VSF_USBH_PROBE_START
Definition vsf_usbh.h:243
uint8_t num_of_ifs
Definition vsf_usbh.h:238
uint8_t devnum_temp
Definition vsf_usbh.h:239
enum vk_usbh_dev_parser_t::@279 probe_state
uint8_t no_set_configuration
Definition vsf_usbh.h:241
struct usb_config_desc_t * desc_config
Definition vsf_usbh.h:236
uint8_t is_to_retry
Definition vsf_usbh.h:240
Definition vsf_usbh.h:473
vk_usbh_urb_t urb
Definition vsf_usbh.h:475
__vsf_crit_npb_t crit
Definition vsf_usbh.h:474
Definition vsf_usbh.h:360
int32_t status
Definition vsf_usbh.h:364
uint32_t offset
Definition vsf_usbh.h:361
uint32_t length
Definition vsf_usbh.h:362
uint32_t actual_length
Definition vsf_usbh.h:363
Definition vsf_usbh.h:367
uint32_t start_frame
Definition vsf_usbh.h:368
vk_usbh_hcd_iso_packet_descriptor_t frame_desc[VSF_USBH_CFG_ISO_PACKET_LIMIT]
Definition vsf_usbh.h:371
uint32_t number_of_packets
Definition vsf_usbh.h:369
Definition vsf_usbh.h:221
struct usb_interface_desc_t * desc_ifs
Definition vsf_usbh.h:222
uint16_t desc_size
Definition vsf_usbh.h:224
struct usb_endpoint_desc_t * desc_ep
Definition vsf_usbh.h:223
uint8_t num_of_ep
Definition vsf_usbh.h:225
Definition vsf_usbh.h:228
const vk_usbh_dev_id_t * id
Definition vsf_usbh.h:231
vk_usbh_ifs_alt_parser_t * parser_alt
Definition vsf_usbh.h:229
vk_usbh_ifs_t * ifs
Definition vsf_usbh.h:230
Definition vsf_usbh.h:179
uint8_t cur_alt
Definition vsf_usbh.h:185
void * param
Definition vsf_usbh.h:181
uint8_t no
Definition vsf_usbh.h:183
const vk_usbh_class_drv_t * drv
Definition vsf_usbh.h:180
uint8_t num_of_alt
Definition vsf_usbh.h:184
Definition vsf_usbh.h:299
uint16_t last_frame
Definition vsf_usbh.h:302
void * extra
Definition vsf_usbh.h:304
vk_usbh_pipe_flag_t uint16_t interval
Definition vsf_usbh.h:301
Definition vsf_list.h:876
Definition vsf_list.h:872
Definition vsf_usbh.h:284
uint32_t speed
Definition vsf_usbh.h:290
uint32_t is_pipe
Definition vsf_usbh.h:286
uint32_t size
Definition vsf_usbh.h:287
uint32_t value
Definition vsf_usbh.h:296
uint32_t toggle
Definition vsf_usbh.h:293
uint32_t is_submitted
Definition vsf_usbh.h:294
uint32_t type
Definition vsf_usbh.h:289
uint32_t endpoint
Definition vsf_usbh.h:288
uint32_t dir_in1out0
Definition vsf_usbh.h:292
uint32_t address
Definition vsf_usbh.h:291
#define pipe
Definition unistd.h:84
usb_device_speed_t
Definition usb_common.h:267
vk_av_control_type_t type
Definition vsf_audio.h:170
#define vsf_declare_bitmap(__name, __bit_size)
Definition vsf_bitmap.h:95
#define vsf_bitmap(__name)
Definition vsf_bitmap.h:93
int16_t vsf_evt_t
Definition vsf_eda.h:654
uint_fast32_t alignment
Definition vsf_heap.h:135
uint32_t size
Definition vsf_memfs.h:50
uint8_t status
Definition vsf_tgui.h:122
vsf_err_t vk_usbh_clear_endpoint_feature(vk_usbh_t *usbh, vk_usbh_dev_t *dev, uint_fast8_t endpoint, uint_fast8_t feature)
Definition vsf_usbh.c:898
void * vk_usbh_urb_take_buffer(vk_usbh_urb_t *urb)
Definition vsf_usbh.c:463
vsf_err_t vk_usbh_clear_endpoint_halt(vk_usbh_t *usbh, vk_usbh_dev_t *dev, uint_fast8_t endpoint)
Definition vsf_usbh.c:911
vsf_err_t vk_usbh_get_descriptor(vk_usbh_t *usbh, vk_usbh_dev_t *dev, uint_fast8_t type, uint_fast8_t index, uint_fast16_t size)
Definition vsf_usbh.c:832
vsf_err_t vk_usbh_get_class_descriptor(vk_usbh_t *usbh, vk_usbh_dev_t *dev, uint_fast16_t ifs_no, uint_fast8_t type, uint_fast8_t id, uint_fast16_t size)
Definition vsf_usbh.c:845
vsf_err_t vk_usbh_alloc_urb(vk_usbh_t *usbh, vk_usbh_dev_t *dev, vk_usbh_urb_t *urb)
Definition vsf_usbh.c:401
void vk_usbh_urb_prepare(vk_usbh_urb_t *urb, vk_usbh_dev_t *dev, struct usb_endpoint_desc_t *desc_ep)
Definition vsf_usbh.c:192
void vk_usbh_remove_interface(vk_usbh_t *usbh, vk_usbh_dev_t *dev, vk_usbh_ifs_t *ifs)
Definition vsf_usbh.c:500
vsf_err_t vk_usbh_clear_interface_feature(vk_usbh_t *usbh, vk_usbh_dev_t *dev, uint_fast8_t ifs, uint_fast8_t feature)
Definition vsf_usbh.c:885
vsf_err_t vk_usbh_submit_urb_flags(vk_usbh_t *usbh, vk_usbh_urb_t *urb, uint_fast16_t flags)
Definition vsf_usbh.c:733
void vk_usbh_urb_set_complete(vk_usbh_urb_t *urb, vsf_usbh_urb_complete_t complete, void *param)
Definition vsf_usbh.c:493
void vk_usbh_urb_set_buffer(vk_usbh_urb_t *urb, void *buffer, uint_fast32_t size)
Definition vsf_usbh.c:471
vsf_err_t vk_usbh_submit_urb(vk_usbh_t *usbh, vk_usbh_urb_t *urb)
Definition vsf_usbh.c:727
vk_usbh_dev_t * vk_usbh_new_device(vk_usbh_t *usbh, enum usb_device_speed_t speed, vk_usbh_dev_t *dev_parent, uint_fast8_t idx)
Definition vsf_usbh.c:306
void vk_usbh_unlink_urb(vk_usbh_t *usbh, vk_usbh_urb_t *urb)
Definition vsf_usbh.c:421
bool vk_usbh_urb_is_alloced(vk_usbh_urb_t *urb)
Definition vsf_usbh.c:205
uint_fast32_t vk_usbh_urb_get_actual_length(vk_usbh_urb_t *urb)
Definition vsf_usbh.c:487
vsf_err_t vk_usbh_control_msg(vk_usbh_t *usbh, vk_usbh_dev_t *dev, struct usb_ctrlrequest_t *req)
Definition vsf_usbh.c:800
usb_endpoint_desc_t * vk_usbh_get_next_ep_descriptor(usb_endpoint_desc_t *desc_ep, uint_fast16_t size)
Definition vsf_usbh.c:1388
enum usb_device_speed_t vk_usbh_get_dev_speed(vk_usbh_dev_t *dev)
Definition vsf_usbh.c:346
uint_fast16_t vk_usbh_get_frame(vk_usbh_t *usbh)
Definition vsf_usbh.c:278
vsf_err_t vk_usbh_submit_urb_ex(vk_usbh_t *usbh, vk_usbh_urb_t *urb, uint_fast16_t flags, vsf_eda_t *eda)
Definition vsf_usbh.c:740
vsf_err_t vk_usbh_set_configuration(vk_usbh_t *usbh, vk_usbh_dev_t *dev, uint_fast8_t configuration)
Definition vsf_usbh.c:859
void vk_usbh_reset_dev(vk_usbh_t *usbh, vk_usbh_dev_t *dev)
Definition vsf_usbh.c:351
void vk_usbh_urb_set_pipe(vk_usbh_urb_t *urb, vk_usbh_pipe_t pipe)
Definition vsf_usbh.c:221
void * vk_usbh_urb_alloc_buffer(vk_usbh_urb_t *urb, uint_fast16_t size)
Definition vsf_usbh.c:452
void vk_usbh_update_address(vk_usbh_dev_t *dev, uint_fast8_t address)
Definition vsf_usbh.c:386
void vk_usbh_hcd_urb_complete(vk_usbh_hcd_urb_t *hcd_urb)
Definition vsf_usbh.c:247
int16_t vk_usbh_get_extra_descriptor(uint8_t *buf, uint_fast16_t size, uint_fast8_t type, void **ptr)
Definition vsf_usbh.c:1363
vk_usbh_pipe_t __vk_usbh_get_pipe(vk_usbh_dev_t *dev, uint8_t endpoint, uint8_t type, uint16_t size, uint8_t interval)
Definition vsf_usbh.c:160
vsf_err_t vk_usbh_submit_urb_iso(vk_usbh_t *usbh, vk_usbh_urb_t *urb, uint_fast16_t start_frame)
Definition vsf_usbh.c:748
vk_usbh_pipe_t vk_usbh_urb_get_pipe(vk_usbh_urb_t *urb)
Definition vsf_usbh.c:211
void vk_usbh_free_urb(vk_usbh_t *usbh, vk_usbh_urb_t *urb)
Definition vsf_usbh.c:431
void * vk_usbh_urb_peek_buffer(vk_usbh_urb_t *urb)
Definition vsf_usbh.c:458
void vk_usbh_urb_prepare_by_pipe(vk_usbh_urb_t *urb, vk_usbh_dev_t *dev, vk_usbh_pipe_t pipe)
Definition vsf_usbh.c:186
void vk_usbh_hcd_urb_free_buffer(vk_usbh_hcd_urb_t *urb_hcd)
Definition vsf_usbh.c:238
void vk_usbh_disconnect_device(vk_usbh_t *usbh, vk_usbh_dev_t *dev)
Definition vsf_usbh.c:544
void vk_usbh_urb_free_buffer(vk_usbh_urb_t *urb)
Definition vsf_usbh.c:444
vsf_err_t vk_usbh_set_interface(vk_usbh_t *usbh, vk_usbh_dev_t *dev, uint_fast8_t ifs, uint_fast8_t alternate)
Definition vsf_usbh.c:872
bool vk_usbh_is_dev_resetting(vk_usbh_t *usbh, vk_usbh_dev_t *dev)
Definition vsf_usbh.c:369
vk_usbh_pipe_t vk_usbh_get_pipe_from_ep_desc(vk_usbh_dev_t *dev, struct usb_endpoint_desc_t *desc_ep)
Definition vsf_usbh.c:179
bool vk_usbh_urb_is_valid(vk_usbh_urb_t *urb)
Definition vsf_usbh.c:199
vsf_err_t vk_usbh_control_msg_ex(vk_usbh_t *usbh, vk_usbh_dev_t *dev, struct usb_ctrlrequest_t *req, uint_fast16_t flags, vsf_eda_t *eda)
Definition vsf_usbh.c:810
int_fast16_t vk_usbh_urb_get_status(vk_usbh_urb_t *urb)
Definition vsf_usbh.c:481
@ URB_OK
Definition vsf_usbh.h:163
@ URB_TIMEOUT
Definition vsf_usbh.h:167
@ URB_PENDING
Definition vsf_usbh.h:165
@ URB_FAIL
Definition vsf_usbh.h:164
@ URB_CANCELED
Definition vsf_usbh.h:166
vsf_err_t vk_usbh_init(vk_usbh_t *usbh)
Definition vsf_usbh.c:1320
void vk_usbh_register_class(vk_usbh_t *usbh, vk_usbh_class_t *c)
Definition vsf_usbh.c:1357
#define vsf_usbh_malloc
Definition vsf_usbh.h:98
#define vsf_usbh_free
Definition vsf_usbh.h:108
vsf_err_t vk_usbh_fini(vk_usbh_t *usbh)
Definition vsf_usbh.c:1341
#define vsf_usbh_malloc_aligned
Definition vsf_usbh.h:103
#define VSF_USBH_CFG_MAX_DEVICE
Definition vsf_usbh.h:86
@ URB_ZERO_PACKET
Definition vsf_usbh.h:174
@ __URB_NEED_FREE
Definition vsf_usbh.h:175
@ URB_SHORT_NOT_OK
Definition vsf_usbh.h:172
@ URB_HCD_SPECIFIED_FLAGS
Definition vsf_usbh.h:176
@ URB_ISO_ASAP
Definition vsf_usbh.h:173
void(* vsf_usbh_urb_complete_t)(void *param, vk_usbh_hcd_urb_t *)
Definition vsf_usbh.h:395
#define VSF_USBH_CFG_ISO_PACKET_LIMIT
Definition vsf_usbh.h:77
void vk_usbh_unregister_class(vk_usbh_t *usbh, vk_usbh_class_t *c)
Definition vsf_usbh.c:1347