From f61be0d273372c502578dee4a2b9bc7af59af2dc Mon Sep 17 00:00:00 2001 From: jgromes Date: Fri, 5 Apr 2024 17:30:05 +0200 Subject: [PATCH] [SX126x] Added public method to set PA ramp time (#1054) --- keywords.txt | 1 + src/modules/SX126x/SX1261.cpp | 5 ++--- src/modules/SX126x/SX1262.cpp | 5 ++--- src/modules/SX126x/SX1268.cpp | 5 ++--- src/modules/SX126x/SX126x.cpp | 10 +++++++++- src/modules/SX126x/SX126x.h | 9 ++++++++- 6 files changed, 24 insertions(+), 11 deletions(-) diff --git a/keywords.txt b/keywords.txt index d9d595072..2fee74210 100644 --- a/keywords.txt +++ b/keywords.txt @@ -225,6 +225,7 @@ spectralScanStart KEYWORD2 spectralScanAbort KEYWORD2 spectralScanGetStatus KEYWORD2 spectralScanGetResult KEYWORD2 +setPaRampTime KEYWORD2 # nRF24 setIrqAction KEYWORD2 diff --git a/src/modules/SX126x/SX1261.cpp b/src/modules/SX126x/SX1261.cpp index dd39bfef0..cabe2b579 100644 --- a/src/modules/SX126x/SX1261.cpp +++ b/src/modules/SX126x/SX1261.cpp @@ -17,9 +17,8 @@ int16_t SX1261::setOutputPower(int8_t power) { state = SX126x::setPaConfig(0x04, RADIOLIB_SX126X_PA_CONFIG_SX1261, 0x00); RADIOLIB_ASSERT(state); - // set output power - /// \todo power ramp time configuration - state = SX126x::setTxParams(power); + // set output power with default 200us ramp + state = SX126x::setTxParams(power, RADIOLIB_SX126X_PA_RAMP_200U); RADIOLIB_ASSERT(state); // restore OCP configuration diff --git a/src/modules/SX126x/SX1262.cpp b/src/modules/SX126x/SX1262.cpp index 807b80d6d..036cba0ad 100644 --- a/src/modules/SX126x/SX1262.cpp +++ b/src/modules/SX126x/SX1262.cpp @@ -109,9 +109,8 @@ int16_t SX1262::setOutputPower(int8_t power) { state = SX126x::setPaConfig(0x04, RADIOLIB_SX126X_PA_CONFIG_SX1262); RADIOLIB_ASSERT(state); - // set output power - /// \todo power ramp time configuration - state = SX126x::setTxParams(power); + // set output power with default 200us ramp + state = SX126x::setTxParams(power, RADIOLIB_SX126X_PA_RAMP_200U); RADIOLIB_ASSERT(state); // restore OCP configuration diff --git a/src/modules/SX126x/SX1268.cpp b/src/modules/SX126x/SX1268.cpp index 86df6fa5c..1b63c4d06 100644 --- a/src/modules/SX126x/SX1268.cpp +++ b/src/modules/SX126x/SX1268.cpp @@ -104,9 +104,8 @@ int16_t SX1268::setOutputPower(int8_t power) { state = SX126x::setPaConfig(0x04, RADIOLIB_SX126X_PA_CONFIG_SX1268); RADIOLIB_ASSERT(state); - // set output power - /// \todo power ramp time configuration - state = SX126x::setTxParams(power); + // set output power with default 200us ramp + state = SX126x::setTxParams(power, RADIOLIB_SX126X_PA_RAMP_200U); RADIOLIB_ASSERT(state); // restore OCP configuration diff --git a/src/modules/SX126x/SX126x.cpp b/src/modules/SX126x/SX126x.cpp index c0db2f846..fe633fe05 100644 --- a/src/modules/SX126x/SX126x.cpp +++ b/src/modules/SX126x/SX126x.cpp @@ -1847,6 +1847,10 @@ int16_t SX126x::calibrateImageRejection(float freqMin, float freqMax) { return(this->calibrateImage(data)); } +int16_t SX126x::setPaRampTime(uint8_t rampTime) { + return(this->setTxParams(this->pwr, rampTime)); +} + int16_t SX126x::calibrateImage(uint8_t* data) { int16_t state = this->mod->SPIwriteStream(RADIOLIB_SX126X_CMD_CALIBRATE_IMAGE, data, 2); @@ -1870,7 +1874,11 @@ uint8_t SX126x::getPacketType() { int16_t SX126x::setTxParams(uint8_t pwr, uint8_t rampTime) { uint8_t data[] = { pwr, rampTime }; - return(this->mod->SPIwriteStream(RADIOLIB_SX126X_CMD_SET_TX_PARAMS, data, 2)); + int16_t state = this->mod->SPIwriteStream(RADIOLIB_SX126X_CMD_SET_TX_PARAMS, data, 2); + if(state == RADIOLIB_ERR_NONE) { + this->pwr = pwr; + } + return(state); } int16_t SX126x::setPacketMode(uint8_t mode, uint8_t len) { diff --git a/src/modules/SX126x/SX126x.h b/src/modules/SX126x/SX126x.h index d2b9ecfef..ec25fb66b 100644 --- a/src/modules/SX126x/SX126x.h +++ b/src/modules/SX126x/SX126x.h @@ -1123,6 +1123,12 @@ class SX126x: public PhysicalLayer { */ int16_t calibrateImageRejection(float freqMin, float freqMax); + /*! + \brief Set PA ramp-up time. Set to 200us by default. + \returns \ref status_codes + */ + int16_t setPaRampTime(uint8_t rampTime); + #if !RADIOLIB_GODMODE && !RADIOLIB_LOW_LEVEL protected: #endif @@ -1142,7 +1148,7 @@ class SX126x: public PhysicalLayer { int16_t setRfFrequency(uint32_t frf); int16_t calibrateImage(uint8_t* data); uint8_t getPacketType(); - int16_t setTxParams(uint8_t power, uint8_t rampTime = RADIOLIB_SX126X_PA_RAMP_200U); + int16_t setTxParams(uint8_t power, uint8_t rampTime); int16_t setModulationParams(uint8_t sf, uint8_t bw, uint8_t cr, uint8_t ldro); int16_t setModulationParamsFSK(uint32_t br, uint8_t sh, uint8_t rxBw, uint32_t freqDev); int16_t setPacketParams(uint16_t preambleLen, uint8_t crcType, uint8_t payloadLen, uint8_t hdrType, uint8_t invertIQ); @@ -1187,6 +1193,7 @@ class SX126x: public PhysicalLayer { float dataRateMeasured = 0; uint32_t tcxoDelay = 0; + uint8_t pwr = 0; size_t implicitLen = 0; uint8_t invertIQEnabled = RADIOLIB_SX126X_LORA_IQ_STANDARD;