Complete ESP32 partition expander and adaptive LoRa OTA pacing

This commit is contained in:
mikecarper
2026-09-24 17:13:22 -07:00
parent e370db7f28
commit a74a09da56
33 changed files with 986 additions and 66 deletions
+18 -2
View File
@@ -37,6 +37,7 @@
repeater: "Repeater",
room: "Room Server",
sensor: "Sensor / telemetry",
"partition-expander": "Partition Expander",
terminal: "Terminal Chat",
kiss: "KISS modem",
other: "Other",
@@ -264,6 +265,10 @@
role: "sensor",
pattern: /_sensor(?=$|[_-])/i,
},
{
role: "partition-expander",
pattern: /_partition_expander(?=$|[_-])/i,
},
{
role: "terminal",
pattern: /_terminal_chat(?=$|[_-])/i,
@@ -365,7 +370,8 @@
(parts.role === "companion" && mode === "full")
? "full"
: "standard";
const explicitOta = lowerTarget.includes("lora_ota")
const explicitOta = parts.role === "partition-expander" ||
lowerTarget.includes("lora_ota")
? "lora-receiver"
: parts.role === "companion" && mode === "full"
? "lora-source"
@@ -979,7 +985,8 @@
}
function optionSort(field, a, b) {
const roleOrder = ["companion", "repeater", "room", "sensor", "terminal", "kiss", "other"];
const roleOrder = ["companion", "repeater", "room", "sensor",
"partition-expander", "terminal", "kiss", "other"];
const loggingOrder = ["none", "usb", "wifi", "both"];
const otaOrder = ["none", "lora-receiver", "lora-source"];
const featureOrder = ["standard", "full"];
@@ -1025,6 +1032,15 @@
"Verify that the hardware name and every displayed variant match the physical board.",
"Back up configuration, keys, and radio settings before changing roles or profiles.",
];
if (profile.role === "partition-expander") {
return common.concat(
kind === "zip"
? ["This ZIP is a staged ESP32 partition-migration package, not an nRF52 Serial DFU package. Follow its included README for the existing Wi-Fi or LoRa update route."]
: ["Install this temporary bridge only through the existing OTA route documented for this exact board and source layout; do not flash it as permanent node firmware."],
["Keep power stable while the partition table changes. Confirm that private identity restoration succeeded before transferring the exact Full application over LoRa or Wi-Fi.",
"The Partition Expander is a temporary update receiver, not a repeater, client, or sensor firmware."]
);
}
const memory = profile.controls;
const selectedAsset = canonicalAsset(profile.files, kind);
if (memory && memory.memoryNote && memory.memorySource &&
+4 -2
View File
@@ -196,8 +196,10 @@ set ota.speed <0.05..3>
`1` preserves the current OTA timing. Values below `1` slow OTA traffic;
values above `1` shorten adjustable delays. For example, `0.5` doubles those
delays and `3` divides them by three. Decimal values such as `.05` work.
`ota config speed <factor>` is an equivalent setter, and `ota config` shows
the value. The setting is saved and can be changed during a transfer.
`ota config speed <factor>` is an equivalent setter. `get ota.speed` and
`ota config` show both the saved value and the effective `packet` pacing
factor. Automatic loss response may make packet spacing slower without
changing the saved setting. The setting can be changed during a transfer.
Apply it on the source, destination, and relays. It controls all LoRa OTA
packet types on both profiles, relay timing, discovery, and OTA adverts.
+2 -2
View File
@@ -472,10 +472,10 @@ required `ver` command instead of entering an operator continuation loop.
The default TempRadio tuple is:
```text
909.950,250,5,5,120
909.5,500,5,5,120
```
The test default is 250 kHz bandwidth, SF5, and CR5. The frequency is only a
The lab test default is 909.5 MHz, 500 kHz bandwidth, SF5, and CR5. The frequency is only a
North American example: choose a legal frequency supported by every
participating radio and appropriate to your location. Older radios that do not
support SF5 require a complete replacement tuple passed with `--temp-radio`.
+7 -2
View File
@@ -430,8 +430,13 @@ already received; queue congestion alone does not trigger legacy fallback.
Retry timing includes the primary channel when an RX-only temporary radio2
uses crossover to send requests there.
`ota config speed 0.5` is an equivalent setter. `ota config speed` and
`ota speed` read the current factor; the `ota config` summary also includes it.
`ota config speed 0.5` is an equivalent setter. `get ota.speed`,
`ota config speed`, and `ota speed` show both the saved `ota.speed` setting and
the effective `packet` pace. The latter is the slower of the saved speed and
the sender's automatic loss-responsive packet-spacing factor; it does not
replace the saved setting or change non-packet OTA timers. The `ota config`
summary also shows both values. If no OTA workspace is active, the automatic
factor starts at 1, so `packet` reflects the saved setting up to 1x.
The setting is available on OTA-enabled repeaters, rooms, sensors, Companions,
and seeder-only builds. Its separate `/ota_speed` settings file preserves the
existing preference layouts and does not need an active OTA workspace.