diff options
| -rw-r--r-- | ports/nrf/drivers/usb/usb_cdc.c | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/ports/nrf/drivers/usb/usb_cdc.c b/ports/nrf/drivers/usb/usb_cdc.c index eda933b89..06071fe11 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) |
