From 598982c78229efa3b78e6cc19a483f6eac1da66e Mon Sep 17 00:00:00 2001 From: jgromes Date: Sun, 18 Sep 2022 16:14:19 +0200 Subject: [PATCH] [nRF24] Added finishTransmit --- .../nRF24_Transmit_Interrupt.ino | 5 +++++ src/modules/nRF24/nRF24.cpp | 21 +++++++++++-------- src/modules/nRF24/nRF24.h | 7 +++++++ 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/examples/nRF24/nRF24_Transmit_Interrupt/nRF24_Transmit_Interrupt.ino b/examples/nRF24/nRF24_Transmit_Interrupt/nRF24_Transmit_Interrupt.ino index 14d0c072..95cba472 100644 --- a/examples/nRF24/nRF24_Transmit_Interrupt/nRF24_Transmit_Interrupt.ino +++ b/examples/nRF24/nRF24_Transmit_Interrupt/nRF24_Transmit_Interrupt.ino @@ -127,6 +127,11 @@ void loop() { } + // clean up after transmission is finished + // this will ensure transmitter is disabled, + // RF switch is powered down etc. + radio.finishTransmit(); + // wait a second before transmitting again delay(1000); diff --git a/src/modules/nRF24/nRF24.cpp b/src/modules/nRF24/nRF24.cpp index 3b90ba70..5ac59810 100644 --- a/src/modules/nRF24/nRF24.cpp +++ b/src/modules/nRF24/nRF24.cpp @@ -93,23 +93,18 @@ int16_t nRF24::transmit(uint8_t* data, size_t len, uint8_t addr) { // check maximum number of retransmits if(getStatus(RADIOLIB_NRF24_MAX_RT)) { - standby(); - clearIRQ(); + finishTransmit(); return(RADIOLIB_ERR_ACK_NOT_RECEIVED); } // check timeout: 15 retries * 4ms (max Tx time as per datasheet) if(_mod->micros() - start >= 60000) { - standby(); - clearIRQ(); + finishTransmit(); return(RADIOLIB_ERR_TX_TIMEOUT); } } - - // clear interrupts - clearIRQ(); - - return(state); + + return(finishTransmit()); } int16_t nRF24::receive(uint8_t* data, size_t len) { @@ -199,6 +194,14 @@ int16_t nRF24::startTransmit(uint8_t* data, size_t len, uint8_t addr) { return(state); } +int16_t nRF24::finishTransmit() { + // clear interrupt flags + clearIRQ(); + + // set mode to standby to disable transmitter/RF switch + return(standby()); +} + int16_t nRF24::startReceive() { // set mode to standby int16_t state = standby(); diff --git a/src/modules/nRF24/nRF24.h b/src/modules/nRF24/nRF24.h index 8b6226dc..26f8393a 100644 --- a/src/modules/nRF24/nRF24.h +++ b/src/modules/nRF24/nRF24.h @@ -289,6 +289,13 @@ class nRF24: public PhysicalLayer { */ int16_t startTransmit(uint8_t* data, size_t len, uint8_t addr) override; + /*! + \brief Clean up after transmission is done. + + \returns \ref status_codes + */ + int16_t finishTransmit() override; + /*! \brief Interrupt-driven receive method. IRQ will be activated when full packet is received.