From 6fdf3feef73fd538fd47a1ffec3660738f3caa4b Mon Sep 17 00:00:00 2001 From: Marcin Czeczko Date: Wed, 3 Mar 2021 12:40:23 +0100 Subject: [PATCH] [SX1278] Added method to control InvertIQ --- keywords.txt | 1 + src/modules/SX127x/SX1278.cpp | 16 ++++++++++++++++ src/modules/SX127x/SX1278.h | 13 +++++++++++++ 3 files changed, 30 insertions(+) diff --git a/keywords.txt b/keywords.txt index e117eec2..fd9d2268 100644 --- a/keywords.txt +++ b/keywords.txt @@ -131,6 +131,7 @@ setRfSwitchPins KEYWORD2 forceLDRO KEYWORD2 autoLDRO KEYWORD2 getChipVersion KEYWORD2 +invertIQ KEYWORD2 # RF69-specific setAESKey KEYWORD2 diff --git a/src/modules/SX127x/SX1278.cpp b/src/modules/SX127x/SX1278.cpp index f33af33a..8f43d52e 100644 --- a/src/modules/SX127x/SX1278.cpp +++ b/src/modules/SX127x/SX1278.cpp @@ -538,6 +538,22 @@ int16_t SX1278::setHeaderType(uint8_t headerType, size_t len) { return(state); } +int16_t SX1278::invertIQ(bool invertIQ) { + // check active modem + if(getActiveModem() != SX127X_LORA) { + return(ERR_WRONG_MODEM); + } + + int16_t state; + if(invertIQ) { + state = _mod->SPIsetRegValue(SX127X_REG_INVERT_IQ, SX127X_REG_INVERT_IQ_ON, 6, 6); + } else { + state = _mod->SPIsetRegValue(SX127X_REG_INVERT_IQ, SX127X_REG_INVERT_IQ_OFF, 6, 6); + } + + return(state); +} + int16_t SX1278::configFSK() { // configure common registers int16_t state = SX127x::configFSK(); diff --git a/src/modules/SX127x/SX1278.h b/src/modules/SX127x/SX1278.h index 438a9c18..b79eb244 100644 --- a/src/modules/SX127x/SX1278.h +++ b/src/modules/SX127x/SX1278.h @@ -66,6 +66,10 @@ #define SX1278_AGC_AUTO_OFF 0b00000000 // 2 2 LNA gain set by REG_LNA #define SX1278_AGC_AUTO_ON 0b00000100 // 2 2 LNA gain set by internal AGC loop +// SX127X_REG_INVERT_IQ +#define SX127X_REG_INVERT_IQ_ON 0b01000000 // 6 6 I and Q signals are inverted +#define SX127X_REG_INVERT_IQ_OFF 0b00000000 // 6 6 normal mode + // SX127X_REG_VERSION #define SX1278_CHIP_VERSION 0x12 @@ -295,6 +299,15 @@ class SX1278: public SX127x { */ int16_t explicitHeader(); + /*! + \brief Enables/disables Invert the LoRa I and Q signals. + + \param invertIQ Enable (true) or disable (false) LoRa I and Q signals. + + \returns \ref status_codes + */ + int16_t invertIQ(bool invertIQ); + #ifndef RADIOLIB_GODMODE protected: #endif