From 21f2ef6836fa44e3a1999ea9adeeec11ebd8d147 Mon Sep 17 00:00:00 2001 From: jgromes Date: Mon, 17 Apr 2023 19:12:42 +0200 Subject: [PATCH] [SX128x] Fixed IQ inversion --- src/modules/SX128x/SX128x.cpp | 17 +++++++++-------- src/modules/SX128x/SX128x.h | 3 +++ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/modules/SX128x/SX128x.cpp b/src/modules/SX128x/SX128x.cpp index 8c6ec31a..2d16acc9 100644 --- a/src/modules/SX128x/SX128x.cpp +++ b/src/modules/SX128x/SX128x.cpp @@ -483,7 +483,7 @@ int16_t SX128x::startTransmit(uint8_t* data, size_t len, uint8_t addr) { int16_t state = RADIOLIB_ERR_NONE; uint8_t modem = getPacketType(); if(modem == RADIOLIB_SX128X_PACKET_TYPE_LORA) { - state = setPacketParamsLoRa(_preambleLengthLoRa, _headerType, len, _crcLoRa); + state = setPacketParamsLoRa(_preambleLengthLoRa, _headerType, len, _crcLoRa, _invertIQ); } else if((modem == RADIOLIB_SX128X_PACKET_TYPE_GFSK) || (modem == RADIOLIB_SX128X_PACKET_TYPE_FLRC)) { state = setPacketParamsGFSK(_preambleLengthGFSK, _syncWordLen, _syncWordMatch, _crcGFSK, _whitening, len); } else if(modem == RADIOLIB_SX128X_PACKET_TYPE_BLE) { @@ -568,7 +568,7 @@ int16_t SX128x::startReceive(uint16_t timeout, uint16_t irqFlags, uint16_t irqMa // set implicit mode and expected len if applicable if((_headerType == RADIOLIB_SX128X_LORA_HEADER_IMPLICIT) && (getPacketType() == RADIOLIB_SX128X_PACKET_TYPE_LORA)) { - state = setPacketParamsLoRa(_preambleLengthLoRa, _headerType, _payloadLen, _crcLoRa); + state = setPacketParamsLoRa(_preambleLengthLoRa, _headerType, _payloadLen, _crcLoRa, _invertIQ); RADIOLIB_ASSERT(state); } @@ -753,7 +753,7 @@ int16_t SX128x::setPreambleLength(uint32_t preambleLength) { // update packet parameters _preambleLengthLoRa = (e << 4) | m; - return(setPacketParamsLoRa(_preambleLengthLoRa, _headerType, _payloadLen, _crcLoRa)); + return(setPacketParamsLoRa(_preambleLengthLoRa, _headerType, _payloadLen, _crcLoRa, _invertIQ)); } else if((modem == RADIOLIB_SX128X_PACKET_TYPE_GFSK) || (modem == RADIOLIB_SX128X_PACKET_TYPE_FLRC)) { // GFSK or FLRC @@ -1008,7 +1008,7 @@ int16_t SX128x::setCRC(uint8_t len, uint32_t initial, uint16_t polynomial) { } else { return(RADIOLIB_ERR_INVALID_CRC_CONFIGURATION); } - state = setPacketParamsLoRa(_preambleLengthLoRa, _headerType, _payloadLen, _crcLoRa); + state = setPacketParamsLoRa(_preambleLengthLoRa, _headerType, _payloadLen, _crcLoRa, _invertIQ); return(state); } @@ -1284,12 +1284,13 @@ int16_t SX128x::invertIQ(bool invertIQ) { return(RADIOLIB_ERR_WRONG_MODEM); } - uint8_t invert = RADIOLIB_SX128X_LORA_IQ_STANDARD; if(invertIQ) { - invert = RADIOLIB_SX128X_LORA_IQ_INVERTED; + _invertIQ = RADIOLIB_SX128X_LORA_IQ_INVERTED; + } else { + _invertIQ = RADIOLIB_SX128X_LORA_IQ_STANDARD; } - return(setPacketParamsLoRa(_preambleLengthLoRa, _headerType, _payloadLen, _crcLoRa, invert)); + return(setPacketParamsLoRa(_preambleLengthLoRa, _headerType, _payloadLen, _crcLoRa, _invertIQ)); } #if !defined(RADIOLIB_EXCLUDE_DIRECT_RECEIVE) @@ -1430,7 +1431,7 @@ int16_t SX128x::setHeaderType(uint8_t headerType, size_t len) { // update packet parameters _headerType = headerType; _payloadLen = len; - return(setPacketParamsLoRa(_preambleLengthLoRa, _headerType, _payloadLen, _crcLoRa)); + return(setPacketParamsLoRa(_preambleLengthLoRa, _headerType, _payloadLen, _crcLoRa, _invertIQ)); } int16_t SX128x::config(uint8_t modem) { diff --git a/src/modules/SX128x/SX128x.h b/src/modules/SX128x/SX128x.h index 1aac8c74..51cb48e0 100644 --- a/src/modules/SX128x/SX128x.h +++ b/src/modules/SX128x/SX128x.h @@ -905,6 +905,9 @@ class SX128x: public PhysicalLayer { // common parameters uint8_t _pwr = 0; + // cached LoRa parameters + uint8_t _invertIQ = RADIOLIB_SX128X_LORA_IQ_STANDARD; + // cached GFSK parameters float _modIndexReal = 0; uint16_t _brKbps = 0;