diff --git a/src/Module.cpp b/src/Module.cpp index da2ac6f9..5c238519 100644 --- a/src/Module.cpp +++ b/src/Module.cpp @@ -79,10 +79,6 @@ void Module::term() { _spi->end(); } -void Module::setDio2Func(bool enable) { - _dio2RfSwitch = enable; -} - void Module::ATemptyBuffer() { while(ModuleSerial->available() > 0) { ModuleSerial->read(); diff --git a/src/Module.h b/src/Module.h index 0ed6a3eb..03fb75d4 100644 --- a/src/Module.h +++ b/src/Module.h @@ -277,20 +277,6 @@ class Module { */ int getTx() const { return(_tx); } - /*! - \brief Access method to get DIO2 RF switch flag. - - \returns true if DIO2 is set as RF switch. - */ - int getDio2Func() const { return(_dio2RfSwitch); } - - /*! - \brief Access method to set/reset DIO2 RF switch flag. - - \returns true if DIO2 is set as RF switch. - */ - void setDio2Func(bool enable); - /*! \brief Access method to get the SPI interface. @@ -311,7 +297,6 @@ class Module { int _rx; int _int0; int _int1; - bool _dio2RfSwitch = false; SPIClass* _spi; SPISettings _spiSettings; diff --git a/src/TypeDef.h b/src/TypeDef.h index b007f408..efda5ef0 100644 --- a/src/TypeDef.h +++ b/src/TypeDef.h @@ -461,6 +461,11 @@ */ #define ERR_SPI_CMD_FAILED -707 +/*! + \brief SX126x scan channel not possible because DIO2 is used as RF antenna switch. +*/ +#define ERR_DIO2_UNAVAIL_CAD_FAILED -708 + /*! \} */ diff --git a/src/modules/SX126x.cpp b/src/modules/SX126x.cpp index e43a774d..deb2dba8 100644 --- a/src/modules/SX126x.cpp +++ b/src/modules/SX126x.cpp @@ -274,9 +274,9 @@ int16_t SX126x::scanChannel() { return(ERR_WRONG_MODEM); } - if (_mod->getDio2Func()) { + if (_dio2RfSwitch) { // If DIO2 is used as RF switch this function does not work - return(ERR_WRONG_MODEM); + return(ERR_DIO2_UNAVAIL_CAD_FAILED); } // set mode to standby @@ -1064,14 +1064,7 @@ int16_t SX126x::setFrequencyRaw(float freq) { } int16_t SX126x::setDio2AsRfSwitch(bool enable) { - int dio2 = _mod->getInt1(); - if (dio2 == -1) - { - // DIO2 is not defined, return error - _mod->setDio2Func(false); - return ERR_WRONG_MODEM; - } - uint8_t* data = new uint8_t[1]; + uint8_t data[1]; if (enable) { // set DIO2 as RF switch data[0] = SX126X_DIO2_AS_RF_SWITCH; @@ -1081,13 +1074,14 @@ int16_t SX126x::setDio2AsRfSwitch(bool enable) { int16_t state = SPIwriteCommand(SX126X_CMD_SET_DIO2_AS_RF_SWITCH_CTRL, data, 1); if (state == ERR_NONE) { - _mod->setDio2Func(enable); + _dio2RfSwitch = true; } return(state); } int16_t SX126x::config(uint8_t modem) { // set DIO2 as IRQ + _dio2RfSwitch = false; uint8_t* data = new uint8_t[1]; data[0] = SX126X_DIO2_AS_IRQ; int16_t state = SPIwriteCommand(SX126X_CMD_SET_DIO2_AS_RF_SWITCH_CTRL, data, 1); diff --git a/src/modules/SX126x.h b/src/modules/SX126x.h index 1f34c759..0139e191 100644 --- a/src/modules/SX126x.h +++ b/src/modules/SX126x.h @@ -683,7 +683,7 @@ class SX126x: public PhysicalLayer { \returns \ref status_codes */ - int16_t setDio2AsRfSwitch(bool enable = false); + int16_t setDio2AsRfSwitch(bool enable = true); protected: // SX1276x SPI command implementations @@ -727,6 +727,8 @@ class SX126x: public PhysicalLayer { float _dataRate; + bool _dio2RfSwitch = false; + int16_t config(uint8_t modem); // common low-level SPI interface