Skip to content

Commit 1cbe3c5

Browse files
MDLZCOOLsakumisu
authored andcommitted
fix(serial): fix host serial framework support for rt-thread
1 parent 11b91a0 commit 1cbe3c5

File tree

4 files changed

+21
-9
lines changed

4 files changed

+21
-9
lines changed

Kconfig.rttpkg

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,7 @@ if PKG_USING_CHERRYUSB
314314
config PKG_CHERRYUSB_HOST_CDC_ACM
315315
bool
316316
prompt "Enable usb cdc acm driver"
317+
select CONFIG_USBHOST_SERIAL
317318
default n
318319

319320
config PKG_CHERRYUSB_HOST_HID
@@ -464,7 +465,7 @@ if PKG_USING_CHERRYUSB
464465
menu "Select USB host template, please select class driver first"
465466
config CONFIG_TEST_USBH_SERIAL
466467
int
467-
prompt "demo for test usb serial, cannot enable this demo, we have used serial framework instead"
468+
prompt "demo for test serial, cannot enable this demo, we have used serial framework instead"
468469
default 0
469470
depends on PKG_CHERRYUSB_HOST_CDC_ACM || PKG_CHERRYUSB_HOST_FTDI || PKG_CHERRYUSB_HOST_CH34X || PKG_CHERRYUSB_HOST_CP210X || PKG_CHERRYUSB_HOST_PL2303
470471
config CONFIG_TEST_USBH_HID

SConscript

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ path += [cwd + '/class/adb']
1616
path += [cwd + '/class/dfu']
1717
path += [cwd + '/class/serial']
1818
path += [cwd + '/class/vendor/net']
19-
path += [cwd + '/class/vendor/serial']
2019
path += [cwd + '/class/vendor/wifi']
2120
src = []
2221

@@ -269,7 +268,7 @@ if GetDepend(['PKG_CHERRYUSB_HOST']):
269268
LIBS = ['libxhci_a32_softfp_neon.a']
270269

271270
if GetDepend(['PKG_CHERRYUSB_HOST_CDC_ACM']):
272-
src += Glob('class/cdc/usbh_cdc_acm.c')
271+
src += Glob('class/serial/usbh_cdc_acm.c')
273272
if GetDepend(['PKG_CHERRYUSB_HOST_HID']):
274273
src += Glob('class/hid/usbh_hid.c')
275274
if GetDepend(['PKG_CHERRYUSB_HOST_MSC']):
@@ -291,13 +290,13 @@ if GetDepend(['PKG_CHERRYUSB_HOST']):
291290
if GetDepend(['PKG_CHERRYUSB_HOST_RTL8152']):
292291
src += Glob('class/vendor/net/usbh_rtl8152.c')
293292
if GetDepend(['PKG_CHERRYUSB_HOST_FTDI']):
294-
src += Glob('class/vendor/serial/usbh_ftdi.c')
293+
src += Glob('class/serial/usbh_ftdi.c')
295294
if GetDepend(['PKG_CHERRYUSB_HOST_CH34X']):
296-
src += Glob('class/vendor/serial/usbh_ch34x.c')
295+
src += Glob('class/serial/usbh_ch34x.c')
297296
if GetDepend(['PKG_CHERRYUSB_HOST_CP210X']):
298-
src += Glob('class/vendor/serial/usbh_cp210x.c')
297+
src += Glob('class/serial/usbh_cp210x.c')
299298
if GetDepend(['PKG_CHERRYUSB_HOST_PL2303']):
300-
src += Glob('class/vendor/serial/usbh_pl2303.c')
299+
src += Glob('class/serial/usbh_pl2303.c')
301300

302301
if GetDepend(['CONFIG_TEST_USBH_HID']):
303302
src += Glob('demo/usb_host.c')

class/serial/usbh_serial.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ static int usbh_serial_tiocmset(struct usbh_serial *serial, uint32_t set, uint32
389389
line_state &= ~USBH_SERIAL_TIOCM_RTS;
390390
}
391391

392-
dtr = (line_state & USBH_SERIAL_TIOCM_RTS) ? true : false;
392+
dtr = (line_state & USBH_SERIAL_TIOCM_DTR) ? true : false;
393393
rts = (line_state & USBH_SERIAL_TIOCM_RTS) ? true : false;
394394

395395
if (serial && serial->driver && serial->driver->set_line_state) {
@@ -643,6 +643,12 @@ int usbh_serial(int argc, char **argv)
643643
return 0;
644644
}
645645

646+
if (serial) {
647+
if (!serial->hport || !serial->hport->connected) {
648+
serial = NULL;
649+
}
650+
}
651+
646652
if (!serial) {
647653
serial = usbh_serial_open(argv[1], USBH_SERIAL_O_RDWR | USBH_SERIAL_O_NONBLOCK);
648654
if (!serial) {

platform/rtthread/usbh_rtserial.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,14 @@ rt_err_t usbh_serial_register(struct usbh_serial *serial)
176176
device->user_data = serial;
177177
serial->user_data = device;
178178

179+
/* skip /dev/ to avoid BAD file */
180+
const char *dev_name = serial->hport->config.intf[serial->intf].devname;
181+
if (strncmp(dev_name, "/dev/", 5) == 0) {
182+
dev_name += 5;
183+
}
184+
179185
/* register a character device */
180-
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);
186+
ret = rt_device_register(device, dev_name, RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_REMOVABLE);
181187

182188
#ifdef RT_USING_POSIX_DEVIO
183189
/* set fops */

0 commit comments

Comments
 (0)