From 096632a47505e1bb62b8d6c7dc1cc4e783da30d3 Mon Sep 17 00:00:00 2001 From: Piotr Szkotak Date: Wed, 27 Feb 2019 21:41:41 +0100 Subject: [PATCH] [nrf528xx] add radio and random platform fixes (#3634) * [nrf52811] add radio and random platform fixes * [nrf528xx] handle all radio driver rx/tx errors --- examples/platforms/nrf52811/radio.c | 5 +++++ examples/platforms/nrf52811/random.c | 6 +++++- examples/platforms/nrf52840/radio.c | 4 ++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/examples/platforms/nrf52811/radio.c b/examples/platforms/nrf52811/radio.c index 4d984c24c..96ae0c563 100644 --- a/examples/platforms/nrf52811/radio.c +++ b/examples/platforms/nrf52811/radio.c @@ -722,6 +722,7 @@ void nrf_802154_receive_failed(nrf_802154_rx_error_t error) switch (error) { case NRF_802154_RX_ERROR_INVALID_FRAME: + case NRF_802154_RX_ERROR_DELAYED_TIMEOUT: sReceiveError = OT_ERROR_NO_FRAME_RECEIVED; break; @@ -736,6 +737,8 @@ void nrf_802154_receive_failed(nrf_802154_rx_error_t error) case NRF_802154_RX_ERROR_RUNTIME: case NRF_802154_RX_ERROR_TIMESLOT_ENDED: case NRF_802154_RX_ERROR_ABORTED: + case NRF_802154_RX_ERROR_DELAYED_TIMESLOT_DENIED: + case NRF_802154_RX_ERROR_INVALID_LENGTH: sReceiveError = OT_ERROR_FAILED; break; @@ -774,6 +777,8 @@ void nrf_802154_transmit_failed(const uint8_t *aFrame, nrf_802154_tx_error_t err { case NRF_802154_TX_ERROR_BUSY_CHANNEL: case NRF_802154_TX_ERROR_TIMESLOT_ENDED: + case NRF_802154_TX_ERROR_ABORTED: + case NRF_802154_TX_ERROR_TIMESLOT_DENIED: setPendingEvent(kPendingEventChannelAccessFailure); break; diff --git a/examples/platforms/nrf52811/random.c b/examples/platforms/nrf52811/random.c index d9ac827b4..c0fb550d0 100644 --- a/examples/platforms/nrf52811/random.c +++ b/examples/platforms/nrf52811/random.c @@ -162,7 +162,11 @@ void nrf5RandomInit(void) void nrf5RandomDeinit(void) { - // Intentionally empty. + generatorStop(); + + NVIC_DisableIRQ(RNG_IRQn); + NVIC_ClearPendingIRQ(RNG_IRQn); + NVIC_SetPriority(RNG_IRQn, 0); } uint32_t otPlatRandomGet(void) diff --git a/examples/platforms/nrf52840/radio.c b/examples/platforms/nrf52840/radio.c index ff219d22c..1ee0a7225 100644 --- a/examples/platforms/nrf52840/radio.c +++ b/examples/platforms/nrf52840/radio.c @@ -723,6 +723,7 @@ void nrf_802154_receive_failed(nrf_802154_rx_error_t error) switch (error) { case NRF_802154_RX_ERROR_INVALID_FRAME: + case NRF_802154_RX_ERROR_DELAYED_TIMEOUT: sReceiveError = OT_ERROR_NO_FRAME_RECEIVED; break; @@ -737,6 +738,7 @@ void nrf_802154_receive_failed(nrf_802154_rx_error_t error) case NRF_802154_RX_ERROR_RUNTIME: case NRF_802154_RX_ERROR_TIMESLOT_ENDED: case NRF_802154_RX_ERROR_ABORTED: + case NRF_802154_RX_ERROR_DELAYED_TIMESLOT_DENIED: case NRF_802154_RX_ERROR_INVALID_LENGTH: sReceiveError = OT_ERROR_FAILED; break; @@ -776,6 +778,8 @@ void nrf_802154_transmit_failed(const uint8_t *aFrame, nrf_802154_tx_error_t err { case NRF_802154_TX_ERROR_BUSY_CHANNEL: case NRF_802154_TX_ERROR_TIMESLOT_ENDED: + case NRF_802154_TX_ERROR_ABORTED: + case NRF_802154_TX_ERROR_TIMESLOT_DENIED: setPendingEvent(kPendingEventChannelAccessFailure); break;