diff options
| author | Matthew <[email protected]> | 2025-07-24 18:17:46 +0800 |
|---|---|---|
| committer | sakumisu <[email protected]> | 2025-07-24 18:29:34 +0800 |
| commit | 0e31b40407367a83656c36ce5b45252326e80142 (patch) | |
| tree | d14fe05f68d114a0c9d94c25d0ff5ef2caceca2d | |
| parent | fa5a9fbcaacb418c5ff03ad72a8c6a5dcef09a1e (diff) | |
fix(platform/rtthread): restart read at usbd_cdc_acm_bulk_out
| -rw-r--r-- | platform/rtthread/usbd_serial.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/platform/rtthread/usbd_serial.c b/platform/rtthread/usbd_serial.c index 5ce62209..42144396 100644 --- a/platform/rtthread/usbd_serial.c +++ b/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); -}
\ No newline at end of file +} |
