feat: per-board TX power range, TX_POWER_MAX sentinel (-128)

- Each board exports TX_POWER_RANGE constant (min, max dBm)
- RadioConfig::validate() uses the board's range, not hardcoded limits
- TX_POWER_MAX sentinel (-128 on the wire) means "use board's maximum"
  — resolved to the actual max before storing config
- GetConfig returns the resolved actual power, not the sentinel
- Default configs in examples use TX_POWER_MAX
- Protocol docs updated
This commit is contained in:
swaits committed 2026-03-29 20:42:58 -06:00
1 parent 30331d5204
commit 5f47fff2c3
1 file changed
+5 -2
+5 -2
View File
@@ -197,12 +197,15 @@ def connect(port: str | None = None, timeout: float = 2.0) -> serial.Serial:
return ser return ser
# Default radio config: 915 MHz, 125 kHz BW, SF7, CR 4/5 # Sentinel: set TX power to the board's maximum
TX_POWER_MAX = -128 # i8::MIN on the wire
# Default radio config: 915 MHz, 125 kHz BW, SF7, CR 4/5, max power
DEFAULT_CONFIG = { DEFAULT_CONFIG = {
"freq_hz": 915_000_000, "freq_hz": 915_000_000,
"bw": 7, # 125 kHz "bw": 7, # 125 kHz
"sf": 7, "sf": 7,
"cr": 5, # CR 4/5 "cr": 5, # CR 4/5
"sync_word": 0x1424, "sync_word": 0x1424,
"tx_power_dbm": 14, "tx_power_dbm": TX_POWER_MAX,
} }