Pārlūkot izejas kodu

fix(platform/rtthread): restart read at usbd_cdc_acm_bulk_out

Matthew 7 mēneši atpakaļ
vecāks
revīzija
0e31b40407
1 mainītis faili ar 9 papildinājumiem un 2 dzēšanām
  1. 9 2
      platform/rtthread/usbd_serial.c

+ 9 - 2
platform/rtthread/usbd_serial.c

@@ -190,7 +190,7 @@ rt_err_t usbd_serial_register(struct usbd_serial *serial,
     device->user_data = data;
 
     /* register a character device */
-    ret = rt_device_register(device, serial->name, RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_REMOVABLE);
+    ret = rt_device_register(device, serial->name, RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_REMOVABLE);
 
 #ifdef RT_USING_POSIX_DEVIO
     /* set fops */
@@ -209,6 +209,13 @@ void usbd_cdc_acm_bulk_out(uint8_t busid, uint8_t ep, uint32_t nbytes)
         serial = &g_usbd_serial_cdc_acm[devno];
         if (serial->out_ep == ep) {
             rt_ringbuffer_put(&serial->rx_rb, g_usbd_serial_cdc_acm_rx_buf[serial->minor], nbytes);
+            usbd_ep_start_read(serial->busid, serial->out_ep,
+                g_usbd_serial_cdc_acm_rx_buf[serial->minor],
+                usbd_get_ep_mps(serial->busid, serial->out_ep));
+
+            if (serial->parent.rx_indicate) {
+                serial->parent.rx_indicate(&serial->parent, nbytes);
+            }            
             break;
         }
     }
@@ -269,4 +276,4 @@ void usbd_cdc_acm_serial_init(uint8_t busid, uint8_t in_ep, uint8_t out_ep)
     }
 
     USB_LOG_INFO("USB CDC ACM Serial Device %s initialized\n", serial->name);
-}
+}