diff --git a/src/shared/radio/SX1278/SX1278Defs.h b/src/shared/radio/SX1278/SX1278Defs.h index d19874b1b209234fbf1597baaa4c328e733baaf3..28dae0016b114e49f987f453cab964844ac98fc3 100644 --- a/src/shared/radio/SX1278/SX1278Defs.h +++ b/src/shared/radio/SX1278/SX1278Defs.h @@ -54,9 +54,6 @@ inline SPIBusConfig getSpiBusConfig(SPI::ClockDivider clock_divider) return bus_config; } -constexpr int MIN_BITRATE = FXOSC / 0xffff; -constexpr int MAX_BITRATE = FXOSC; - constexpr int MIN_FREQ_DEV = 0; constexpr int MAX_FREQ_DEV = 0x3fff * FSTEP; diff --git a/src/shared/radio/SX1278/SX1278Fsk.cpp b/src/shared/radio/SX1278/SX1278Fsk.cpp index 49878b1a3e4f473566ed4eec877cc00c84628068..75701ded057e6d67f32406cb6e67d08d7e10032f 100644 --- a/src/shared/radio/SX1278/SX1278Fsk.cpp +++ b/src/shared/radio/SX1278/SX1278Fsk.cpp @@ -80,8 +80,6 @@ SX1278Fsk::Error SX1278Fsk::configure(const Config &config) assert(((config.ocp >= 0 && config.ocp <= 120) || (config.ocp >= 130 && config.ocp <= 240)) && "[sx1278] Invalid ocp!"); - assert(config.bitrate >= MIN_BITRATE && config.bitrate <= MAX_BITRATE && - "[sx1278] Invalid bitrate!"); assert(config.freq_dev >= MIN_FREQ_DEV && config.freq_dev <= MAX_FREQ_DEV && "[sx1278] Invalid freq_dev!"); assert(config.freq_rf >= MIN_FREQ_RF && config.freq_rf <= MAX_FREQ_RF && @@ -105,7 +103,7 @@ SX1278Fsk::Error SX1278Fsk::configure(const Config &config) // if (!waitForIrqBusy(guard_mode, RegIrqFlags::MODE_READY, 0, 1000)) // return Error::IRQ_TIMEOUT; - int bitrate = std::max(std::min(config.bitrate, MAX_BITRATE), MIN_BITRATE); + int bitrate = config.bitrate; int freq_dev = std::max(std::min(config.freq_dev, MAX_FREQ_DEV), MIN_FREQ_DEV); int freq_rf = std::max(std::min(config.freq_rf, MAX_FREQ_RF), MIN_FREQ_RF); diff --git a/src/shared/radio/SX1278/SX1278Lora.cpp b/src/shared/radio/SX1278/SX1278Lora.cpp index 43e5ab18861fc1f42d0f863cea842e02bb060015..6062b50b231dbd2437207dbedd5a04c19fb04db4 100644 --- a/src/shared/radio/SX1278/SX1278Lora.cpp +++ b/src/shared/radio/SX1278/SX1278Lora.cpp @@ -159,6 +159,19 @@ bool SX1278Lora::checkVersion() SX1278Lora::Error SX1278Lora::configure(const Config &config) { + // Check that the configuration is actually valid + bool pa_boost = getFrontend().isOnPaBoost(); + int min_power = pa_boost ? 2 : 0; + int max_power = getFrontend().maxInPower(); + + assert(config.power >= min_power && config.power <= max_power && + "[sx1278] Configured power invalid for given frontend!"); + assert(((config.ocp >= 0 && config.ocp <= 120) || + (config.ocp >= 130 && config.ocp <= 240)) && + "[sx1278] Invalid ocp!"); + assert(config.freq_rf >= MIN_FREQ_RF && config.freq_rf <= MAX_FREQ_RF && + "[sx1278] Invalid freq_rf"); + // First make sure the device is in lora mode and in standby enterLoraMode(); @@ -177,10 +190,10 @@ SX1278Lora::Error SX1278Lora::configure(const Config &config) RegModemConfig2::Sf sf = static_cast<RegModemConfig2::Sf>(config.spreading_factor); - int freq_rf = config.freq_rf; - int ocp = config.ocp; - int power = std::min(config.power, getFrontend().maxInPower()); - bool pa_boost = getFrontend().isOnPaBoost(); + int freq_rf = std::max(std::min(config.freq_rf, MAX_FREQ_RF), MIN_FREQ_RF); + int ocp = config.ocp <= 120 ? std::max(std::min(config.ocp, 120), 0) + : std::max(std::min(config.ocp, 240), 130); + int power = std::max(std::min(config.power, max_power), min_power); bool low_data_rate_optimize = config.low_data_rate_optimize;