From 8acaca488402fae8481da9f16a6f859315ab3421 Mon Sep 17 00:00:00 2001 From: jgromes Date: Sun, 25 Jun 2023 09:33:17 +0200 Subject: [PATCH] [SX127x] Swap Tx IQ inversion (#778) --- src/modules/SX127x/SX127x.cpp | 10 ++++++---- src/modules/SX127x/SX127x.h | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/modules/SX127x/SX127x.cpp b/src/modules/SX127x/SX127x.cpp index 467bbecd..4e9d5adc 100644 --- a/src/modules/SX127x/SX127x.cpp +++ b/src/modules/SX127x/SX127x.cpp @@ -1503,20 +1503,22 @@ void SX127x::clearFIFO(size_t count) { } } -int16_t SX127x::invertIQ(bool invertIQ) { +int16_t SX127x::invertIQ(bool enable) { // check active modem if(getActiveModem() != RADIOLIB_SX127X_LORA) { return(RADIOLIB_ERR_WRONG_MODEM); } + // Tx path inversion is swapped, because it seems that setting it according to the datsheet + // will actually lead to the wrong inversion. See https://github.com/jgromes/RadioLib/issues/778 int16_t state; - if(invertIQ) { + if(enable) { state = this->mod->SPIsetRegValue(RADIOLIB_SX127X_REG_INVERT_IQ, RADIOLIB_SX127X_INVERT_IQ_RXPATH_ON, 6, 6); - state |= this->mod->SPIsetRegValue(RADIOLIB_SX127X_REG_INVERT_IQ, RADIOLIB_SX127X_INVERT_IQ_TXPATH_ON, 0, 0); + state |= this->mod->SPIsetRegValue(RADIOLIB_SX127X_REG_INVERT_IQ, RADIOLIB_SX127X_INVERT_IQ_TXPATH_OFF, 0, 0); state |= this->mod->SPIsetRegValue(RADIOLIB_SX127X_REG_INVERT_IQ2, RADIOLIB_SX127X_IQ2_ENABLE); } else { state = this->mod->SPIsetRegValue(RADIOLIB_SX127X_REG_INVERT_IQ, RADIOLIB_SX127X_INVERT_IQ_RXPATH_OFF, 6, 6); - state |= this->mod->SPIsetRegValue(RADIOLIB_SX127X_REG_INVERT_IQ, RADIOLIB_SX127X_INVERT_IQ_TXPATH_OFF, 0, 0); + state |= this->mod->SPIsetRegValue(RADIOLIB_SX127X_REG_INVERT_IQ, RADIOLIB_SX127X_INVERT_IQ_TXPATH_ON, 0, 0); state |= this->mod->SPIsetRegValue(RADIOLIB_SX127X_REG_INVERT_IQ2, RADIOLIB_SX127X_IQ2_DISABLE); } diff --git a/src/modules/SX127x/SX127x.h b/src/modules/SX127x/SX127x.h index 951ee31b..dcd84790 100644 --- a/src/modules/SX127x/SX127x.h +++ b/src/modules/SX127x/SX127x.h @@ -1086,10 +1086,10 @@ class SX127x: public PhysicalLayer { /*! \brief Enable/disable inversion of the I and Q signals - \param invertIQ QI inversion enabled (true) or disabled (false); + \param enable QI inversion enabled (true) or disabled (false); \returns \ref status_codes */ - int16_t invertIQ(bool invertIQ); + int16_t invertIQ(bool enable); #if !defined(RADIOLIB_EXCLUDE_DIRECT_RECEIVE) /*!