diff --git a/src/modules/Si443x/Si443x.cpp b/src/modules/Si443x/Si443x.cpp index 31c375c6..09cd6df5 100644 --- a/src/modules/Si443x/Si443x.cpp +++ b/src/modules/Si443x/Si443x.cpp @@ -112,6 +112,7 @@ int16_t Si443x::receive(uint8_t* data, size_t len, RadioLibTime_t timeout) { RadioLibTime_t start = this->mod->hal->millis(); while(this->mod->hal->digitalRead(this->mod->getIrq())) { if(this->mod->hal->millis() - start > timeoutInternal) { + (void)finishReceive(); return(RADIOLIB_ERR_RX_TIMEOUT); } } @@ -346,14 +347,15 @@ int16_t Si443x::readData(uint8_t* data, size_t len) { // clear internal flag so getPacketLength can return the new packet length this->packetLengthQueried = false; - // set mode to standby - int16_t state = standby(); - RADIOLIB_ASSERT(state); + return(finishReceive()); +} +int16_t Si443x::finishReceive() { // clear interrupt flags clearIrqStatus(); - return(RADIOLIB_ERR_NONE); + // set mode to standby to disable RF switch + return(standby()); } int16_t Si443x::setBitRate(float br) { diff --git a/src/modules/Si443x/Si443x.h b/src/modules/Si443x/Si443x.h index a07ed6e6..93bd9c93 100644 --- a/src/modules/Si443x/Si443x.h +++ b/src/modules/Si443x/Si443x.h @@ -719,6 +719,12 @@ class Si443x: public PhysicalLayer { */ int16_t readData(uint8_t* data, size_t len) override; + /*! + \brief Clean up after reception is done. + \returns \ref status_codes + */ + int16_t finishReceive() override; + // configuration methods /*!