summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2024-10-11 12:58:18 +0700
committerhathach <[email protected]>2024-10-11 13:41:53 +0700
commit92602b9de3675c2d3e240bcd0838082e1a07b13b (patch)
tree69c07f1d49d9d37223a679f1956ba7c8588bdcb6
parenta4fb8354e41b2604f66e7da22afa292b1a44f0a2 (diff)
change tusb_init(), tusb_rhport_init() to use init struct for expandability
-rw-r--r--examples/device/audio_4_channel_mic/src/main.c7
-rw-r--r--examples/device/audio_4_channel_mic_freertos/src/main.c7
-rw-r--r--examples/device/audio_test/src/main.c7
-rw-r--r--examples/device/audio_test_freertos/src/main.c7
-rw-r--r--examples/device/audio_test_multi_rate/src/main.c7
-rw-r--r--examples/device/cdc_dual_ports/src/main.c7
-rw-r--r--examples/device/cdc_msc/src/main.c7
-rw-r--r--examples/device/cdc_msc_freertos/src/main.c7
-rw-r--r--examples/device/cdc_uac2/src/main.c7
-rw-r--r--examples/device/dfu/src/main.c7
-rw-r--r--examples/device/dfu_runtime/src/main.c7
-rw-r--r--examples/device/dynamic_configuration/src/main.c7
-rw-r--r--examples/device/hid_boot_interface/src/main.c7
-rw-r--r--examples/device/hid_composite/src/main.c7
-rw-r--r--examples/device/hid_composite_freertos/src/main.c7
-rw-r--r--examples/device/hid_generic_inout/src/main.c7
-rw-r--r--examples/device/hid_multiple_interface/src/main.c7
-rw-r--r--examples/device/midi_test/src/main.c7
-rw-r--r--examples/device/msc_dual_lun/src/main.c7
-rw-r--r--examples/device/net_lwip_webserver/src/main.c7
-rw-r--r--examples/device/uac2_headset/src/main.c7
-rw-r--r--examples/device/uac2_speaker_fb/src/main.c7
-rw-r--r--examples/device/usbtmc/src/main.c7
-rw-r--r--examples/device/video_capture/src/main.c14
-rw-r--r--examples/device/video_capture_2ch/src/main.c14
-rw-r--r--examples/device/webusb_serial/src/main.c7
-rw-r--r--examples/dual/host_hid_to_device_cdc/src/main.c15
-rw-r--r--examples/dual/host_info_to_device_cdc/src/main.c15
-rw-r--r--examples/host/bare_api/src/main.c7
-rw-r--r--examples/host/cdc_msc_hid/src/main.c7
-rw-r--r--examples/host/cdc_msc_hid_freertos/src/main.c8
-rw-r--r--examples/host/device_info/src/main.c7
-rw-r--r--examples/host/hid_controller/src/main.c7
-rw-r--r--examples/host/msc_file_explorer/src/main.c7
-rw-r--r--src/common/tusb_common.h2
-rw-r--r--src/common/tusb_compiler.h8
-rw-r--r--src/common/tusb_types.h10
-rw-r--r--src/common/tusb_verify.h3
-rw-r--r--src/device/usbd.c17
-rw-r--r--src/device/usbd.h15
-rw-r--r--src/host/usbh.c16
-rw-r--r--src/host/usbh.h22
-rw-r--r--src/tusb.c34
-rw-r--r--src/tusb.h16
-rw-r--r--test/unit-test/test/device/msc/test_msc_device.c8
-rw-r--r--test/unit-test/test/device/usbd/test_usbd.c8
46 files changed, 348 insertions, 80 deletions
diff --git a/examples/device/audio_4_channel_mic/src/main.c b/examples/device/audio_4_channel_mic/src/main.c
index 6c75d95bf..ca0e67fae 100644
--- a/examples/device/audio_4_channel_mic/src/main.c
+++ b/examples/device/audio_4_channel_mic/src/main.c
@@ -86,7 +86,12 @@ int main(void)
board_init();
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/audio_4_channel_mic_freertos/src/main.c b/examples/device/audio_4_channel_mic_freertos/src/main.c
index d24113df6..c1ebc4899 100644
--- a/examples/device/audio_4_channel_mic_freertos/src/main.c
+++ b/examples/device/audio_4_channel_mic_freertos/src/main.c
@@ -209,7 +209,12 @@ void usb_device_task(void* param)
// init device stack on configured roothub port
// This should be called after scheduler/kernel is started.
// Otherwise it could cause kernel issue since USB IRQ handler does use RTOS queue API.
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/audio_test/src/main.c b/examples/device/audio_test/src/main.c
index 9702060e0..f4c1bf95f 100644
--- a/examples/device/audio_test/src/main.c
+++ b/examples/device/audio_test/src/main.c
@@ -79,7 +79,12 @@ int main(void)
board_init();
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/audio_test_freertos/src/main.c b/examples/device/audio_test_freertos/src/main.c
index 3d9166263..b7d7dc042 100644
--- a/examples/device/audio_test_freertos/src/main.c
+++ b/examples/device/audio_test_freertos/src/main.c
@@ -156,7 +156,12 @@ void usb_device_task(void* param)
// init device stack on configured roothub port
// This should be called after scheduler/kernel is started.
// Otherwise it could cause kernel issue since USB IRQ handler does use RTOS queue API.
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/audio_test_multi_rate/src/main.c b/examples/device/audio_test_multi_rate/src/main.c
index 99b81f74d..a1c4d32db 100644
--- a/examples/device/audio_test_multi_rate/src/main.c
+++ b/examples/device/audio_test_multi_rate/src/main.c
@@ -97,7 +97,12 @@ int main(void)
board_init();
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/cdc_dual_ports/src/main.c b/examples/device/cdc_dual_ports/src/main.c
index 07f41371a..b446bca0b 100644
--- a/examples/device/cdc_dual_ports/src/main.c
+++ b/examples/device/cdc_dual_ports/src/main.c
@@ -52,7 +52,12 @@ int main(void) {
board_init();
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/cdc_msc/src/main.c b/examples/device/cdc_msc/src/main.c
index a1f178e2a..47ba5a887 100644
--- a/examples/device/cdc_msc/src/main.c
+++ b/examples/device/cdc_msc/src/main.c
@@ -51,7 +51,12 @@ int main(void) {
board_init();
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/cdc_msc_freertos/src/main.c b/examples/device/cdc_msc_freertos/src/main.c
index b84b33a8c..a08e063ac 100644
--- a/examples/device/cdc_msc_freertos/src/main.c
+++ b/examples/device/cdc_msc_freertos/src/main.c
@@ -132,7 +132,12 @@ static void usb_device_task(void *param) {
// init device stack on configured roothub port
// This should be called after scheduler/kernel is started.
// Otherwise it could cause kernel issue since USB IRQ handler does use RTOS queue API.
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/cdc_uac2/src/main.c b/examples/device/cdc_uac2/src/main.c
index a75ec1427..384d910ec 100644
--- a/examples/device/cdc_uac2/src/main.c
+++ b/examples/device/cdc_uac2/src/main.c
@@ -46,7 +46,12 @@ int main(void)
board_init();
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
#if (CFG_TUSB_MCU == OPT_MCU_RP2040)
stdio_init_all();
diff --git a/examples/device/dfu/src/main.c b/examples/device/dfu/src/main.c
index 5efec9d32..f2aea7cfc 100644
--- a/examples/device/dfu/src/main.c
+++ b/examples/device/dfu/src/main.c
@@ -75,7 +75,12 @@ int main(void)
board_init();
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/dfu_runtime/src/main.c b/examples/device/dfu_runtime/src/main.c
index c21034fc1..5d6b907b7 100644
--- a/examples/device/dfu_runtime/src/main.c
+++ b/examples/device/dfu_runtime/src/main.c
@@ -70,7 +70,12 @@ int main(void)
board_init();
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/dynamic_configuration/src/main.c b/examples/device/dynamic_configuration/src/main.c
index bc9ab0b2b..143570c5c 100644
--- a/examples/device/dynamic_configuration/src/main.c
+++ b/examples/device/dynamic_configuration/src/main.c
@@ -57,7 +57,12 @@ int main(void)
board_init();
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/hid_boot_interface/src/main.c b/examples/device/hid_boot_interface/src/main.c
index 351a60854..dfee7421d 100644
--- a/examples/device/hid_boot_interface/src/main.c
+++ b/examples/device/hid_boot_interface/src/main.c
@@ -57,7 +57,12 @@ int main(void)
board_init();
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/hid_composite/src/main.c b/examples/device/hid_composite/src/main.c
index 8f7873ee3..56c485982 100644
--- a/examples/device/hid_composite/src/main.c
+++ b/examples/device/hid_composite/src/main.c
@@ -58,7 +58,12 @@ int main(void)
board_init();
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/hid_composite_freertos/src/main.c b/examples/device/hid_composite_freertos/src/main.c
index d1842368b..fc07a1a39 100644
--- a/examples/device/hid_composite_freertos/src/main.c
+++ b/examples/device/hid_composite_freertos/src/main.c
@@ -136,7 +136,12 @@ void usb_device_task(void* param)
// init device stack on configured roothub port
// This should be called after scheduler/kernel is started.
// Otherwise it could cause kernel issue since USB IRQ handler does use RTOS queue API.
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/hid_generic_inout/src/main.c b/examples/device/hid_generic_inout/src/main.c
index 03de8bfee..1bbcbf7a4 100644
--- a/examples/device/hid_generic_inout/src/main.c
+++ b/examples/device/hid_generic_inout/src/main.c
@@ -81,7 +81,12 @@ int main(void)
board_init();
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/hid_multiple_interface/src/main.c b/examples/device/hid_multiple_interface/src/main.c
index 0b7544fe0..edcedd3ca 100644
--- a/examples/device/hid_multiple_interface/src/main.c
+++ b/examples/device/hid_multiple_interface/src/main.c
@@ -62,7 +62,12 @@ int main(void)
board_init();
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/midi_test/src/main.c b/examples/device/midi_test/src/main.c
index 84ca1d944..b05307d1b 100644
--- a/examples/device/midi_test/src/main.c
+++ b/examples/device/midi_test/src/main.c
@@ -63,7 +63,12 @@ int main(void)
board_init();
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/msc_dual_lun/src/main.c b/examples/device/msc_dual_lun/src/main.c
index 9b0930ce0..fe3896ca7 100644
--- a/examples/device/msc_dual_lun/src/main.c
+++ b/examples/device/msc_dual_lun/src/main.c
@@ -54,7 +54,12 @@ int main(void) {
board_init();
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/net_lwip_webserver/src/main.c b/examples/device/net_lwip_webserver/src/main.c
index dbd7746b0..6041b56e2 100644
--- a/examples/device/net_lwip_webserver/src/main.c
+++ b/examples/device/net_lwip_webserver/src/main.c
@@ -216,7 +216,12 @@ int main(void) {
board_init();
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/uac2_headset/src/main.c b/examples/device/uac2_headset/src/main.c
index 73616109f..4d28f73a4 100644
--- a/examples/device/uac2_headset/src/main.c
+++ b/examples/device/uac2_headset/src/main.c
@@ -100,7 +100,12 @@ int main(void)
board_init();
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/uac2_speaker_fb/src/main.c b/examples/device/uac2_speaker_fb/src/main.c
index 21c2ac24a..1250b041d 100644
--- a/examples/device/uac2_speaker_fb/src/main.c
+++ b/examples/device/uac2_speaker_fb/src/main.c
@@ -106,7 +106,12 @@ int main(void)
board_init();
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/usbtmc/src/main.c b/examples/device/usbtmc/src/main.c
index 8dbded632..2af581bc1 100644
--- a/examples/device/usbtmc/src/main.c
+++ b/examples/device/usbtmc/src/main.c
@@ -55,7 +55,12 @@ int main(void)
board_init();
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/video_capture/src/main.c b/examples/device/video_capture/src/main.c
index 4b8877a2f..c5d87c660 100644
--- a/examples/device/video_capture/src/main.c
+++ b/examples/device/video_capture/src/main.c
@@ -68,7 +68,12 @@ int main(void) {
freertos_init_task();
#else
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
@@ -319,7 +324,12 @@ void usb_device_task(void *param) {
// init device stack on configured roothub port
// This should be called after scheduler/kernel is started.
// Otherwise, it could cause kernel issue since USB IRQ handler does use RTOS queue API.
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/video_capture_2ch/src/main.c b/examples/device/video_capture_2ch/src/main.c
index 118ee669d..a45e62ab0 100644
--- a/examples/device/video_capture_2ch/src/main.c
+++ b/examples/device/video_capture_2ch/src/main.c
@@ -68,7 +68,12 @@ int main(void) {
freertos_init_task();
#else
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
@@ -327,7 +332,12 @@ void usb_device_task(void *param) {
// init device stack on configured roothub port
// This should be called after scheduler/kernel is started.
// Otherwise, it could cause kernel issue since USB IRQ handler does use RTOS queue API.
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/device/webusb_serial/src/main.c b/examples/device/webusb_serial/src/main.c
index e809c6319..46215ec13 100644
--- a/examples/device/webusb_serial/src/main.c
+++ b/examples/device/webusb_serial/src/main.c
@@ -91,7 +91,12 @@ int main(void) {
board_init();
// init device stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/dual/host_hid_to_device_cdc/src/main.c b/examples/dual/host_hid_to_device_cdc/src/main.c
index ce586201c..061958aae 100644
--- a/examples/dual/host_hid_to_device_cdc/src/main.c
+++ b/examples/dual/host_hid_to_device_cdc/src/main.c
@@ -79,8 +79,19 @@ int main(void) {
printf("TinyUSB Host HID <-> Device CDC Example\r\n");
// init device and host stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
- tusb_init(BOARD_TUH_RHPORT, TUSB_ROLE_HOST);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
+
+ tusb_rhport_init_t host_init = {
+ .rhport = BOARD_TUH_RHPORT,
+ .role = TUSB_ROLE_HOST,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&host_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/dual/host_info_to_device_cdc/src/main.c b/examples/dual/host_info_to_device_cdc/src/main.c
index 7a862f5ad..e4d802a0c 100644
--- a/examples/dual/host_info_to_device_cdc/src/main.c
+++ b/examples/dual/host_info_to_device_cdc/src/main.c
@@ -82,8 +82,19 @@ int main(void) {
printf("TinyUSB Host Information -> Device CDC Example\r\n");
// init device and host stack on configured roothub port
- tusb_init(BOARD_TUD_RHPORT, TUSB_ROLE_DEVICE);
- tusb_init(BOARD_TUH_RHPORT, TUSB_ROLE_HOST);
+ tusb_rhport_init_t dev_init = {
+ .rhport = BOARD_TUD_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
+
+ tusb_rhport_init_t host_init = {
+ .rhport = BOARD_TUH_RHPORT,
+ .role = TUSB_ROLE_HOST,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&host_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/host/bare_api/src/main.c b/examples/host/bare_api/src/main.c
index f248dd28d..e710e3caa 100644
--- a/examples/host/bare_api/src/main.c
+++ b/examples/host/bare_api/src/main.c
@@ -62,7 +62,12 @@ int main(void)
printf("TinyUSB Bare API Example\r\n");
// init host stack on configured roothub port
- tusb_init(BOARD_TUH_RHPORT, TUSB_ROLE_HOST);
+ tusb_rhport_init_t host_init = {
+ .rhport = BOARD_TUH_RHPORT,
+ .role = TUSB_ROLE_HOST,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&host_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/host/cdc_msc_hid/src/main.c b/examples/host/cdc_msc_hid/src/main.c
index 65f7b5201..3a6e762b7 100644
--- a/examples/host/cdc_msc_hid/src/main.c
+++ b/examples/host/cdc_msc_hid/src/main.c
@@ -50,7 +50,12 @@ int main(void) {
printf("TinyUSB Host CDC MSC HID Example\r\n");
// init host stack on configured roothub port
- tusb_init(BOARD_TUH_RHPORT, TUSB_ROLE_HOST);
+ tusb_rhport_init_t host_init = {
+ .rhport = BOARD_TUH_RHPORT,
+ .role = TUSB_ROLE_HOST,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&host_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/host/cdc_msc_hid_freertos/src/main.c b/examples/host/cdc_msc_hid_freertos/src/main.c
index 2116e6dcf..9d2f347c3 100644
--- a/examples/host/cdc_msc_hid_freertos/src/main.c
+++ b/examples/host/cdc_msc_hid_freertos/src/main.c
@@ -126,7 +126,13 @@ static void usb_host_task(void *param) {
(void) param;
// init host stack on configured roothub port
- if (!tusb_init(BOARD_TUH_RHPORT, TUSB_ROLE_HOST)) {
+ tusb_rhport_init_t host_init = {
+ .rhport = BOARD_TUH_RHPORT,
+ .role = TUSB_ROLE_HOST,
+ .speed = TUSB_SPEED_AUTO
+ };
+
+ if (!tusb_init(&host_init)) {
printf("Failed to init USB Host Stack\r\n");
vTaskSuspend(NULL);
}
diff --git a/examples/host/device_info/src/main.c b/examples/host/device_info/src/main.c
index 55d685a5d..8ca3d8a3a 100644
--- a/examples/host/device_info/src/main.c
+++ b/examples/host/device_info/src/main.c
@@ -66,7 +66,12 @@ int main(void) {
printf("TinyUSB Device Info Example\r\n");
// init host stack on configured roothub port
- tusb_init(BOARD_TUH_RHPORT, TUSB_ROLE_HOST);
+ tusb_rhport_init_t host_init = {
+ .rhport = BOARD_TUH_RHPORT,
+ .role = TUSB_ROLE_HOST,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&host_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/host/hid_controller/src/main.c b/examples/host/hid_controller/src/main.c
index 76b686683..6db47792c 100644
--- a/examples/host/hid_controller/src/main.c
+++ b/examples/host/hid_controller/src/main.c
@@ -52,7 +52,12 @@ int main(void)
printf("Note: Events only displayed for explicit supported controllers\r\n");
// init host stack on configured roothub port
- tusb_init(BOARD_TUH_RHPORT, TUSB_ROLE_HOST);
+ tusb_rhport_init_t host_init = {
+ .rhport = BOARD_TUH_RHPORT,
+ .role = TUSB_ROLE_HOST,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&host_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/examples/host/msc_file_explorer/src/main.c b/examples/host/msc_file_explorer/src/main.c
index 3af079b0e..11512ab65 100644
--- a/examples/host/msc_file_explorer/src/main.c
+++ b/examples/host/msc_file_explorer/src/main.c
@@ -78,7 +78,12 @@ int main(void) {
printf("TinyUSB Host MassStorage Explorer Example\r\n");
// init host stack on configured roothub port
- tusb_init(BOARD_TUH_RHPORT, TUSB_ROLE_HOST);
+ tusb_rhport_init_t host_init = {
+ .rhport = BOARD_TUH_RHPORT,
+ .role = TUSB_ROLE_HOST,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&host_init);
if (board_init_after_tusb) {
board_init_after_tusb();
diff --git a/src/common/tusb_common.h b/src/common/tusb_common.h
index 0d4082c03..d3e0cf888 100644
--- a/src/common/tusb_common.h
+++ b/src/common/tusb_common.h
@@ -79,7 +79,7 @@
//--------------------------------------------------------------------+
// Optional API implemented by application if needed
-// TODO move to a more ovious place/file
+// TODO move to a more obvious place/file
//--------------------------------------------------------------------+
// flush data cache
diff --git a/src/common/tusb_compiler.h b/src/common/tusb_compiler.h
index ce5566ffe..646c22b29 100644
--- a/src/common/tusb_compiler.h
+++ b/src/common/tusb_compiler.h
@@ -119,6 +119,14 @@
#define _TU_ARGS_APPLY_8(_X, _s, _a1, _a2, _a3, _a4, _a5, _a6, _a7, _a8) _X(_a1) _s _TU_ARGS_APPLY_7(_X, _s, _a2, _a3, _a4, _a5, _a6, _a7, _a8)
//--------------------------------------------------------------------+
+// Macro for function default arguments
+//--------------------------------------------------------------------+
+#define TU_GET_3RD_ARG(arg1, arg2, arg3, ...) arg3
+
+// function expand with number of arguments
+#define TU_FUNC_OPTIONAL_ARG(func, ...) TU_XSTRCAT(func##_arg, TU_ARGS_NUM(__VA_ARGS__))(__VA_ARGS__)
+
+//--------------------------------------------------------------------+
// Compiler porting with Attribute and Endian
//--------------------------------------------------------------------+
diff --git a/src/common/tusb_types.h b/src/common/tusb_types.h
index adf4b5720..5dfe3ff98 100644
--- a/src/common/tusb_types.h
+++ b/src/common/tusb_types.h
@@ -50,6 +50,7 @@ typedef enum {
TUSB_SPEED_FULL = 0,
TUSB_SPEED_LOW = 1,
TUSB_SPEED_HIGH = 2,
+ TUSB_SPEED_AUTO = 0xaa,
TUSB_SPEED_INVALID = 0xff,
} tusb_speed_t;
@@ -274,6 +275,15 @@ enum {
};
//--------------------------------------------------------------------+
+//
+//--------------------------------------------------------------------+
+typedef struct {
+ uint8_t rhport;
+ tusb_role_t role;
+ tusb_speed_t speed;
+} tusb_rhport_init_t;
+
+//--------------------------------------------------------------------+
// USB Descriptors
//--------------------------------------------------------------------+
diff --git a/src/common/tusb_verify.h b/src/common/tusb_verify.h
index 8ad218b03..3e0f1f106 100644
--- a/src/common/tusb_verify.h
+++ b/src/common/tusb_verify.h
@@ -93,9 +93,6 @@
#define TU_BREAKPOINT() do {} while (0)
#endif
-// Helper to implement optional parameter for TU_VERIFY Macro family
-#define TU_GET_3RD_ARG(arg1, arg2, arg3, ...) arg3
-
/*------------------------------------------------------------------*/
/* TU_VERIFY
* - TU_VERIFY_1ARGS : return false if failed
diff --git a/src/device/usbd.c b/src/device/usbd.c
index 6fe7e416e..7e35c976c 100644
--- a/src/device/usbd.c
+++ b/src/device/usbd.c
@@ -448,11 +448,14 @@ bool tud_inited(void) {
return _usbd_rhport != RHPORT_INVALID;
}
-bool tud_init(uint8_t rhport) {
- // skip if already initialized
- if (tud_inited()) return true;
+bool tud_rhport_init(const tusb_rhport_init_t* rh_init) {
+ if (tud_inited()) {
+ return true; // skip if already initialized
+ }
+ TU_ASSERT(rh_init);
- TU_LOG_USBD("USBD init on controller %u, Highspeed = %u\r\n", rhport, TUD_OPT_HIGH_SPEED);
+ TU_LOG_USBD("USBD init on controller %u, speed = %s\r\n", rh_init->rhport,
+ rh_init->speed == TUSB_SPEED_HIGH ? "High" : "Full");
TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(usbd_device_t));
TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(dcd_event_t));
TU_LOG_INT(CFG_TUD_LOG_LEVEL, sizeof(tu_fifo_t));
@@ -484,11 +487,11 @@ bool tud_init(uint8_t rhport) {
driver->init();
}
- _usbd_rhport = rhport;
+ _usbd_rhport = rh_init->rhport;
// Init device controller driver
- dcd_init(rhport);
- dcd_int_enable(rhport);
+ dcd_init(rh_init->rhport);
+ dcd_int_enable(rh_init->rhport);
return true;
}
diff --git a/src/device/usbd.h b/src/device/usbd.h
index 7913096e3..05eb0173f 100644
--- a/src/device/usbd.h
+++ b/src/device/usbd.h
@@ -37,8 +37,21 @@ extern "C" {
// Application API
//--------------------------------------------------------------------+
+// New API to replace tud_init() to init device stack on specific roothub port
+bool tud_rhport_init(const tusb_rhport_init_t* rh_init);
+
// Init device stack on roothub port
-bool tud_init (uint8_t rhport);
+#if TUSB_VERSION_NUMBER > 2000 // 0.20.0
+TU_ATTR_DEPRECATED("Please use tusb_init(tusb_rhport_init_t*) instead")
+#endif
+TU_ATTR_ALWAYS_INLINE static inline bool tud_init (uint8_t rhport) {
+ const tusb_rhport_init_t rh_init = {
+ .rhport = rhport,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUD_OPT_HIGH_SPEED ? TUSB_SPEED_HIGH : TUSB_SPEED_FULL
+ };
+ return tud_rhport_init(&rh_init);
+}
// Deinit device stack on roothub port
bool tud_deinit(uint8_t rhport);
diff --git a/src/host/usbh.c b/src/host/usbh.c
index ed253ffcc..39bc8d63a 100644
--- a/src/host/usbh.c
+++ b/src/host/usbh.c
@@ -352,11 +352,13 @@ bool tuh_inited(void) {
return _usbh_controller != TUSB_INDEX_INVALID_8;
}
-bool tuh_init(uint8_t rhport) {
- // skip if already initialized
- if (tuh_rhport_is_active(rhport)) return true;
+bool tuh_rhport_init(const tusb_rhport_init_t* rh_init) {
+ if (tuh_rhport_is_active(rh_init->rhport)) {
+ return true; // skip if already initialized
+ }
- TU_LOG_USBH("USBH init on controller %u\r\n", rhport);
+ TU_LOG_USBH("USBH init on controller %u, speed = %s\r\n", rhport,
+ rh_init->speed == TUSB_SPEED_HIGH ? "High" : "Full");
// Init host stack if not already
if (!tuh_inited()) {
@@ -402,9 +404,9 @@ bool tuh_init(uint8_t rhport) {
}
// Init host controller
- _usbh_controller = rhport;;
- TU_ASSERT(hcd_init(rhport));
- hcd_int_enable(rhport);
+ _usbh_controller = rh_init->rhport;
+ TU_ASSERT(hcd_init(rh_init->rhport));
+ hcd_int_enable(rh_init->rhport);
return true;
}
diff --git a/src/host/usbh.h b/src/host/usbh.h
index 217cb1a9c..9b865ac1b 100644
--- a/src/host/usbh.h
+++ b/src/host/usbh.h
@@ -120,8 +120,21 @@ void tuh_event_hook_cb(uint8_t rhport, uint32_t eventid, bool in_isr);
// - cfg_param: configure data, structure depends on the ID
bool tuh_configure(uint8_t rhport, uint32_t cfg_id, const void* cfg_param);
+// New API to replace tuh_init() to init host stack on specific roothub port
+bool tuh_rhport_init(const tusb_rhport_init_t* rh_init);
+
// Init host stack
-bool tuh_init(uint8_t rhport);
+#if TUSB_VERSION_NUMBER > 2000 // 0.20.0
+TU_ATTR_DEPRECATED("Please use tusb_init(tusb_rhport_init_t*) instead")
+#endif
+TU_ATTR_ALWAYS_INLINE static inline bool tuh_init(uint8_t rhport) {
+ const tusb_rhport_init_t rh_init = {
+ .rhport = rhport,
+ .role = TUSB_ROLE_HOST,
+ .speed = TUH_OPT_HIGH_SPEED ? TUSB_SPEED_HIGH : TUSB_SPEED_FULL,
+ };
+ return tuh_rhport_init(&rh_init);
+}
// Deinit host stack on rhport
bool tuh_deinit(uint8_t rhport);
@@ -149,9 +162,10 @@ extern void hcd_int_handler(uint8_t rhport, bool in_isr);
#endif
// Interrupt handler alias to HCD with in_isr as optional parameter
-#define _tuh_int_handler_1arg(_rhport) hcd_int_handler(_rhport, true)
-#define _tuh_int_hanlder_2arg(_rhport, _in_isr) hcd_int_handler(_rhport, _in_isr)
-#define tuh_int_handler(...) TU_GET_3RD_ARG(__VA_ARGS__, _tuh_int_hanlder_2arg, _tuh_int_handler_1arg, _dummy)(__VA_ARGS__)
+#define _tuh_int_handler_arg0() TU_VERIFY_STATIC(false, "tuh_int_handler() must have 1 or 2 arguments")
+#define _tuh_int_handler_arg1(_rhport) hcd_int_handler(_rhport, true)
+#define _tuh_int_handler_arg2(_rhport, _in_isr) hcd_int_handler(_rhport, _in_isr)
+#define tuh_int_handler(...) TU_FUNC_OPTIONAL_ARG(_tuh_int_handler, __VA_ARGS__)
// Check if roothub port is initialized and active as a host
bool tuh_rhport_is_active(uint8_t rhport);
diff --git a/src/tusb.c b/src/tusb.c
index 9f0e45fef..3eb299dff 100644
--- a/src/tusb.c
+++ b/src/tusb.c
@@ -47,19 +47,29 @@ static tusb_role_t _rhport_role[TUP_USBIP_CONTROLLER_NUM] = { 0 };
// Public API
//--------------------------------------------------------------------+
-bool _tusb_rhport_init(uint8_t rhport, tusb_role_t role) {
+bool tusb_rhport_init(const tusb_rhport_init_t* rh_init) {
// backward compatible called with tusb_init(void)
#if defined(TUD_OPT_RHPORT) || defined(TUH_OPT_RHPORT)
- if (rhport == 0xff || role == TUSB_ROLE_INVALID) {
+ if (rh_init == NULL) {
#if CFG_TUD_ENABLED && defined(TUD_OPT_RHPORT)
// init device stack CFG_TUSB_RHPORTx_MODE must be defined
- TU_ASSERT ( tud_init(TUD_OPT_RHPORT) );
+ const tusb_rhport_init_t dev_init = {
+ .rhport = TUD_OPT_RHPORT,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUD_OPT_HIGH_SPEED ? TUSB_SPEED_HIGH : TUSB_SPEED_FULL
+ };
+ TU_ASSERT ( tud_rhport_init(&dev_init) );
_rhport_role[TUD_OPT_RHPORT] = TUSB_ROLE_DEVICE;
#endif
#if CFG_TUH_ENABLED && defined(TUH_OPT_RHPORT)
// init host stack CFG_TUSB_RHPORTx_MODE must be defined
- TU_ASSERT( tuh_init(TUH_OPT_RHPORT) );
+ const tusb_rhport_init_t host_init = {
+ .rhport = TUH_OPT_RHPORT,
+ .role = TUSB_ROLE_HOST,
+ .speed = TUH_OPT_HIGH_SPEED ? TUSB_SPEED_HIGH : TUSB_SPEED_FULL
+ };
+ TU_ASSERT( tuh_rhport_init(&host_init) );
_rhport_role[TUH_OPT_RHPORT] = TUSB_ROLE_HOST;
#endif
@@ -68,21 +78,21 @@ bool _tusb_rhport_init(uint8_t rhport, tusb_role_t role) {
#endif
// new API with explicit rhport and role
- TU_ASSERT(rhport < TUP_USBIP_CONTROLLER_NUM && role != TUSB_ROLE_INVALID);
+ TU_ASSERT(rh_init->rhport < TUP_USBIP_CONTROLLER_NUM && rh_init->role != TUSB_ROLE_INVALID);
#if CFG_TUD_ENABLED
- if (role == TUSB_ROLE_DEVICE) {
- TU_ASSERT( tud_init(rhport) );
+ if (rh_init->role == TUSB_ROLE_DEVICE) {
+ TU_ASSERT( tud_rhport_init(rh_init) );
}
#endif
#if CFG_TUH_ENABLED
- if (role == TUSB_ROLE_HOST) {
- TU_ASSERT( tuh_init(rhport) );
+ if (rh_init->role == TUSB_ROLE_HOST) {
+ TU_ASSERT( tuh_rhport_init(rh_init) );
}
#endif
- _rhport_role[rhport] = role;
+ _rhport_role[rh_init->rhport] = rh_init->role;
return true;
}
@@ -106,13 +116,13 @@ void tusb_int_handler(uint8_t rhport, bool in_isr) {
#if CFG_TUD_ENABLED
if (_rhport_role[rhport] == TUSB_ROLE_DEVICE) {
(void) in_isr;
- tud_int_handler(rhport);
+ dcd_int_handler(rhport);
}
#endif
#if CFG_TUH_ENABLED
if (_rhport_role[rhport] == TUSB_ROLE_HOST) {
- tuh_int_handler(rhport, in_isr);
+ hcd_int_handler(rhport, in_isr);
}
#endif
}
diff --git a/src/tusb.h b/src/tusb.h
index 911d1bae0..c12abba8b 100644
--- a/src/tusb.h
+++ b/src/tusb.h
@@ -129,19 +129,25 @@
//--------------------------------------------------------------------+
// APPLICATION API
//--------------------------------------------------------------------+
+
+
#if CFG_TUH_ENABLED || CFG_TUD_ENABLED
// Internal helper for backward compatible with tusb_init(void)
-bool _tusb_rhport_init(uint8_t rhport, tusb_role_t role);
+bool tusb_rhport_init(const tusb_rhport_init_t* rh_init);
// Initialize roothub port with device/host role
// Note: when using with RTOS, this should be called after scheduler/kernel is started.
// Otherwise, it could cause kernel issue since USB IRQ handler does use RTOS queue API.
// Note2: defined as macro for backward compatible with tusb_init(void), can be changed to function in the future.
-#define _tusb_init_0arg() _tusb_rhport_init(0xff, TUSB_ROLE_INVALID)
-#define _tusb_init_1arg(_rhport) _tusb_rhport_init(_rhport, TUSB_ROLE_INVALID)
-#define _tusb_init_2arg(_rhport, _role) _tusb_rhport_init(_rhport, _role)
-#define tusb_init(...) TU_GET_3RD_ARG(__VA_ARGS__, _tusb_init_2arg, _tusb_init_1arg, _tusb_init_0arg)(__VA_ARGS__)
+#if defined(TUD_OPT_RHPORT) || defined(TUH_OPT_RHPORT)
+#define _tusb_init_arg0() tusb_rhport_init(NULL)
+#else
+#define _tusb_init_arg0() TU_VERIFY_STATIC(false, "CFG_TUSB_RHPORT0_MODE/CFG_TUSB_RHPORT1_MODE must be defined")
+#endif
+
+#define _tusb_init_arg1(_rh_init) tusb_rhport_init(_rh_init)
+#define tusb_init(...) TU_FUNC_OPTIONAL_ARG(_tusb_init, __VA_ARGS__)
// Check if stack is initialized
bool tusb_inited(void);
diff --git a/test/unit-test/test/device/msc/test_msc_device.c b/test/unit-test/test/device/msc/test_msc_device.c
index 28216af10..3444d81c5 100644
--- a/test/unit-test/test/device/msc/test_msc_device.c
+++ b/test/unit-test/test/device/msc/test_msc_device.c
@@ -200,7 +200,13 @@ void setUp(void)
if ( !tud_inited() )
{
dcd_init_Expect(rhport);
- tusb_init(0, TUSB_ROLE_DEVICE);
+
+ tusb_rhport_init_t dev_init = {
+ .rhport = 0,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
}
dcd_event_bus_reset(rhport, TUSB_SPEED_HIGH, false);
diff --git a/test/unit-test/test/device/usbd/test_usbd.c b/test/unit-test/test/device/usbd/test_usbd.c
index 43722d175..faa6b159e 100644
--- a/test/unit-test/test/device/usbd/test_usbd.c
+++ b/test/unit-test/test/device/usbd/test_usbd.c
@@ -128,7 +128,13 @@ void setUp(void)
{
mscd_init_Expect();
dcd_init_Expect(rhport);
- tusb_init(0, TUSB_ROLE_DEVICE);
+
+ tusb_rhport_init_t dev_init = {
+ .rhport = 0,
+ .role = TUSB_ROLE_DEVICE,
+ .speed = TUSB_SPEED_AUTO
+ };
+ tusb_init(&dev_init);
}
}