diff --git a/examples/SX126x/SX126x_Transmit_Interrupt/SX126x_Transmit_Interrupt.ino b/examples/SX126x/SX126x_Transmit_Interrupt/SX126x_Transmit_Interrupt.ino index b4d44170..0bd011c7 100644 --- a/examples/SX126x/SX126x_Transmit_Interrupt/SX126x_Transmit_Interrupt.ino +++ b/examples/SX126x/SX126x_Transmit_Interrupt/SX126x_Transmit_Interrupt.ino @@ -117,6 +117,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/SX126x/SX126x.cpp b/src/modules/SX126x/SX126x.cpp index 14868dd1..6f85b1c0 100644 --- a/src/modules/SX126x/SX126x.cpp +++ b/src/modules/SX126x/SX126x.cpp @@ -228,8 +228,7 @@ int16_t SX126x::transmit(uint8_t* data, size_t len, uint8_t addr) { while(!_mod->digitalRead(_mod->getIrq())) { _mod->yield(); if(_mod->micros() - start > timeout) { - clearIrqStatus(); - standby(); + finishTransmit(); return(RADIOLIB_ERR_TX_TIMEOUT); } } @@ -238,14 +237,7 @@ int16_t SX126x::transmit(uint8_t* data, size_t len, uint8_t addr) { // update data rate _dataRate = (len*8.0)/((float)elapsed/1000000.0); - // clear interrupt flags - state = clearIrqStatus(); - RADIOLIB_ASSERT(state); - - // set mode to standby to disable transmitter - state = standby(); - - return(state); + return(finishTransmit()); } int16_t SX126x::receive(uint8_t* data, size_t len) { @@ -440,6 +432,14 @@ int16_t SX126x::startTransmit(uint8_t* data, size_t len, uint8_t addr) { return(state); } +int16_t SX126x::finishTransmit() { + // clear interrupt flags + clearIrqStatus(); + + // set mode to standby to disable transmitter/RF switch + return(standby()); +} + int16_t SX126x::startReceive(uint32_t timeout) { int16_t state = startReceiveCommon(timeout); RADIOLIB_ASSERT(state); diff --git a/src/modules/SX126x/SX126x.h b/src/modules/SX126x/SX126x.h index 0c426566..afd04fb9 100644 --- a/src/modules/SX126x/SX126x.h +++ b/src/modules/SX126x/SX126x.h @@ -527,6 +527,13 @@ class SX126x: 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. DIO1 will be activated when full packet is received.