fix(serial): fix host serial framework support for rt-thread

This commit is contained in:
MDLZCOOL
2025-12-15 00:34:17 +08:00
committed by sakumisu
parent 11b91a0283
commit 1cbe3c5957
4 changed files with 21 additions and 9 deletions

View File

@@ -314,6 +314,7 @@ if PKG_USING_CHERRYUSB
config PKG_CHERRYUSB_HOST_CDC_ACM
bool
prompt "Enable usb cdc acm driver"
select CONFIG_USBHOST_SERIAL
default n
config PKG_CHERRYUSB_HOST_HID
@@ -464,7 +465,7 @@ if PKG_USING_CHERRYUSB
menu "Select USB host template, please select class driver first"
config CONFIG_TEST_USBH_SERIAL
int
prompt "demo for test usb serial, cannot enable this demo, we have used serial framework instead"
prompt "demo for test serial, cannot enable this demo, we have used serial framework instead"
default 0
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

View File

@@ -16,7 +16,6 @@ path += [cwd + '/class/adb']
path += [cwd + '/class/dfu']
path += [cwd + '/class/serial']
path += [cwd + '/class/vendor/net']
path += [cwd + '/class/vendor/serial']
path += [cwd + '/class/vendor/wifi']
src = []
@@ -269,7 +268,7 @@ if GetDepend(['PKG_CHERRYUSB_HOST']):
LIBS = ['libxhci_a32_softfp_neon.a']
if GetDepend(['PKG_CHERRYUSB_HOST_CDC_ACM']):
src += Glob('class/cdc/usbh_cdc_acm.c')
src += Glob('class/serial/usbh_cdc_acm.c')
if GetDepend(['PKG_CHERRYUSB_HOST_HID']):
src += Glob('class/hid/usbh_hid.c')
if GetDepend(['PKG_CHERRYUSB_HOST_MSC']):
@@ -291,13 +290,13 @@ if GetDepend(['PKG_CHERRYUSB_HOST']):
if GetDepend(['PKG_CHERRYUSB_HOST_RTL8152']):
src += Glob('class/vendor/net/usbh_rtl8152.c')
if GetDepend(['PKG_CHERRYUSB_HOST_FTDI']):
src += Glob('class/vendor/serial/usbh_ftdi.c')
src += Glob('class/serial/usbh_ftdi.c')
if GetDepend(['PKG_CHERRYUSB_HOST_CH34X']):
src += Glob('class/vendor/serial/usbh_ch34x.c')
src += Glob('class/serial/usbh_ch34x.c')
if GetDepend(['PKG_CHERRYUSB_HOST_CP210X']):
src += Glob('class/vendor/serial/usbh_cp210x.c')
src += Glob('class/serial/usbh_cp210x.c')
if GetDepend(['PKG_CHERRYUSB_HOST_PL2303']):
src += Glob('class/vendor/serial/usbh_pl2303.c')
src += Glob('class/serial/usbh_pl2303.c')
if GetDepend(['CONFIG_TEST_USBH_HID']):
src += Glob('demo/usb_host.c')

View File

@@ -389,7 +389,7 @@ static int usbh_serial_tiocmset(struct usbh_serial *serial, uint32_t set, uint32
line_state &= ~USBH_SERIAL_TIOCM_RTS;
}
dtr = (line_state & USBH_SERIAL_TIOCM_RTS) ? true : false;
dtr = (line_state & USBH_SERIAL_TIOCM_DTR) ? true : false;
rts = (line_state & USBH_SERIAL_TIOCM_RTS) ? true : false;
if (serial && serial->driver && serial->driver->set_line_state) {
@@ -643,6 +643,12 @@ int usbh_serial(int argc, char **argv)
return 0;
}
if (serial) {
if (!serial->hport || !serial->hport->connected) {
serial = NULL;
}
}
if (!serial) {
serial = usbh_serial_open(argv[1], USBH_SERIAL_O_RDWR | USBH_SERIAL_O_NONBLOCK);
if (!serial) {

View File

@@ -176,8 +176,14 @@ rt_err_t usbh_serial_register(struct usbh_serial *serial)
device->user_data = serial;
serial->user_data = device;
/* skip /dev/ to avoid BAD file */
const char *dev_name = serial->hport->config.intf[serial->intf].devname;
if (strncmp(dev_name, "/dev/", 5) == 0) {
dev_name += 5;
}
/* register a character device */
ret = rt_device_register(device, serial->hport->config.intf[serial->intf].devname, RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_REMOVABLE);
ret = rt_device_register(device, dev_name, RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_REMOVABLE);
#ifdef RT_USING_POSIX_DEVIO
/* set fops */