summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/nrf/drivers/usb/usb_cdc.c32
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)