From 733835e9bad3b11c8329a06a48f23350c2a2d5f3 Mon Sep 17 00:00:00 2001 From: jgromes Date: Sun, 18 Sep 2022 16:14:04 +0200 Subject: [PATCH] [Si443x] Added finishTransmit --- .../Si443x_Transmit_Interrupt.ino | 5 +++++ src/modules/Si443x/Si443x.cpp | 19 ++++++++++--------- src/modules/Si443x/Si443x.h | 7 +++++++ 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/examples/Si443x/Si443x_Transmit_Interrupt/Si443x_Transmit_Interrupt.ino b/examples/Si443x/Si443x_Transmit_Interrupt/Si443x_Transmit_Interrupt.ino index 7f6877c6..317932fc 100644 --- a/examples/Si443x/Si443x_Transmit_Interrupt/Si443x_Transmit_Interrupt.ino +++ b/examples/Si443x/Si443x_Transmit_Interrupt/Si443x_Transmit_Interrupt.ino @@ -108,6 +108,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/Si443x/Si443x.cpp b/src/modules/Si443x/Si443x.cpp index fcd41876..c498622f 100644 --- a/src/modules/Si443x/Si443x.cpp +++ b/src/modules/Si443x/Si443x.cpp @@ -87,19 +87,12 @@ int16_t Si443x::transmit(uint8_t* data, size_t len, uint8_t addr) { while(_mod->digitalRead(_mod->getIrq())) { _mod->yield(); if(_mod->micros() - start > timeout) { - standby(); - clearIRQFlags(); + finishTransmit(); return(RADIOLIB_ERR_TX_TIMEOUT); } } - // clear interrupt flags - clearIRQFlags(); - - // set mode to standby - standby(); - - return(state); + return(finishTransmit()); } int16_t Si443x::receive(uint8_t* data, size_t len) { @@ -258,6 +251,14 @@ int16_t Si443x::startTransmit(uint8_t* data, size_t len, uint8_t addr) { return(state); } +int16_t Si443x::finishTransmit() { + // clear interrupt flags + clearIRQFlags(); + + // set mode to standby to disable transmitter/RF switch + return(standby()); +} + int16_t Si443x::startReceive() { // set mode to standby int16_t state = standby(); diff --git a/src/modules/Si443x/Si443x.h b/src/modules/Si443x/Si443x.h index 2175be7c..1ee97a12 100644 --- a/src/modules/Si443x/Si443x.h +++ b/src/modules/Si443x/Si443x.h @@ -683,6 +683,13 @@ class Si443x: 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. IRQ will be activated when full valid packet is received.