From f4b2b6d257cabe0b3e7d8dbaca75bb54726e3352 Mon Sep 17 00:00:00 2001 From: jgromes Date: Sat, 13 Feb 2021 17:42:00 +0100 Subject: [PATCH] [SX128x] Added -1 as alias for lowest supported frequency deviation --- src/modules/SX128x/SX128x.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/modules/SX128x/SX128x.cpp b/src/modules/SX128x/SX128x.cpp index e2990218..24967274 100644 --- a/src/modules/SX128x/SX128x.cpp +++ b/src/modules/SX128x/SX128x.cpp @@ -802,17 +802,23 @@ int16_t SX128x::setFrequencyDeviation(float freqDev) { return(ERR_WRONG_MODEM); } - RADIOLIB_CHECK_RANGE(freqDev, 0.0, 3200.0, ERR_INVALID_FREQUENCY_DEVIATION); + // set frequency deviation to lowest available setting (required for digimodes) + float newFreqDev = freqDev; + if(freqDev < 0.0) { + newFreqDev = 62.5; + } + + RADIOLIB_CHECK_RANGE(newFreqDev, 62.5, 1000.0, ERR_INVALID_FREQUENCY_DEVIATION); // override for the lowest possible frequency deviation - required for some PhysicalLayer protocols - if(freqDev == 0.0) { + if(newFreqDev == 0.0) { _modIndex = SX128X_BLE_GFSK_MOD_IND_0_35; _br = SX128X_BLE_GFSK_BR_0_125_BW_0_3; return(setModulationParams(_br, _modIndex, _shaping)); } // update modulation parameters - uint8_t modIndex = (uint8_t)((8.0 * (freqDev / (float)_brKbps)) - 1.0); + uint8_t modIndex = (uint8_t)((8.0 * (newFreqDev / (float)_brKbps)) - 1.0); if(modIndex > SX128X_BLE_GFSK_MOD_IND_4_00) { return(ERR_INVALID_MODULATION_PARAMETERS); }