summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrobert-hh <robert@hammelrath.com>2022-07-08 14:26:53 +0200
committerDamien George <damien@micropython.org>2022-07-17 00:12:03 +1000
commitc985a0b5148cf51c400a53b692f570daf89d9810 (patch)
tree947f6bf46e70bf2b807f88940b4c8a05bc0d746d
parent60539ea162a15d38d974ee58f7c5430c565cf0eb (diff)
nrf/drivers/usb: Add a tud_cdc_rx_cb() callback to check interrupt char.
-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)