diff --git a/Kconfig b/Kconfig index f4c8128c..109f7969 100644 --- a/Kconfig +++ b/Kconfig @@ -438,19 +438,19 @@ if CHERRYUSB menu "Select USB host template, please select class driver first" config TEST_USBH_SERIAL - int + bool prompt "demo for test serial" - default 0 + default n depends on CHERRYUSB_HOST_CDC_ACM || CHERRYUSB_HOST_FTDI || CHERRYUSB_HOST_CH34X || CHERRYUSB_HOST_CP210X || CHERRYUSB_HOST_PL2303 config TEST_USBH_HID - int + bool prompt "demo for test hid" - default 0 + default n depends on CHERRYUSB_HOST_HID config TEST_USBH_MSC - int + bool prompt "demo for test msc" - default 0 + default n depends on CHERRYUSB_HOST_MSC endmenu endif diff --git a/Kconfig.rtt b/Kconfig.rtt index 38747af6..bc45822b 100644 --- a/Kconfig.rtt +++ b/Kconfig.rtt @@ -465,19 +465,19 @@ if RT_USING_CHERRYUSB menu "Select USB host template, please select class driver first" config CONFIG_TEST_USBH_SERIAL - int - prompt "demo for test serial, cannot enable this demo, we have used serial framework instead" - default 0 + bool + prompt "demo for test serial, cannot enable this demo, we have used rt-device framework instead" + default n depends on RT_CHERRYUSB_HOST_CDC_ACM || RT_CHERRYUSB_HOST_FTDI || RT_CHERRYUSB_HOST_CH34X || RT_CHERRYUSB_HOST_CP210X || RT_CHERRYUSB_HOST_PL2303 config CONFIG_TEST_USBH_HID - int + bool prompt "demo for test hid" - default 0 + default n depends on RT_CHERRYUSB_HOST_HID config CONFIG_TEST_USBH_MSC - int + bool prompt "demo for test msc, cannot enable this demo, we have used dfs instead" - default 0 + default n depends on RT_CHERRYUSB_HOST_MSC endmenu endif diff --git a/Kconfig.rttpkg b/Kconfig.rttpkg index 0ef16a5c..24f636b0 100644 --- a/Kconfig.rttpkg +++ b/Kconfig.rttpkg @@ -464,19 +464,19 @@ if PKG_USING_CHERRYUSB menu "Select USB host template, please select class driver first" config CONFIG_TEST_USBH_SERIAL - int - prompt "demo for test serial, cannot enable this demo, we have used serial framework instead" - default 0 + bool + prompt "demo for test serial, cannot enable this demo, we have used rt-device framework instead" + default n depends on PKG_CHERRYUSB_HOST_CDC_ACM || PKG_CHERRYUSB_HOST_FTDI || PKG_CHERRYUSB_HOST_CH34X || PKG_CHERRYUSB_HOST_CP210X || PKG_CHERRYUSB_HOST_PL2303 config CONFIG_TEST_USBH_HID - int + bool prompt "demo for test hid" - default 0 + default n depends on PKG_CHERRYUSB_HOST_HID config CONFIG_TEST_USBH_MSC - int + bool prompt "demo for test msc, cannot enable this demo, we have used dfs instead" - default 0 + default n depends on PKG_CHERRYUSB_HOST_MSC endmenu endif @@ -493,7 +493,7 @@ if PKG_USING_CHERRYUSB config PKG_USING_CHERRYUSB_LATEST_VERSION bool "latest" - config PKG_USING_CHERRYUSB_V010502 + config PKG_USING_CHERRYUSB_V010503 bool "v1.5.3" config PKG_USING_CHERRYUSB_V010502 bool "v1.5.2" diff --git a/demo/usb_host.c b/demo/usb_host.c index 02d0e20a..8722b0e5 100644 --- a/demo/usb_host.c +++ b/demo/usb_host.c @@ -7,39 +7,10 @@ #include "usbh_serial.h" #include "usbh_hid.h" #include "usbh_msc.h" -#include "usbh_video.h" -#include "usbh_audio.h" -#ifndef CONFIG_TEST_USBH_SERIAL -#define CONFIG_TEST_USBH_SERIAL 1 -#endif -#ifndef TEST_USBH_CDC_SPEED -#define TEST_USBH_CDC_SPEED 0 -#endif -#ifndef CONFIG_TEST_USBH_HID -#define CONFIG_TEST_USBH_HID 0 -#endif -#ifndef CONFIG_TEST_USBH_MSC -#define CONFIG_TEST_USBH_MSC 1 -#endif -#ifndef TEST_USBH_MSC_FATFS -#define TEST_USBH_MSC_FATFS 0 -#endif -#ifndef TEST_USBH_MSC_FATFS_SPEED -#define TEST_USBH_MSC_FATFS_SPEED 0 -#endif -#ifndef CONFIG_TEST_USBH_AUDIO -#define CONFIG_TEST_USBH_AUDIO 0 -#endif -#ifndef CONFIG_TEST_USBH_VIDEO -#define CONFIG_TEST_USBH_VIDEO 0 -#endif +// net class demos use socket api -#if defined(TEST_USBH_CDC_ECM) || defined(TEST_USBH_CDC_RNDIS) || defined(TEST_USBH_ASIX) || defined(TEST_USBH_RTL8152) -#error we have move those class implements into platform/none/usbh_lwip.c, and you should call tcpip_init(NULL, NULL) in your app -#endif - -#if CONFIG_TEST_USBH_SERIAL +#ifdef CONFIG_TEST_USBH_SERIAL #define SERIAL_TEST_LEN (1 * 1024) #if SERIAL_TEST_LEN >= CONFIG_USBHOST_SERIAL_RX_SIZE @@ -53,7 +24,7 @@ volatile bool serial_is_opened = false; USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t serial_tx_buffer[64]; uint8_t serial_rx_data[SERIAL_TEST_LEN]; -#if TEST_USBH_CDC_SPEED +#ifdef CONFIG_TEST_USBH_CDC_SPEED #define TEST_LEN (16 * 1024) #define TEST_COUNT (10240) @@ -64,6 +35,7 @@ static void usbh_serial_thread(CONFIG_USB_OSAL_THREAD_SET_ARGV) { int ret; struct usbh_serial *serial; + bool serial_test_success = false; serial = usbh_serial_open("/dev/ttyACM0", USBH_SERIAL_O_RDWR | USBH_SERIAL_O_NONBLOCK); if (serial == NULL) { @@ -90,7 +62,7 @@ static void usbh_serial_thread(CONFIG_USB_OSAL_THREAD_SET_ARGV) } /* test with only one buffer, if you have more cdc acm class, modify by yourself */ -#if TEST_USBH_CDC_SPEED +#ifdef CONFIG_TEST_USBH_CDC_SPEED const uint32_t test_len[] = { 512, 1 * 1024, 2 * 1024, 4 * 1024, 8 * 1024, 16 * 1024 }; memset(serial_speed_buffer, 0xAA, TEST_LEN); @@ -109,14 +81,14 @@ static void usbh_serial_thread(CONFIG_USB_OSAL_THREAD_SET_ARGV) uint32_t time_ms = xTaskGetTickCount() - start_time; USB_LOG_RAW("per packet len:%d, out speed:%f MB/S\r\n", (unsigned int)test_len[j], (test_len[j] * TEST_COUNT / 1024 / 1024) * 1000 / ((float)time_ms)); } - goto delete_with_close; + usbh_serial_close(serial); + goto delete; #endif memset(serial_tx_buffer, 0xA5, sizeof(serial_tx_buffer)); USB_LOG_RAW("start serial loopback test, len: %d\r\n", SERIAL_TEST_LEN); serial_tx_bytes = 0; while (1) { - /* for common, we use timeout with 0xffffffff, this is just a test */ ret = usbh_serial_write(serial, serial_tx_buffer, sizeof(serial_tx_buffer)); if (ret < 0) { USB_LOG_RAW("serial write error, ret:%d\r\n", ret); @@ -149,7 +121,7 @@ static void usbh_serial_thread(CONFIG_USB_OSAL_THREAD_SET_ARGV) goto delete_with_close; } } - USB_LOG_RAW("serial loopback test success\r\n"); + serial_test_success = true; break; } } @@ -165,6 +137,11 @@ static void usbh_serial_thread(CONFIG_USB_OSAL_THREAD_SET_ARGV) // clang-format off delete_with_close: + if (serial_test_success) { + USB_LOG_RAW("serial loopback test success\r\n"); + } else { + USB_LOG_RAW("serial loopback test failed\r\n"); + } usbh_serial_close(serial); delete: usb_osal_thread_delete(NULL); @@ -172,7 +149,7 @@ delete: } #endif -#if CONFIG_TEST_USBH_HID +#ifdef CONFIG_TEST_USBH_HID USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t hid_buffer[128]; void usbh_hid_callback(void *arg, int nbytes) @@ -213,12 +190,12 @@ delete: } #endif -#if CONFIG_TEST_USBH_MSC +#ifdef CONFIG_TEST_USBH_MSC -#if TEST_USBH_MSC_FATFS +#ifdef CONFIG_TEST_USBH_MSC_FATFS #include "ff.h" -#if TEST_USBH_MSC_FATFS_SPEED +#ifdef CONFIG_TEST_USBH_MSC_FATFS_SPEED #define WRITE_SIZE_MB (128UL) #define WRITE_SIZE (1024UL * 1024UL * WRITE_SIZE_MB) #define BUF_SIZE (1024UL * 128UL) @@ -279,7 +256,7 @@ int usb_msc_fatfs_test() goto unmount; } -#if TEST_USBH_MSC_FATFS_SPEED +#ifdef CONFIG_TEST_USBH_MSC_FATFS_SPEED for (uint32_t i = 0; i < BUF_SIZE; i++) { read_write_buffer[i] = i % 256; } @@ -351,8 +328,10 @@ static void usbh_msc_thread(CONFIG_USB_OSAL_THREAD_SET_ARGV) int ret; struct usbh_msc *msc_class = (struct usbh_msc *)CONFIG_USB_OSAL_THREAD_GET_ARGV; + (void)msc_class; + /* test with only one buffer, if you have more msc class, modify by yourself */ -#if TEST_USBH_MSC_FATFS == 0 +#ifndef TEST_USBH_MSC_FATFS ret = usbh_msc_scsi_init(msc_class); if (ret < 0) { USB_LOG_RAW("scsi_init error,ret:%d\r\n", ret); @@ -382,7 +361,7 @@ delete: } #endif -#if CONFIG_TEST_USBH_SERIAL +#ifdef CONFIG_TEST_USBH_SERIAL void usbh_serial_run(struct usbh_serial *serial) { if (serial_is_opened) { @@ -398,7 +377,7 @@ void usbh_serial_stop(struct usbh_serial *serial) } #endif -#if CONFIG_TEST_USBH_HID +#ifdef CONFIG_TEST_USBH_HID void usbh_hid_run(struct usbh_hid *hid_class) { usb_osal_thread_create("usbh_hid", 2048, CONFIG_USBHOST_PSC_PRIO + 1, usbh_hid_thread, hid_class); @@ -409,7 +388,7 @@ void usbh_hid_stop(struct usbh_hid *hid_class) } #endif -#if CONFIG_TEST_USBH_MSC +#ifdef CONFIG_TEST_USBH_MSC void usbh_msc_run(struct usbh_msc *msc_class) { usb_osal_thread_create("usbh_msc", 2048, CONFIG_USBHOST_PSC_PRIO + 1, usbh_msc_thread, msc_class); @@ -420,14 +399,6 @@ void usbh_msc_stop(struct usbh_msc *msc_class) } #endif -#if CONFIG_TEST_USBH_AUDIO -#error "commercial charge" -#endif - -#if CONFIG_TEST_USBH_VIDEO -#error "commercial charge" -#endif - #if 0 #include "usbh_aoa.h" diff --git a/docs/source/demo/img/usbh_serial.png b/docs/source/demo/img/usbh_serial.png new file mode 100644 index 00000000..da929c4a Binary files /dev/null and b/docs/source/demo/img/usbh_serial.png differ diff --git a/docs/source/demo/usbh_serial.rst b/docs/source/demo/usbh_serial.rst index a32241f3..0599ddb1 100644 --- a/docs/source/demo/usbh_serial.rst +++ b/docs/source/demo/usbh_serial.rst @@ -1,8 +1,11 @@ usbh_serial =============== -Serial 框架当前支持 cdc acm, ftdi, cp210x, ch34x, pl2303,gsm 驱动。当前支持两种使用方式, -一种是使用源生 CherryUSB usbhost serial API 进行操作,另一种是基于平台封装的 API 操作,比如 rt-thread device API。,nuttx posix API。 +Serial 框架当前支持 cdc acm, ftdi, cp210x, ch34x, pl2303,gsm 驱动。 + +.. figure:: img/usbh_serial.png + +当前支持两种使用方式,一种是使用源生 CherryUSB usbhost serial API 进行操作,另一种是基于平台封装的 API 操作,比如 rt-thread device API,nuttx posix API。 下面演示的是使用 CherryUSB usbhost serial API 进行串口回环测试,并且使用阻塞发送,异步读取的方式: @@ -36,7 +39,6 @@ Serial 框架当前支持 cdc acm, ftdi, cp210x, ch34x, pl2303,gsm 驱动。 serial_tx_bytes = 0; while (1) { - /* for common, we use timeout with 0xffffffff, this is just a test */ ret = usbh_serial_write(serial, serial_tx_buffer, sizeof(serial_tx_buffer)); if (ret < 0) { USB_LOG_RAW("serial write error, ret:%d\r\n", ret); @@ -93,4 +95,100 @@ Serial 框架当前支持 cdc acm, ftdi, cp210x, ch34x, pl2303,gsm 驱动。 - 纯 USB 设备 + 未启动波特率,这种情况下可以使用 `usbh_serial_cdc_write_async` 和 `usbh_serial_cdc_read_async` 进行异步收发数据。阻塞则可以用 `usbh_serial_write` ,不可以使用 `usbh_serial_read`。 -- 纯 USB 设备 + 启动波特率,同 1,但是速率打折扣(因为多了一层 ringbuf)。此时也不可以使用 `usbh_serial_cdc_write_async` 和 `usbh_serial_cdc_read_async`。 **如果是 GSM 设备请使用第一种场景**。 \ No newline at end of file +- 纯 USB 设备 + 启动波特率,同 1,但是速率打折扣(因为多了一层 ringbuf)。此时也不可以使用 `usbh_serial_cdc_write_async` 和 `usbh_serial_cdc_read_async`。 **如果是 GSM 设备请使用第一种场景**。 + +.. code-block:: C + + [I/usbh_hub] New full-speed device on Bus 0, Hub 1, Port 1 connected + [I/usbh_core] New device found,idVendor:10c4,idProduct:ea60,bcdDevice:0100 + [I/usbh_core] The device has 1 bNumConfigurations + [I/usbh_core] The device has 1 interfaces + [I/usbh_core] Enumeration success, start loading class driver + [I/usbh_core] Loading cp210x class driver on interface 0 + [I/usbh_cp210x] chip partnum: 0x02 + [I/usbh_cp210x] ulAmountInInQueue: 0, ulAmountInOutQueue: 0 + [I/usbh_serial] Ep=81 Attr=02 Mps=64 Interval=00 Mult=00 + [I/usbh_serial] Ep=01 Attr=02 Mps=64 Interval=00 Mult=00 + [I/usbh_serial] Register Serial Class: /dev/ttyUSB0 (cp210x) + start serial loopback test, len: 1024 + send over + receive over + serial loopback test success + [I/usbh_serial] Unregister Serial Class: /dev/ttyUSB0 (cp210x) + [I/usbh_core] Device on Bus 0, Hub 1, Port 1 disconnected + [I/usbh_hub] New high-speed device on Bus 0, Hub 1, Port 1 connected + [I/usbh_core] New device found,idVendor:0403,idProduct:6010,bcdDevice:0700 + [I/usbh_core] The device has 1 bNumConfigurations + [I/usbh_core] The device has 2 interfaces + [I/usbh_core] Enumeration success, start loading class driver + [I/usbh_core] Loading ftdi class driver on interface 0 + [I/usbh_ftdi] chip name: FT2232H + [I/usbh_serial] Ep=81 Attr=02 Mps=512 Interval=00 Mult=00 + [I/usbh_serial] Ep=02 Attr=02 Mps=512 Interval=00 Mult=00 + [I/usbh_serial] Register Serial Class: /dev/ttyUSB0 (ftdi) + [I/usbh_core] Loading ftdi class driver on interface 1 + [I/usbh_ftdi] chip name: FT2232H + [I/usbh_serial] Ep=83 Attr=02 Mps=512 Interval=00 Mult=00 + [I/usbh_serial] Ep=04 Attr=02 Mps=512 Interval=00 Mult=00 + [I/usbh_serial] Register Serial Class: /dev/ttyUSB1 (ftdi) + start serial loopback test, len: 1024 + send over + receive over + serial loopback test success + [I/usbh_serial] Unregister Serial Class: /dev/ttyUSB0 (ftdi) + [I/usbh_serial] Unregister Serial Class: /dev/ttyUSB1 (ftdi) + [I/usbh_core] Device on Bus 0, Hub 1, Port 1 disconnected + [I/usbh_hub] New full-speed device on Bus 0, Hub 1, Port 1 connected + [I/usbh_core] New device found,idVendor:067b,idProduct:2303,bcdDevice:0300 + [I/usbh_core] The device has 1 bNumConfigurations + [I/usbh_core] The device has 1 interfaces + [I/usbh_core] Enumeration success, start loading class driver + [I/usbh_core] Loading pl2303 class driver on interface 0 + [I/usbh_pl2303] Ep=81 Attr=03 Mps=10 Interval=01 Mult=00 + [I/usbh_pl2303] chip type: PL2303HX + [I/usbh_serial] Ep=02 Attr=02 Mps=64 Interval=00 Mult=00 + [I/usbh_serial] Ep=83 Attr=02 Mps=64 Interval=00 Mult=00 + [I/usbh_serial] Register Serial Class: /dev/ttyUSB0 (pl2303) + start serial loopback test, len: 1024 + send over + receive over + serial loopback test success + [I/usbh_serial] Unregister Serial Class: /dev/ttyUSB0 (pl2303) + [I/usbh_core] Device on Bus 0, Hub 1, Port 1 disconnected + [W/usbh_hub] Failed to enable port 1 + [I/usbh_hub] New full-speed device on Bus 0, Hub 1, Port 1 connected + [I/usbh_core] New device found,idVendor:1a86,idProduct:7523,bcdDevice:0264 + [I/usbh_core] The device has 1 bNumConfigurations + [I/usbh_core] The device has 1 interfaces + [I/usbh_core] Enumeration success, start loading class driver + [I/usbh_core] Loading ch34x class driver on interface 0 + [I/usbh_ch43x] Ep=81 Attr=03 Mps=8 Interval=01 Mult=00 + [I/usbh_ch43x] chip version: 0x31 + [I/usbh_serial] Ep=82 Attr=02 Mps=32 Interval=00 Mult=00 + [I/usbh_serial] Ep=02 Attr=02 Mps=32 Interval=00 Mult=00 + [I/usbh_serial] Register Serial Class: /dev/ttyUSB0 (ch34x) + start serial loopback test, len: 1024 + send over + receive over + serial loopback test success + [I/usbh_serial] Unregister Serial Class: /dev/ttyUSB0 (ch34x) + [I/usbh_core] Device on Bus 0, Hub 1, Port 1 disconnected + [I/usbh_hub] New full-speed device on Bus 0, Hub 1, Port 1 connected + [I/usbh_core] New device found,idVendor:42bf,idProduct:b210,bcdDevice:0217 + [I/usbh_core] The device has 1 bNumConfigurations + [I/usbh_core] The device has 3 interfaces + [I/usbh_core] Enumeration success, start loading class driver + [E/usbh_core] Do not support Class:0xff, Subclass:0x01, Protocl:0x00 on interface 0 + [I/usbh_core] Loading cdc_acm class driver on interface 1 + [I/usbh_cdc_acm] Ep=85 Attr=03 Mps=64 Interval=00 Mult=00 + [I/usbh_serial] Ep=04 Attr=02 Mps=64 Interval=00 Mult=00 + [I/usbh_serial] Ep=83 Attr=02 Mps=64 Interval=00 Mult=00 + [I/usbh_serial] Register Serial Class: /dev/ttyACM0 (cdc_acm) + [I/usbh_core] Loading cdc_data class driver on interface 2 + start serial loopback test, len: 1024 + send over + receive over + serial loopback test success + [I/usbh_serial] Unregister Serial Class: /dev/ttyACM0 (cdc_acm) + [I/usbh_core] Device on Bus 0, Hub 1, Port 1 disconnected + diff --git a/tests/espressif/host/main/main.c b/tests/espressif/host/main/main.c index 3d18171b..e67052f6 100644 --- a/tests/espressif/host/main/main.c +++ b/tests/espressif/host/main/main.c @@ -14,6 +14,10 @@ #include "esp_log.h" #include "usbd_core.h" #include "usbh_core.h" + +#define CONFIG_TEST_USBH_SERIAL +#define CONFIG_TEST_USBH_HID + #include "demo/usb_host.c" void app_main(void) diff --git a/tests/espressif/host/sdkconfig.defaults b/tests/espressif/host/sdkconfig.defaults index f55e1ae5..117105e3 100644 --- a/tests/espressif/host/sdkconfig.defaults +++ b/tests/espressif/host/sdkconfig.defaults @@ -15,5 +15,6 @@ CONFIG_CHERRYUSB_HOST_CH34X=y CONFIG_CHERRYUSB_HOST_CP210X=y CONFIG_CHERRYUSB_HOST_FTDI=y CONFIG_CHERRYUSB_HOST_PL2303=y +CONFIG_CHERRYUSB_HOST_GSM=y CONFIG_CHERRYUSB_HOST_VIDEO=y CONFIG_CHERRYUSB_HOST_AUDIO=y diff --git a/tests/hpmicro/CMakeLists.txt b/tests/hpmicro/CMakeLists.txt index c78a1bd5..e817dbc7 100644 --- a/tests/hpmicro/CMakeLists.txt +++ b/tests/hpmicro/CMakeLists.txt @@ -38,7 +38,6 @@ sdk_compile_options("-O2") sdk_inc(inc) sdk_app_src(inc/arch/sys_arch.c) sdk_app_src(src/main.c) -sdk_app_src(../../demo/usb_host.c) sdk_inc(src/iperf) sdk_app_src(src/iperf/iperf.c src/iperf/iperf_cli.c src/iperf/utils_getopt.c src/ping.c) diff --git a/tests/hpmicro/src/main.c b/tests/hpmicro/src/main.c index e180d834..58f39158 100644 --- a/tests/hpmicro/src/main.c +++ b/tests/hpmicro/src/main.c @@ -24,6 +24,12 @@ #include "usbh_uac_stream.h" #endif +#define CONFIG_TEST_USBH_SERIAL +#define CONFIG_TEST_USBH_HID +#define CONFIG_TEST_USBH_MSC + +#include "demo/usb_host.c" + SDK_DECLARE_EXT_ISR_M(BOARD_CONSOLE_UART_IRQ, shell_uart_isr) #define task_start_PRIORITY (configMAX_PRIORITIES - 2U)