diff options
| author | sakumisu <[email protected]> | 2026-03-13 18:00:22 +0800 |
|---|---|---|
| committer | sakumisu <[email protected]> | 2026-03-13 18:00:22 +0800 |
| commit | 58b8ca02440a6892bdf7278401b6c27922015006 (patch) | |
| tree | 3672364ca962279ba6f2d3ce247e5337f1607f60 | |
| parent | 42f4e4276258df0d235839ab53a087ec4c1ca396 (diff) | |
refactor(platform/rtthread): move rt_usbd_msc here
Signed-off-by: sakumisu <[email protected]>
| -rw-r--r-- | Kconfig.rtt | 17 | ||||
| -rw-r--r-- | Kconfig.rttpkg | 17 | ||||
| -rw-r--r-- | SConscript | 3 | ||||
| -rw-r--r-- | demo/msc_ram_template.c | 51 | ||||
| -rw-r--r-- | platform/rtthread/rt_usbd_msc.c | 55 |
5 files changed, 86 insertions, 57 deletions
diff --git a/Kconfig.rtt b/Kconfig.rtt index b8acf614..0cbb76d9 100644 --- a/Kconfig.rtt +++ b/Kconfig.rtt @@ -149,6 +149,16 @@ if RT_USING_CHERRYUSB prompt "Enable chardev for cdc acm device" default n + config RT_CHERRYUSB_DEVICE_MSC_BLKDEV + bool + prompt "Enable blkdev for msc device" + default n + + config CONFIG_USBDEV_MSC_BLOCK_DEV_NAME + string "usb device msc block device name" + depends on RT_CHERRYUSB_DEVICE_MSC_BLKDEV + default "sd0" + config CONFIG_USBDEV_REQUEST_BUFFER_LEN int prompt "Set device control transfer max buffer size" @@ -189,7 +199,7 @@ if RT_USING_CHERRYUSB config RT_CHERRYUSB_DEVICE_TEMPLATE_MSC_BLKDEV bool prompt "msc_blkdev" - depends on RT_CHERRYUSB_DEVICE_MSC + depends on RT_CHERRYUSB_DEVICE_MSC && RT_CHERRYUSB_DEVICE_MSC_BLKDEV config RT_CHERRYUSB_DEVICE_TEMPLATE_HID_KEYBOARD bool prompt "hid_keyboard" @@ -266,11 +276,6 @@ if RT_USING_CHERRYUSB depends on RT_CHERRYUSB_DEVICE_CDC_ACM_CHARDEV endchoice - config CONFIG_USBDEV_MSC_BLOCK_DEV_NAME - string "usb device msc block device name" - depends on RT_CHERRYUSB_DEVICE_TEMPLATE_MSC_BLKDEV - default "sd0" - endif menuconfig RT_CHERRYUSB_HOST diff --git a/Kconfig.rttpkg b/Kconfig.rttpkg index 3fa33e87..4fa34158 100644 --- a/Kconfig.rttpkg +++ b/Kconfig.rttpkg @@ -148,6 +148,16 @@ if PKG_USING_CHERRYUSB prompt "Enable chardev for cdc acm device" default n + config PKG_CHERRYUSB_DEVICE_MSC_BLKDEV + bool + prompt "Enable blkdev for msc device" + default n + + config CONFIG_USBDEV_MSC_BLOCK_DEV_NAME + string "usb device msc block device name" + depends on PKG_CHERRYUSB_DEVICE_MSC_BLKDEV + default "sd0" + config CONFIG_USBDEV_REQUEST_BUFFER_LEN int prompt "Set device control transfer max buffer size" @@ -188,7 +198,7 @@ if PKG_USING_CHERRYUSB config PKG_CHERRYUSB_DEVICE_TEMPLATE_MSC_BLKDEV bool prompt "msc_blkdev" - depends on PKG_CHERRYUSB_DEVICE_MSC + depends on PKG_CHERRYUSB_DEVICE_MSC && PKG_CHERRYUSB_DEVICE_MSC_BLKDEV config PKG_CHERRYUSB_DEVICE_TEMPLATE_HID_KEYBOARD bool prompt "hid_keyboard" @@ -265,11 +275,6 @@ if PKG_USING_CHERRYUSB depends on PKG_CHERRYUSB_DEVICE_CDC_ACM_CHARDEV endchoice - config CONFIG_USBDEV_MSC_BLOCK_DEV_NAME - string "usb device msc block device name" - depends on PKG_CHERRYUSB_DEVICE_TEMPLATE_MSC_BLKDEV - default "sd0" - endif menuconfig PKG_CHERRYUSB_HOST @@ -147,6 +147,9 @@ if GetDepend(['PKG_CHERRYUSB_DEVICE']): if GetDepend(['PKG_CHERRYUSB_DEVICE_CDC_ACM_CHARDEV']): src += Glob('platform/rtthread/rt_usbd_serial.c') + if GetDepend(['PKG_CHERRYUSB_DEVICE_MSC_BLKDEV']): + src += Glob('platform/rtthread/rt_usbd_msc.c') + if GetDepend(['PKG_CHERRYUSB_DEVICE_TEMPLATE_CDC_ACM']): src += Glob('demo/cdc_acm_template.c') if GetDepend(['PKG_CHERRYUSB_DEVICE_TEMPLATE_MSC']) or GetDepend(['PKG_CHERRYUSB_DEVICE_TEMPLATE_MSC_BLKDEV']): diff --git a/demo/msc_ram_template.c b/demo/msc_ram_template.c index cd8f6464..38c80820 100644 --- a/demo/msc_ram_template.c +++ b/demo/msc_ram_template.c @@ -109,7 +109,7 @@ static void usbd_event_handler(uint8_t busid, uint8_t event) } } -#if !defined(RT_CHERRYUSB_DEVICE_TEMPLATE_MSC_BLKDEV) && !defined(PKG_CHERRYUSB_DEVICE_TEMPLATE_MSC_BLKDEV) +#if !defined(RT_CHERRYUSB_DEVICE_MSC_BLKDEV) && !defined(PKG_CHERRYUSB_DEVICE_MSC_BLKDEV) #define BLOCK_SIZE 512 #define BLOCK_COUNT 10 @@ -138,58 +138,19 @@ int usbd_msc_sector_write(uint8_t busid, uint8_t lun, uint32_t sector, uint8_t * memcpy(mass_block[sector].BlockSpace, buffer, length); return 0; } -#else -#include <rtthread.h> -#include <rtdevice.h> - -#ifndef CONFIG_USBDEV_MSC_THREAD -#error "Please enable CONFIG_USBDEV_MSC_THREAD, move msc read & write from isr to thread" -#endif - -#ifndef CONFIG_USBDEV_MSC_BLOCK_DEV_NAME -#define CONFIG_USBDEV_MSC_BLOCK_DEV_NAME "sd0" -#endif - -static rt_device_t blk_dev = RT_NULL; -struct rt_device_blk_geometry geometry = { 0 }; - -void usbd_msc_get_cap(uint8_t busid, uint8_t lun, uint32_t *block_num, uint32_t *block_size) -{ - rt_device_control(blk_dev, RT_DEVICE_CTRL_BLK_GETGEOME, &geometry); - - *block_num = geometry.sector_count; - *block_size = geometry.bytes_per_sector; -} - -int usbd_msc_sector_read(uint8_t busid, uint8_t lun, uint32_t sector, uint8_t *buffer, uint32_t length) -{ - rt_device_read(blk_dev, sector, buffer, length / geometry.bytes_per_sector); - return 0; -} - -int usbd_msc_sector_write(uint8_t busid, uint8_t lun, uint32_t sector, uint8_t *buffer, uint32_t length) -{ - rt_device_write(blk_dev, sector, buffer, length / geometry.bytes_per_sector); - return 0; -} #endif static struct usbd_interface intf0; void msc_ram_init(uint8_t busid, uintptr_t reg_base) { -#if defined(RT_CHERRYUSB_DEVICE_TEMPLATE_MSC_BLKDEV) || defined(PKG_CHERRYUSB_DEVICE_TEMPLATE_MSC_BLKDEV) - rt_err_t res; - - blk_dev = rt_device_find(CONFIG_USBDEV_MSC_BLOCK_DEV_NAME); - RT_ASSERT(blk_dev); - - res = rt_device_open(blk_dev, RT_DEVICE_OFLAG_RDWR); - RT_ASSERT(res == RT_EOK); -#endif usbd_desc_register(busid, &msc_ram_descriptor); - +#if defined(RT_CHERRYUSB_DEVICE_MSC_BLKDEV) || defined(PKG_CHERRYUSB_DEVICE_MSC_BLKDEV) + extern void usbd_msc_blkdev_init(uint8_t busid, uint8_t in_ep, uint8_t out_ep); + usbd_msc_blkdev_init(busid, MSC_IN_EP, MSC_OUT_EP); +#else usbd_add_interface(busid, usbd_msc_init_intf(busid, &intf0, MSC_OUT_EP, MSC_IN_EP)); +#endif usbd_initialize(busid, reg_base, usbd_event_handler); } diff --git a/platform/rtthread/rt_usbd_msc.c b/platform/rtthread/rt_usbd_msc.c new file mode 100644 index 00000000..2193e3ef --- /dev/null +++ b/platform/rtthread/rt_usbd_msc.c @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2026, sakumisu + * + * SPDX-License-Identifier: Apache-2.0 + */ +#include "usbd_core.h" +#include "usbd_msc.h" + +#include <rtthread.h> +#include <rtdevice.h> + +#ifndef CONFIG_USBDEV_MSC_THREAD +#error "Please enable CONFIG_USBDEV_MSC_THREAD, move msc read & write from isr to thread" +#endif + +#ifndef CONFIG_USBDEV_MSC_BLOCK_DEV_NAME +#define CONFIG_USBDEV_MSC_BLOCK_DEV_NAME "sd0" +#endif + +static rt_device_t blk_dev = RT_NULL; +static struct rt_device_blk_geometry geometry = { 0 }; +static struct usbd_interface msc_intf; + +void usbd_msc_get_cap(uint8_t busid, uint8_t lun, uint32_t *block_num, uint32_t *block_size) +{ + rt_device_control(blk_dev, RT_DEVICE_CTRL_BLK_GETGEOME, &geometry); + + *block_num = geometry.sector_count; + *block_size = geometry.bytes_per_sector; +} + +int usbd_msc_sector_read(uint8_t busid, uint8_t lun, uint32_t sector, uint8_t *buffer, uint32_t length) +{ + rt_device_read(blk_dev, sector, buffer, length / geometry.bytes_per_sector); + return 0; +} + +int usbd_msc_sector_write(uint8_t busid, uint8_t lun, uint32_t sector, uint8_t *buffer, uint32_t length) +{ + rt_device_write(blk_dev, sector, buffer, length / geometry.bytes_per_sector); + return 0; +} + +void usbd_msc_blkdev_init(uint8_t busid, uint8_t in_ep, uint8_t out_ep) +{ + rt_err_t res; + + blk_dev = rt_device_find(CONFIG_USBDEV_MSC_BLOCK_DEV_NAME); + RT_ASSERT(blk_dev); + + res = rt_device_open(blk_dev, RT_DEVICE_OFLAG_RDWR); + RT_ASSERT(res == RT_EOK); + + usbd_add_interface(busid, usbd_msc_init_intf(busid, &msc_intf, out_ep, in_ep)); +}
\ No newline at end of file |
