From d1527b0d8cdef4c7350dabc860e73e71d1789da7 Mon Sep 17 00:00:00 2001 From: jgromes Date: Thu, 18 Jun 2020 16:32:52 +0200 Subject: [PATCH] [Si443x] Implemented RF switch control --- src/modules/Si443x/Si443x.cpp | 10 ++++++++++ src/modules/Si443x/Si443x.h | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/modules/Si443x/Si443x.cpp b/src/modules/Si443x/Si443x.cpp index 153e5c3e..0ec47c9b 100644 --- a/src/modules/Si443x/Si443x.cpp +++ b/src/modules/Si443x/Si443x.cpp @@ -222,6 +222,9 @@ int16_t Si443x::startTransmit(uint8_t* data, size_t len, uint8_t addr) { // write packet to FIFO _mod->SPIwriteRegisterBurst(SI443X_REG_FIFO_ACCESS, data, len); + // set RF switch (if present) + _mod->setRfSwitchState(true); + // set mode to transmit _mod->SPIwriteRegister(SI443X_REG_OP_FUNC_CONTROL_1, SI443X_TX_ON); @@ -246,6 +249,9 @@ int16_t Si443x::startReceive() { // clear interrupt flags clearIRQFlags(); + // set RF switch (if present) + _mod->setRfSwitchState(false); + // set mode to receive _mod->SPIwriteRegister(SI443X_REG_OP_FUNC_CONTROL_1, SI443X_RX_ON); @@ -504,6 +510,10 @@ int16_t Si443x::setDataShaping(float sh) { } } +void Si443x::setRfSwitchPins(RADIOLIB_PIN_TYPE rxEn, RADIOLIB_PIN_TYPE txEn) { + _mod->setRfSwitchPins(rxEn, txEn); +} + int16_t Si443x::setFrequencyRaw(float newFreq) { // set mode to standby int16_t state = standby(); diff --git a/src/modules/Si443x/Si443x.h b/src/modules/Si443x/Si443x.h index df5ae4d0..1cfd2700 100644 --- a/src/modules/Si443x/Si443x.h +++ b/src/modules/Si443x/Si443x.h @@ -760,6 +760,16 @@ class Si443x: public PhysicalLayer { */ int16_t setDataShaping(float sh); + /*! + \brief Some modules contain external RF switch controlled by two pins. This function gives RadioLib control over those two pins to automatically switch Rx and Tx state. + When using automatic RF switch control, DO NOT change the pin mode of rxEn or txEn from Arduino sketch! + + \param rxEn RX enable pin. + + \param txEn TX enable pin. + */ + void setRfSwitchPins(RADIOLIB_PIN_TYPE rxEn, RADIOLIB_PIN_TYPE txEn); + #ifndef RADIOLIB_GODMODE protected: #endif