diff options
| author | robert-hh <robert@hammelrath.com> | 2022-07-08 14:26:53 +0200 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2022-07-17 00:12:03 +1000 |
| commit | c985a0b5148cf51c400a53b692f570daf89d9810 (patch) | |
| tree | 947f6bf46e70bf2b807f88940b4c8a05bc0d746d | |
| parent | 60539ea162a15d38d974ee58f7c5430c565cf0eb (diff) | |
nrf/drivers/usb: Add a tud_cdc_rx_cb() callback to check interrupt char.
| -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) |
