summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2026-03-13 18:00:22 +0800
committersakumisu <[email protected]>2026-03-13 18:00:22 +0800
commit58b8ca02440a6892bdf7278401b6c27922015006 (patch)
tree3672364ca962279ba6f2d3ce247e5337f1607f60
parent42f4e4276258df0d235839ab53a087ec4c1ca396 (diff)
refactor(platform/rtthread): move rt_usbd_msc here
Signed-off-by: sakumisu <[email protected]>
-rw-r--r--Kconfig.rtt17
-rw-r--r--Kconfig.rttpkg17
-rw-r--r--SConscript3
-rw-r--r--demo/msc_ram_template.c51
-rw-r--r--platform/rtthread/rt_usbd_msc.c55
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
diff --git a/SConscript b/SConscript
index b92df75e..ca0ac083 100644
--- a/SConscript
+++ b/SConscript
@@ -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