normalizeCodingRateOverride

fun Config.LoRaConfig.normalizeCodingRateOverride(): Config.LoRaConfig(source)

With use_preset on, keeps coding_rate only while it raises the preset's own coding rate, and stores 0 ("use the preset's") otherwise, so a value firmware ignores never sits in the config looking like it applies. A manual config, or a preset with no ChannelOption, comes back unchanged.