From 8a5b9fc5c01aeae15db6c4c4c1ec2929481f1868 Mon Sep 17 00:00:00 2001 From: e-rk <39553874+e-rk@users.noreply.github.com> Date: Wed, 17 Oct 2018 13:23:05 +0200 Subject: [PATCH] [nrf52840] fix NCP radio not working on USB CDC UART (#3169) --- examples/platforms/nrf52840/platform-nrf5.h | 6 ++++++ examples/platforms/nrf52840/system.c | 5 +++++ examples/platforms/nrf52840/uart.c | 5 +++++ examples/platforms/nrf52840/usb-cdc-uart.c | 7 +++++++ 4 files changed, 23 insertions(+) diff --git a/examples/platforms/nrf52840/platform-nrf5.h b/examples/platforms/nrf52840/platform-nrf5.h index ee9ca435a..03d24cb91 100644 --- a/examples/platforms/nrf52840/platform-nrf5.h +++ b/examples/platforms/nrf52840/platform-nrf5.h @@ -53,6 +53,12 @@ void nrf5UartInit(void); */ void nrf5UartDeinit(void); +/** + * Clear pending UART data. + * + */ +void nrf5UartClearPendingData(void); + /** * This function performs UART driver processing. * diff --git a/examples/platforms/nrf52840/system.c b/examples/platforms/nrf52840/system.c index 20b21896c..9db75688a 100644 --- a/examples/platforms/nrf52840/system.c +++ b/examples/platforms/nrf52840/system.c @@ -81,6 +81,11 @@ void otSysInit(int argc, char *argv[]) nrf5UartInit(); nrf5CryptoInit(); } + else + { + nrf5UartClearPendingData(); + } + #ifndef SPIS_TRANSPORT_DISABLE nrf5SpiSlaveInit(); #endif diff --git a/examples/platforms/nrf52840/uart.c b/examples/platforms/nrf52840/uart.c index 2caf9552e..b95c47554 100644 --- a/examples/platforms/nrf52840/uart.c +++ b/examples/platforms/nrf52840/uart.c @@ -150,6 +150,11 @@ void nrf5UartInit(void) // Intentionally empty. } +void nrf5UartClearPendingData(void) +{ + // Intentionally empty. +} + void nrf5UartDeinit(void) { if (sUartEnabled) diff --git a/examples/platforms/nrf52840/usb-cdc-uart.c b/examples/platforms/nrf52840/usb-cdc-uart.c index 9b44acd3c..6df6cd094 100644 --- a/examples/platforms/nrf52840/usb-cdc-uart.c +++ b/examples/platforms/nrf52840/usb-cdc-uart.c @@ -290,6 +290,13 @@ void nrf5UartDeinit(void) app_usbd_uninit(); } +void nrf5UartClearPendingData(void) +{ + sUsbState.mTransferInProgress = false; + sUsbState.mTxBuffer = NULL; + sUsbState.mTxSize = 0; +} + void nrf5UartProcess(void) { while (app_usbd_event_queue_process())