[Si443x] Added missing RF switch control

This commit is contained in:
jgromes 2020-06-20 17:03:55 +02:00
parent b68bd2f9f9
commit 5f4481aef6

View file

@ -114,6 +114,9 @@ int16_t Si443x::receive(uint8_t* data, size_t len) {
} }
int16_t Si443x::sleep() { int16_t Si443x::sleep() {
// set RF switch (if present)
_mod->setRfSwitchState(LOW, LOW);
// disable wakeup timer interrupt // disable wakeup timer interrupt
int16_t state = _mod->SPIsetRegValue(SI443X_REG_INTERRUPT_ENABLE_1, 0x00); int16_t state = _mod->SPIsetRegValue(SI443X_REG_INTERRUPT_ENABLE_1, 0x00);
RADIOLIB_ASSERT(state); RADIOLIB_ASSERT(state);
@ -127,10 +130,16 @@ int16_t Si443x::sleep() {
} }
int16_t Si443x::standby() { int16_t Si443x::standby() {
// set RF switch (if present)
_mod->setRfSwitchState(LOW, LOW);
return(_mod->SPIsetRegValue(SI443X_REG_OP_FUNC_CONTROL_1, SI443X_XTAL_ON, 7, 0, 10)); return(_mod->SPIsetRegValue(SI443X_REG_OP_FUNC_CONTROL_1, SI443X_XTAL_ON, 7, 0, 10));
} }
int16_t Si443x::transmitDirect(uint32_t frf) { int16_t Si443x::transmitDirect(uint32_t frf) {
// set RF switch (if present)
_mod->setRfSwitchState(LOW, HIGH);
// user requested to start transmitting immediately (required for RTTY) // user requested to start transmitting immediately (required for RTTY)
if(frf != 0) { if(frf != 0) {
// convert the 24-bit frequency to the format accepted by the module // convert the 24-bit frequency to the format accepted by the module
@ -170,6 +179,9 @@ int16_t Si443x::transmitDirect(uint32_t frf) {
} }
int16_t Si443x::receiveDirect() { int16_t Si443x::receiveDirect() {
// set RF switch (if present)
_mod->setRfSwitchState(HIGH, LOW);
// activate direct mode // activate direct mode
int16_t state = directMode(); int16_t state = directMode();
RADIOLIB_ASSERT(state); RADIOLIB_ASSERT(state);
@ -223,7 +235,7 @@ int16_t Si443x::startTransmit(uint8_t* data, size_t len, uint8_t addr) {
_mod->SPIwriteRegisterBurst(SI443X_REG_FIFO_ACCESS, data, len); _mod->SPIwriteRegisterBurst(SI443X_REG_FIFO_ACCESS, data, len);
// set RF switch (if present) // set RF switch (if present)
_mod->setRfSwitchState(true); _mod->setRfSwitchState(LOW, HIGH);
// set mode to transmit // set mode to transmit
_mod->SPIwriteRegister(SI443X_REG_OP_FUNC_CONTROL_1, SI443X_TX_ON); _mod->SPIwriteRegister(SI443X_REG_OP_FUNC_CONTROL_1, SI443X_TX_ON);
@ -250,7 +262,7 @@ int16_t Si443x::startReceive() {
clearIRQFlags(); clearIRQFlags();
// set RF switch (if present) // set RF switch (if present)
_mod->setRfSwitchState(false); _mod->setRfSwitchState(HIGH, LOW);
// set mode to receive // set mode to receive
_mod->SPIwriteRegister(SI443X_REG_OP_FUNC_CONTROL_1, SI443X_RX_ON); _mod->SPIwriteRegister(SI443X_REG_OP_FUNC_CONTROL_1, SI443X_RX_ON);