From 9dff4e709e203f89b7ce5fc4aa1b9c1bbeda5eda Mon Sep 17 00:00:00 2001 From: jgromes Date: Sun, 18 Sep 2022 16:12:03 +0200 Subject: [PATCH] [CC1101] Added finishTransmit --- .../CC1101_Transmit_Interrupt.ino | 5 ++++ src/modules/CC1101/CC1101.cpp | 26 ++++++++++--------- src/modules/CC1101/CC1101.h | 7 +++++ 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/examples/CC1101/CC1101_Transmit_Interrupt/CC1101_Transmit_Interrupt.ino b/examples/CC1101/CC1101_Transmit_Interrupt/CC1101_Transmit_Interrupt.ino index 1d993a77..b09c455e 100644 --- a/examples/CC1101/CC1101_Transmit_Interrupt/CC1101_Transmit_Interrupt.ino +++ b/examples/CC1101/CC1101_Transmit_Interrupt/CC1101_Transmit_Interrupt.ino @@ -112,6 +112,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/CC1101/CC1101.cpp b/src/modules/CC1101/CC1101.cpp index e9e36700..a2e2eafe 100644 --- a/src/modules/CC1101/CC1101.cpp +++ b/src/modules/CC1101/CC1101.cpp @@ -113,8 +113,7 @@ int16_t CC1101::transmit(uint8_t* data, size_t len, uint8_t addr) { _mod->yield(); if(_mod->micros() - start > timeout) { - standby(); - SPIsendCommand(RADIOLIB_CC1101_CMD_FLUSH_TX); + finishTransmit(); return(RADIOLIB_ERR_TX_TIMEOUT); } } @@ -125,19 +124,12 @@ int16_t CC1101::transmit(uint8_t* data, size_t len, uint8_t addr) { _mod->yield(); if(_mod->micros() - start > timeout) { - standby(); - SPIsendCommand(RADIOLIB_CC1101_CMD_FLUSH_TX); + finishTransmit(); return(RADIOLIB_ERR_TX_TIMEOUT); } } - // set mode to standby - standby(); - - // flush Tx FIFO - SPIsendCommand(RADIOLIB_CC1101_CMD_FLUSH_TX); - - return(state); + return(finishTransmit()); } int16_t CC1101::receive(uint8_t* data, size_t len) { @@ -328,6 +320,16 @@ int16_t CC1101::startTransmit(uint8_t* data, size_t len, uint8_t addr) { return (state); } +int16_t CC1101::finishTransmit() { + // set mode to standby to disable transmitter/RF switch + int16_t state = standby(); + + // flush Tx FIFO + SPIsendCommand(RADIOLIB_CC1101_CMD_FLUSH_TX); + + return(state); +} + int16_t CC1101::startReceive() { // set mode to standby standby(); @@ -711,7 +713,7 @@ int16_t CC1101::setOOK(bool enableOOK) { return(setOutputPower(_power)); } -float CC1101::getRSSI() { +float CC1101::getRSSI() { float rssi; if (_directMode) { diff --git a/src/modules/CC1101/CC1101.h b/src/modules/CC1101/CC1101.h index a661107f..3ae99b63 100644 --- a/src/modules/CC1101/CC1101.h +++ b/src/modules/CC1101/CC1101.h @@ -656,6 +656,13 @@ class CC1101: public PhysicalLayer { */ int16_t startTransmit(uint8_t* data, size_t len, uint8_t addr = 0) override; + /*! + \brief Clean up after transmission is done. + + \returns \ref status_codes + */ + int16_t finishTransmit() override; + /*! \brief Interrupt-driven receive method. GDO0 will be activated when full packet is received.