mirror of
https://github.com/meshtastic/firmware.git
synced 2025-10-03 05:53:24 +00:00
Validate CR and SF lora config (#8146)
* Validate CR and SF lora config * No zero-bw * Update src/modules/AdminModule.cpp Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Fix braces --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
parent
8717c60f13
commit
033fc0c8f3
@ -707,20 +707,40 @@ void AdminModule::handleSetConfig(const meshtastic_Config &c)
|
|||||||
#endif
|
#endif
|
||||||
config.display = c.payload_variant.display;
|
config.display = c.payload_variant.display;
|
||||||
break;
|
break;
|
||||||
case meshtastic_Config_lora_tag:
|
|
||||||
|
case meshtastic_Config_lora_tag: {
|
||||||
|
// Wrap the entire case in a block to scope variables and avoid crossing initialization
|
||||||
|
auto oldLoraConfig = config.lora;
|
||||||
|
auto validatedLora = c.payload_variant.lora;
|
||||||
|
|
||||||
LOG_INFO("Set config: LoRa");
|
LOG_INFO("Set config: LoRa");
|
||||||
config.has_lora = true;
|
config.has_lora = true;
|
||||||
|
|
||||||
|
if (validatedLora.coding_rate < 4 || validatedLora.coding_rate > 8) {
|
||||||
|
LOG_WARN("Invalid coding_rate %d, setting to 5", validatedLora.coding_rate);
|
||||||
|
validatedLora.coding_rate = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (validatedLora.spread_factor < 7 || validatedLora.spread_factor > 12) {
|
||||||
|
LOG_WARN("Invalid spread_factor %d, setting to 11", validatedLora.spread_factor);
|
||||||
|
validatedLora.spread_factor = 11;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (validatedLora.bandwidth == 0) {
|
||||||
|
int originalBandwidth = validatedLora.bandwidth;
|
||||||
|
validatedLora.bandwidth = myRegion->wideLora ? 800 : 250;
|
||||||
|
LOG_WARN("Invalid bandwidth %d, setting to default", originalBandwidth);
|
||||||
|
}
|
||||||
|
|
||||||
// If no lora radio parameters change, don't need to reboot
|
// If no lora radio parameters change, don't need to reboot
|
||||||
if (config.lora.use_preset == c.payload_variant.lora.use_preset && config.lora.region == c.payload_variant.lora.region &&
|
if (oldLoraConfig.use_preset == validatedLora.use_preset && oldLoraConfig.region == validatedLora.region &&
|
||||||
config.lora.modem_preset == c.payload_variant.lora.modem_preset &&
|
oldLoraConfig.modem_preset == validatedLora.modem_preset && oldLoraConfig.bandwidth == validatedLora.bandwidth &&
|
||||||
config.lora.bandwidth == c.payload_variant.lora.bandwidth &&
|
oldLoraConfig.spread_factor == validatedLora.spread_factor &&
|
||||||
config.lora.spread_factor == c.payload_variant.lora.spread_factor &&
|
oldLoraConfig.coding_rate == validatedLora.coding_rate && oldLoraConfig.tx_power == validatedLora.tx_power &&
|
||||||
config.lora.coding_rate == c.payload_variant.lora.coding_rate &&
|
oldLoraConfig.frequency_offset == validatedLora.frequency_offset &&
|
||||||
config.lora.tx_power == c.payload_variant.lora.tx_power &&
|
oldLoraConfig.override_frequency == validatedLora.override_frequency &&
|
||||||
config.lora.frequency_offset == c.payload_variant.lora.frequency_offset &&
|
oldLoraConfig.channel_num == validatedLora.channel_num &&
|
||||||
config.lora.override_frequency == c.payload_variant.lora.override_frequency &&
|
oldLoraConfig.sx126x_rx_boosted_gain == validatedLora.sx126x_rx_boosted_gain) {
|
||||||
config.lora.channel_num == c.payload_variant.lora.channel_num &&
|
|
||||||
config.lora.sx126x_rx_boosted_gain == c.payload_variant.lora.sx126x_rx_boosted_gain) {
|
|
||||||
requiresReboot = false;
|
requiresReboot = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -739,7 +759,7 @@ void AdminModule::handleSetConfig(const meshtastic_Config &c)
|
|||||||
digitalWrite(RF95_FAN_EN, HIGH ^ 0);
|
digitalWrite(RF95_FAN_EN, HIGH ^ 0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
config.lora = c.payload_variant.lora;
|
config.lora = validatedLora;
|
||||||
// If we're setting region for the first time, init the region and regenerate the keys
|
// If we're setting region for the first time, init the region and regenerate the keys
|
||||||
if (isRegionUnset && config.lora.region > meshtastic_Config_LoRaConfig_RegionCode_UNSET) {
|
if (isRegionUnset && config.lora.region > meshtastic_Config_LoRaConfig_RegionCode_UNSET) {
|
||||||
if (!owner.is_licensed) {
|
if (!owner.is_licensed) {
|
||||||
@ -771,6 +791,7 @@ void AdminModule::handleSetConfig(const meshtastic_Config &c)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case meshtastic_Config_bluetooth_tag:
|
case meshtastic_Config_bluetooth_tag:
|
||||||
LOG_INFO("Set config: Bluetooth");
|
LOG_INFO("Set config: Bluetooth");
|
||||||
config.has_bluetooth = true;
|
config.has_bluetooth = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user