Skip to content

Commit 58b8ca0

Browse files
committed
refactor(platform/rtthread): move rt_usbd_msc here
Signed-off-by: sakumisu <1203593632@qq.com>
1 parent 42f4e42 commit 58b8ca0

5 files changed

Lines changed: 86 additions & 57 deletions

File tree

Kconfig.rtt

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,16 @@ if RT_USING_CHERRYUSB
149149
prompt "Enable chardev for cdc acm device"
150150
default n
151151

152+
config RT_CHERRYUSB_DEVICE_MSC_BLKDEV
153+
bool
154+
prompt "Enable blkdev for msc device"
155+
default n
156+
157+
config CONFIG_USBDEV_MSC_BLOCK_DEV_NAME
158+
string "usb device msc block device name"
159+
depends on RT_CHERRYUSB_DEVICE_MSC_BLKDEV
160+
default "sd0"
161+
152162
config CONFIG_USBDEV_REQUEST_BUFFER_LEN
153163
int
154164
prompt "Set device control transfer max buffer size"
@@ -189,7 +199,7 @@ if RT_USING_CHERRYUSB
189199
config RT_CHERRYUSB_DEVICE_TEMPLATE_MSC_BLKDEV
190200
bool
191201
prompt "msc_blkdev"
192-
depends on RT_CHERRYUSB_DEVICE_MSC
202+
depends on RT_CHERRYUSB_DEVICE_MSC && RT_CHERRYUSB_DEVICE_MSC_BLKDEV
193203
config RT_CHERRYUSB_DEVICE_TEMPLATE_HID_KEYBOARD
194204
bool
195205
prompt "hid_keyboard"
@@ -266,11 +276,6 @@ if RT_USING_CHERRYUSB
266276
depends on RT_CHERRYUSB_DEVICE_CDC_ACM_CHARDEV
267277
endchoice
268278

269-
config CONFIG_USBDEV_MSC_BLOCK_DEV_NAME
270-
string "usb device msc block device name"
271-
depends on RT_CHERRYUSB_DEVICE_TEMPLATE_MSC_BLKDEV
272-
default "sd0"
273-
274279
endif
275280

276281
menuconfig RT_CHERRYUSB_HOST

Kconfig.rttpkg

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,16 @@ if PKG_USING_CHERRYUSB
148148
prompt "Enable chardev for cdc acm device"
149149
default n
150150

151+
config PKG_CHERRYUSB_DEVICE_MSC_BLKDEV
152+
bool
153+
prompt "Enable blkdev for msc device"
154+
default n
155+
156+
config CONFIG_USBDEV_MSC_BLOCK_DEV_NAME
157+
string "usb device msc block device name"
158+
depends on PKG_CHERRYUSB_DEVICE_MSC_BLKDEV
159+
default "sd0"
160+
151161
config CONFIG_USBDEV_REQUEST_BUFFER_LEN
152162
int
153163
prompt "Set device control transfer max buffer size"
@@ -188,7 +198,7 @@ if PKG_USING_CHERRYUSB
188198
config PKG_CHERRYUSB_DEVICE_TEMPLATE_MSC_BLKDEV
189199
bool
190200
prompt "msc_blkdev"
191-
depends on PKG_CHERRYUSB_DEVICE_MSC
201+
depends on PKG_CHERRYUSB_DEVICE_MSC && PKG_CHERRYUSB_DEVICE_MSC_BLKDEV
192202
config PKG_CHERRYUSB_DEVICE_TEMPLATE_HID_KEYBOARD
193203
bool
194204
prompt "hid_keyboard"
@@ -265,11 +275,6 @@ if PKG_USING_CHERRYUSB
265275
depends on PKG_CHERRYUSB_DEVICE_CDC_ACM_CHARDEV
266276
endchoice
267277

268-
config CONFIG_USBDEV_MSC_BLOCK_DEV_NAME
269-
string "usb device msc block device name"
270-
depends on PKG_CHERRYUSB_DEVICE_TEMPLATE_MSC_BLKDEV
271-
default "sd0"
272-
273278
endif
274279

275280
menuconfig PKG_CHERRYUSB_HOST

SConscript

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,9 @@ if GetDepend(['PKG_CHERRYUSB_DEVICE']):
147147
if GetDepend(['PKG_CHERRYUSB_DEVICE_CDC_ACM_CHARDEV']):
148148
src += Glob('platform/rtthread/rt_usbd_serial.c')
149149

150+
if GetDepend(['PKG_CHERRYUSB_DEVICE_MSC_BLKDEV']):
151+
src += Glob('platform/rtthread/rt_usbd_msc.c')
152+
150153
if GetDepend(['PKG_CHERRYUSB_DEVICE_TEMPLATE_CDC_ACM']):
151154
src += Glob('demo/cdc_acm_template.c')
152155
if GetDepend(['PKG_CHERRYUSB_DEVICE_TEMPLATE_MSC']) or GetDepend(['PKG_CHERRYUSB_DEVICE_TEMPLATE_MSC_BLKDEV']):

demo/msc_ram_template.c

Lines changed: 6 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ static void usbd_event_handler(uint8_t busid, uint8_t event)
109109
}
110110
}
111111

112-
#if !defined(RT_CHERRYUSB_DEVICE_TEMPLATE_MSC_BLKDEV) && !defined(PKG_CHERRYUSB_DEVICE_TEMPLATE_MSC_BLKDEV)
112+
#if !defined(RT_CHERRYUSB_DEVICE_MSC_BLKDEV) && !defined(PKG_CHERRYUSB_DEVICE_MSC_BLKDEV)
113113
#define BLOCK_SIZE 512
114114
#define BLOCK_COUNT 10
115115

@@ -138,58 +138,19 @@ int usbd_msc_sector_write(uint8_t busid, uint8_t lun, uint32_t sector, uint8_t *
138138
memcpy(mass_block[sector].BlockSpace, buffer, length);
139139
return 0;
140140
}
141-
#else
142-
#include <rtthread.h>
143-
#include <rtdevice.h>
144-
145-
#ifndef CONFIG_USBDEV_MSC_THREAD
146-
#error "Please enable CONFIG_USBDEV_MSC_THREAD, move msc read & write from isr to thread"
147-
#endif
148-
149-
#ifndef CONFIG_USBDEV_MSC_BLOCK_DEV_NAME
150-
#define CONFIG_USBDEV_MSC_BLOCK_DEV_NAME "sd0"
151-
#endif
152-
153-
static rt_device_t blk_dev = RT_NULL;
154-
struct rt_device_blk_geometry geometry = { 0 };
155-
156-
void usbd_msc_get_cap(uint8_t busid, uint8_t lun, uint32_t *block_num, uint32_t *block_size)
157-
{
158-
rt_device_control(blk_dev, RT_DEVICE_CTRL_BLK_GETGEOME, &geometry);
159-
160-
*block_num = geometry.sector_count;
161-
*block_size = geometry.bytes_per_sector;
162-
}
163-
164-
int usbd_msc_sector_read(uint8_t busid, uint8_t lun, uint32_t sector, uint8_t *buffer, uint32_t length)
165-
{
166-
rt_device_read(blk_dev, sector, buffer, length / geometry.bytes_per_sector);
167-
return 0;
168-
}
169-
170-
int usbd_msc_sector_write(uint8_t busid, uint8_t lun, uint32_t sector, uint8_t *buffer, uint32_t length)
171-
{
172-
rt_device_write(blk_dev, sector, buffer, length / geometry.bytes_per_sector);
173-
return 0;
174-
}
175141
#endif
176142

177143
static struct usbd_interface intf0;
178144

179145
void msc_ram_init(uint8_t busid, uintptr_t reg_base)
180146
{
181-
#if defined(RT_CHERRYUSB_DEVICE_TEMPLATE_MSC_BLKDEV) || defined(PKG_CHERRYUSB_DEVICE_TEMPLATE_MSC_BLKDEV)
182-
rt_err_t res;
183-
184-
blk_dev = rt_device_find(CONFIG_USBDEV_MSC_BLOCK_DEV_NAME);
185-
RT_ASSERT(blk_dev);
186-
187-
res = rt_device_open(blk_dev, RT_DEVICE_OFLAG_RDWR);
188-
RT_ASSERT(res == RT_EOK);
189-
#endif
190147
usbd_desc_register(busid, &msc_ram_descriptor);
191-
148+
#if defined(RT_CHERRYUSB_DEVICE_MSC_BLKDEV) || defined(PKG_CHERRYUSB_DEVICE_MSC_BLKDEV)
149+
extern void usbd_msc_blkdev_init(uint8_t busid, uint8_t in_ep, uint8_t out_ep);
150+
usbd_msc_blkdev_init(busid, MSC_IN_EP, MSC_OUT_EP);
151+
#else
192152
usbd_add_interface(busid, usbd_msc_init_intf(busid, &intf0, MSC_OUT_EP, MSC_IN_EP));
153+
#endif
193154

194155
usbd_initialize(busid, reg_base, usbd_event_handler);
195156
}

platform/rtthread/rt_usbd_msc.c

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/*
2+
* Copyright (c) 2026, sakumisu
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
#include "usbd_core.h"
7+
#include "usbd_msc.h"
8+
9+
#include <rtthread.h>
10+
#include <rtdevice.h>
11+
12+
#ifndef CONFIG_USBDEV_MSC_THREAD
13+
#error "Please enable CONFIG_USBDEV_MSC_THREAD, move msc read & write from isr to thread"
14+
#endif
15+
16+
#ifndef CONFIG_USBDEV_MSC_BLOCK_DEV_NAME
17+
#define CONFIG_USBDEV_MSC_BLOCK_DEV_NAME "sd0"
18+
#endif
19+
20+
static rt_device_t blk_dev = RT_NULL;
21+
static struct rt_device_blk_geometry geometry = { 0 };
22+
static struct usbd_interface msc_intf;
23+
24+
void usbd_msc_get_cap(uint8_t busid, uint8_t lun, uint32_t *block_num, uint32_t *block_size)
25+
{
26+
rt_device_control(blk_dev, RT_DEVICE_CTRL_BLK_GETGEOME, &geometry);
27+
28+
*block_num = geometry.sector_count;
29+
*block_size = geometry.bytes_per_sector;
30+
}
31+
32+
int usbd_msc_sector_read(uint8_t busid, uint8_t lun, uint32_t sector, uint8_t *buffer, uint32_t length)
33+
{
34+
rt_device_read(blk_dev, sector, buffer, length / geometry.bytes_per_sector);
35+
return 0;
36+
}
37+
38+
int usbd_msc_sector_write(uint8_t busid, uint8_t lun, uint32_t sector, uint8_t *buffer, uint32_t length)
39+
{
40+
rt_device_write(blk_dev, sector, buffer, length / geometry.bytes_per_sector);
41+
return 0;
42+
}
43+
44+
void usbd_msc_blkdev_init(uint8_t busid, uint8_t in_ep, uint8_t out_ep)
45+
{
46+
rt_err_t res;
47+
48+
blk_dev = rt_device_find(CONFIG_USBDEV_MSC_BLOCK_DEV_NAME);
49+
RT_ASSERT(blk_dev);
50+
51+
res = rt_device_open(blk_dev, RT_DEVICE_OFLAG_RDWR);
52+
RT_ASSERT(res == RT_EOK);
53+
54+
usbd_add_interface(busid, usbd_msc_init_intf(busid, &msc_intf, out_ep, in_ep));
55+
}

0 commit comments

Comments
 (0)