diff --git a/src/modules/SX128x/SX128x.cpp b/src/modules/SX128x/SX128x.cpp index d222b016..97222c70 100644 --- a/src/modules/SX128x/SX128x.cpp +++ b/src/modules/SX128x/SX128x.cpp @@ -340,6 +340,9 @@ int16_t SX128x::receive(uint8_t* data, size_t len) { } int16_t SX128x::transmitDirect(uint32_t frf) { + // set RF switch (if present) + _mod->setRfSwitchState(LOW, HIGH); + // user requested to start transmitting immediately (required for RTTY) int16_t state = ERR_NONE; if(frf != 0) { @@ -352,6 +355,9 @@ int16_t SX128x::transmitDirect(uint32_t frf) { } int16_t SX128x::receiveDirect() { + // set RF switch (if present) + _mod->setRfSwitchState(HIGH, LOW); + // SX128x is unable to output received data directly return(ERR_UNKNOWN); } @@ -374,6 +380,9 @@ int16_t SX128x::scanChannel() { state = clearIrqStatus(); RADIOLIB_ASSERT(state); + // set RF switch (if present) + _mod->setRfSwitchState(HIGH, LOW); + // set mode to CAD state = setCad(); RADIOLIB_ASSERT(state); @@ -399,6 +408,9 @@ int16_t SX128x::scanChannel() { } int16_t SX128x::sleep(bool retainConfig) { + // set RF switch (if present) + _mod->setRfSwitchState(LOW, LOW); + uint8_t sleepConfig = SX128X_SLEEP_DATA_BUFFER_RETAIN | SX128X_SLEEP_DATA_RAM_RETAIN; if(!retainConfig) { sleepConfig = SX128X_SLEEP_DATA_BUFFER_FLUSH | SX128X_SLEEP_DATA_RAM_FLUSH; @@ -416,6 +428,9 @@ int16_t SX128x::standby() { } int16_t SX128x::standby(uint8_t mode) { + // set RF switch (if present) + _mod->setRfSwitchState(LOW, LOW); + uint8_t data[] = { mode }; return(SPIwriteCommand(SX128X_CMD_SET_STANDBY, data, 1)); } @@ -478,7 +493,7 @@ int16_t SX128x::startTransmit(uint8_t* data, size_t len, uint8_t addr) { RADIOLIB_ASSERT(state); // set RF switch (if present) - _mod->setRfSwitchState(true); + _mod->setRfSwitchState(LOW, HIGH); // start transmission state = setTx(SX128X_TX_TIMEOUT_NONE); @@ -517,7 +532,7 @@ int16_t SX128x::startReceive(uint16_t timeout) { } // set RF switch (if present) - _mod->setRfSwitchState(false); + _mod->setRfSwitchState(HIGH, LOW); // set mode to receive state = setRx(timeout);