Moved setDio2AsRfSwitch() from module to SX126x

Added new error code
Removed memory leak

Signed-off-by: Bernd Giesecke <bernd@giesecke.tk>
This commit is contained in:
Bernd Giesecke 2019-06-04 14:28:33 +08:00
parent 8fc323a900
commit 23b0b9b25a
5 changed files with 13 additions and 31 deletions

View file

@ -79,10 +79,6 @@ void Module::term() {
_spi->end(); _spi->end();
} }
void Module::setDio2Func(bool enable) {
_dio2RfSwitch = enable;
}
void Module::ATemptyBuffer() { void Module::ATemptyBuffer() {
while(ModuleSerial->available() > 0) { while(ModuleSerial->available() > 0) {
ModuleSerial->read(); ModuleSerial->read();

View file

@ -277,20 +277,6 @@ class Module {
*/ */
int getTx() const { return(_tx); } 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. \brief Access method to get the SPI interface.
@ -311,7 +297,6 @@ class Module {
int _rx; int _rx;
int _int0; int _int0;
int _int1; int _int1;
bool _dio2RfSwitch = false;
SPIClass* _spi; SPIClass* _spi;
SPISettings _spiSettings; SPISettings _spiSettings;

View file

@ -461,6 +461,11 @@
*/ */
#define ERR_SPI_CMD_FAILED -707 #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
/*! /*!
\} \}
*/ */

View file

@ -274,9 +274,9 @@ int16_t SX126x::scanChannel() {
return(ERR_WRONG_MODEM); return(ERR_WRONG_MODEM);
} }
if (_mod->getDio2Func()) { if (_dio2RfSwitch) {
// If DIO2 is used as RF switch this function does not work // 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 // set mode to standby
@ -1064,14 +1064,7 @@ int16_t SX126x::setFrequencyRaw(float freq) {
} }
int16_t SX126x::setDio2AsRfSwitch(bool enable) { int16_t SX126x::setDio2AsRfSwitch(bool enable) {
int dio2 = _mod->getInt1(); uint8_t data[1];
if (dio2 == -1)
{
// DIO2 is not defined, return error
_mod->setDio2Func(false);
return ERR_WRONG_MODEM;
}
uint8_t* data = new uint8_t[1];
if (enable) { if (enable) {
// set DIO2 as RF switch // set DIO2 as RF switch
data[0] = SX126X_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); int16_t state = SPIwriteCommand(SX126X_CMD_SET_DIO2_AS_RF_SWITCH_CTRL, data, 1);
if (state == ERR_NONE) { if (state == ERR_NONE) {
_mod->setDio2Func(enable); _dio2RfSwitch = true;
} }
return(state); return(state);
} }
int16_t SX126x::config(uint8_t modem) { int16_t SX126x::config(uint8_t modem) {
// set DIO2 as IRQ // set DIO2 as IRQ
_dio2RfSwitch = false;
uint8_t* data = new uint8_t[1]; uint8_t* data = new uint8_t[1];
data[0] = SX126X_DIO2_AS_IRQ; data[0] = SX126X_DIO2_AS_IRQ;
int16_t state = SPIwriteCommand(SX126X_CMD_SET_DIO2_AS_RF_SWITCH_CTRL, data, 1); int16_t state = SPIwriteCommand(SX126X_CMD_SET_DIO2_AS_RF_SWITCH_CTRL, data, 1);

View file

@ -683,7 +683,7 @@ class SX126x: public PhysicalLayer {
\returns \ref status_codes \returns \ref status_codes
*/ */
int16_t setDio2AsRfSwitch(bool enable = false); int16_t setDio2AsRfSwitch(bool enable = true);
protected: protected:
// SX1276x SPI command implementations // SX1276x SPI command implementations
@ -727,6 +727,8 @@ class SX126x: public PhysicalLayer {
float _dataRate; float _dataRate;
bool _dio2RfSwitch = false;
int16_t config(uint8_t modem); int16_t config(uint8_t modem);
// common low-level SPI interface // common low-level SPI interface