- Read-back compares the settings that decide what is on the air (region,
preset or bandwidth/SF, coding rate, slot or frequency, tx_enabled), not
just transparent_mode. A device that rejects a LoRa config restores its
old one whole, transparent_mode included, so that is now "Refused":
retried after 5 minutes or at once on this node's next config change.
Only a device that took the settings and still reads transparent_mode
false is old firmware.
- The same comparison decides whether a device is already set up, so
fields the device normalises no longer cause a push on every reconnect.
coding_rate, spread_factor and bandwidth are clamped the way the
device's AdminModule stores them.
- Firmware that reports a release older than 2.8.3 is refused before any
set_config reaches it.
- With no LoRa region set here, nothing is pushed (it would set the
device's region to UNSET and turn its TX off); setting a region pushes.
- Frames held for their own radio settings (RadioTxHooks::holdsRadio,
e.g. MeshBeacon on another preset) are dropped, since the device can't
switch per packet, and the hooks hear about every released frame.
- Reconnect attempts back off from 5 s to 60 s: opening a TCP link blocks
the main loop.
- hop_limit/hop_start are clamped as encodeRadioBuffer() does instead of
being refused by the device; slot_parity is no longer forwarded.
- Lora.Module transparent leaves spidev empty, so the SPI bus is untouched.
- Queued frames are released on destruction; the late-window clamp only
reschedules when the moved frame is the front.