From c985a0b5148cf51c400a53b692f570daf89d9810 Mon Sep 17 00:00:00 2001 From: robert-hh Date: Fri, 8 Jul 2022 14:26:53 +0200 Subject: [PATCH] nrf/drivers/usb: Add a tud_cdc_rx_cb() callback to check interrupt char. --- ports/nrf/drivers/usb/usb_cdc.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/ports/nrf/drivers/usb/usb_cdc.c b/ports/nrf/drivers/usb/usb_cdc.c index eda933b89f..06071fe119 100644 --- a/ports/nrf/drivers/usb/usb_cdc.c +++ b/ports/nrf/drivers/usb/usb_cdc.c @@ -46,7 +46,7 @@ extern void tusb_hal_nrf_power_event(uint32_t event); -static void cdc_task(void); +static void cdc_task(bool tx); static uint8_t rx_ringbuf_array[1024]; static uint8_t tx_ringbuf_array[1024]; @@ -121,7 +121,7 @@ static int cdc_tx_char(void) { return ringbuf_get((ringbuf_t*)&tx_ringbuf); } -static void cdc_task(void) +static void cdc_task(bool tx) { if ( tud_cdc_connected() ) { // connected and there are data available @@ -138,24 +138,30 @@ static void cdc_task(void) } } - int chars = 0; - while (cdc_tx_any()) { - if (chars < 64) { - tud_cdc_write_char(cdc_tx_char()); - chars++; - } else { - chars = 0; - tud_cdc_write_flush(); + if (tx) { + int chars = 0; + while (cdc_tx_any()) { + if (chars < 64) { + tud_cdc_write_char(cdc_tx_char()); + chars++; + } else { + chars = 0; + tud_cdc_write_flush(); + } } - } - tud_cdc_write_flush(); + tud_cdc_write_flush(); + } } } static void usb_cdc_loop(void) { tud_task(); - cdc_task(); + cdc_task(true); +} + +void tud_cdc_rx_cb(uint8_t itf) { + cdc_task(false); } int usb_cdc_init(void)