This commit is contained in:
mikecarper
2026-08-23 16:01:01 +00:00
parent d5ba67a7f0
commit 5f6b4b8ab2
5 changed files with 35 additions and 26 deletions
+20 -12
View File
@@ -40,10 +40,9 @@
});
const OTA_LABELS = Object.freeze({
none: "No explicit OTA profile",
"ota-enabled": "OTA-enabled profile",
"lora-receiver": "LoRa OTA receiver",
"lora-source": "LoRa OTA source (Full Companion)",
none: "No LoRa OTA",
"lora-receiver": "LoRa OTA enabled / receiver",
"lora-source": "LoRa OTA source only (Full Companion)",
});
const MODE_LABELS = Object.freeze({
@@ -84,11 +83,8 @@
// Generated Full Companion artifact name. It uses the standard Heltec V4
// board definition and auto-detects the V4.2 and V4.3 FEM hardware.
"heltec_v4_2_v4_3": "heltec_v4",
// These target prefixes select a radio profile on otherwise identical
// hardware. Keep that distinction in the firmware variant facet instead.
"heltec_v4_3": "heltec_v4",
"heltec_v4_3_expansionkit_tft": "heltec_v4_expansionkit_tft",
"heltec_v4_3_tft": "heltec_v4_tft",
// These Station target prefixes select a firmware/radio profile on the
// same physical hardware.
"Station_G2_logging": "Station_G2",
"Station_G3_ESP32_logging": "Station_G3_ESP32",
});
@@ -100,6 +96,14 @@
"Station_G3_ESP32_logging",
]);
const HIDDEN_PROFILE_TARGETS = Object.freeze([
// SolarXiao repeaters already stage full-sensor LoRa OTA images in their
// matched external QSPI flash. Older releases contain redundant lean
// siblings; keep those files searchable without recommending them.
"solarxiao_30S_repeater_lora_ota_no_external_sensors",
"solarxiao_33S_repeater_lora_ota_no_external_sensors",
]);
let pickerInstanceCount = 0;
function isSafeGithubUrl(value) {
@@ -368,6 +372,9 @@
}
const knownLabels = {
"heltec_v4_3": "V4.3",
"heltec_v4_3_expansionkit_tft": "V4.3 + expansion kit + TFT",
"heltec_v4_3_tft": "V4.3 + TFT",
"heltec_v4_expansionkit": "Expansion kit",
"heltec_v4_expansionkit_tft": "Expansion kit + TFT",
"heltec_v4_r8": "R8",
@@ -427,7 +434,7 @@
const profiles = Array.from(grouped.values()).map(function (profile) {
profile.ota = profile.explicitOta ||
(profile.otaPackaged ? "ota-enabled" : "none");
(profile.otaPackaged ? "lora-receiver" : "none");
profile.installKinds = INSTALL_ORDER.filter(function (kind) {
return Boolean(canonicalAsset(profile.files, kind));
});
@@ -436,7 +443,8 @@
});
return profile;
}).filter(function (profile) {
return !HIDDEN_PROFILE_HARDWARE.includes(profile.sourceHardware);
return !HIDDEN_PROFILE_HARDWARE.includes(profile.sourceHardware) &&
!HIDDEN_PROFILE_TARGETS.includes(profile.target);
}).sort(function (a, b) {
return a.target.localeCompare(b.target, undefined, {
numeric: true,
@@ -559,7 +567,7 @@
function optionSort(field, a, b) {
const roleOrder = ["companion", "repeater", "room", "sensor", "terminal", "kiss", "other"];
const loggingOrder = ["none", "usb", "wifi"];
const otaOrder = ["none", "ota-enabled", "lora-receiver", "lora-source"];
const otaOrder = ["none", "lora-receiver", "lora-source"];
const featureOrder = ["standard", "full"];
const modeOrder = ["standard", "full", "ble", "usb", "wifi", "serial", "ethernet", "mqtt", "espnow", "rs232"];
const orders = {
+4 -8
View File
@@ -1488,16 +1488,12 @@ from the published firmware assets.</p>
<td>Normal standalone operation without the dedicated logging/MQTT profile</td>
</tr>
<tr>
<td>LoRa OTA receiver</td>
<td>Repeater profile that can stage an exact matching update received over LoRa</td>
<td>LoRa OTA enabled / receiver</td>
<td>Install-capable profile that can stage an exact matching update received over LoRa</td>
</tr>
<tr>
<td>LoRa OTA source</td>
<td>Full Companion serving a host-supplied update to another node</td>
</tr>
<tr>
<td>OTA-enabled profile</td>
<td>Build uses an OTA-capable application/partition profile, but is not necessarily an explicit LoRa receiver</td>
<td>LoRa OTA source only</td>
<td>Full Companion serving a host-supplied update to another node without self-installing it</td>
</tr>
</tbody>
</table>
+4 -2
View File
@@ -1716,8 +1716,10 @@ RAK13302 radio's BUSY/DIO1 lines. The RAK4631 OTA repeater retains GPS except
for its Serial1 RS232 bridge, which uses the same UART. Selected nRF52 boards with matched external
QSPI application and bootloader support can instead make the normal full-sensor
repeater install-capable; those targets do not need to reserve internal flash
for the downloaded container. Other normal repeaters can still serve as
intermediate relays but cannot necessarily install an update themselves. ESP32
for the downloaded container. SolarXiao 30S and 33S use this matched external-QSPI
path and therefore do not emit redundant no-external-sensors siblings. Other
normal repeaters can still serve as intermediate relays but cannot necessarily
install an update themselves. ESP32
<code>-ota-</code> siblings also retain the lightweight browser WiFi uploader (<code>start
ota</code>), the complete CLI, and a 254-entry neighbor table. RP2040 and STM32
repeaters do not currently have a safe self-apply path, but current repeater
+6 -3
View File
@@ -2079,9 +2079,12 @@ artifacts, including room, sensor, and repeater roles, must fit the legacy slot
limit and the target's actual app partition. The ESP32-C6 <code>no_external_sensors</code> OTA siblings are the narrow
exception: the Arduino 3.x WiFi runtime cannot fit that cross-family ceiling, so those images retain their
established target-specific 1920 KiB or larger A/B app layout and are checked against the actual app
partition. For every standalone ESP32 and nRF52 repeater, <code>build.sh</code> also exposes an explicit
<code>*_lora_ota_no_external_sensors</code> artifact: the ordinary repeater remains sensor-enabled, while that sibling
disables optional external environmental-sensor drivers for LoRa distribution. Integrated GPS and other
partition. For standalone ESP32 and nRF52 repeaters that need a lean staging
profile, <code>build.sh</code> also exposes an explicit <code>*_lora_ota_no_external_sensors</code>
artifact: the ordinary repeater remains sensor-enabled, while that sibling
disables optional external environmental-sensor drivers for LoRa distribution. SolarXiao 30S and 33S use
matched external QSPI staging, so their ordinary full-sensor repeater is already install-capable and no
redundant lean sibling is generated. Integrated GPS and other
board-native telemetry remain enabled where the target selects the GPS-preserving lean profile. The RAK3401
OTA repeater also retains RAK12501 GPS support; install that module in sensor slot A because slot D conflicts
with the RAK13302 radio's BUSY/DIO1 lines. RAK4631 OTA repeaters retain GPS except for the Serial1 RS232
File diff suppressed because one or more lines are too long