Prechádzať zdrojové kódy

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

MDLZCOOL 4 týždňov pred
rodič
commit
1cbe3c5957

+ 2 - 1
Kconfig.rttpkg

@@ -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

+ 5 - 6
SConscript

@@ -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')

+ 7 - 1
class/serial/usbh_serial.c

@@ -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) {

+ 7 - 1
platform/rtthread/usbh_rtserial.c

@@ -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 */