This commit is contained in:
mikecarper
2026-08-23 08:21:28 +00:00
parent 36b80bb8cd
commit 6d9139f85f
4 changed files with 926 additions and 347 deletions
File diff suppressed because it is too large Load Diff
+20
View File
@@ -25,6 +25,11 @@
margin-bottom: 0;
}
.firmware-picker-intro [data-role="release-set"] {
margin-top: 0.25rem;
overflow-wrap: anywhere;
}
.firmware-picker-form {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
@@ -75,6 +80,21 @@
margin-top: 0.2rem;
}
.firmware-picker-card {
padding: 0.75rem 0 0.25rem;
}
.firmware-picker-card + .firmware-picker-card {
border-top: 1px solid var(--picker-border);
margin-top: 1rem;
padding-top: 1.25rem;
}
.firmware-picker-card h3 {
margin: 0 0 0.7rem;
overflow-wrap: anywhere;
}
.firmware-picker-facts {
display: grid;
grid-template-columns: minmax(7rem, auto) 1fr;
+205 -108
View File
@@ -589,10 +589,10 @@
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#what-full-means-for-a-usb-logger" class="md-nav__link">
<a href="#what-the-choices-mean" class="md-nav__link">
<span class="md-ellipsis">
What FULL means for a USB logger
What the choices mean
</span>
</a>
@@ -600,10 +600,10 @@
</li>
<li class="md-nav__item">
<a href="#can-a-heltec-v4-partition-be-expanded-by-ota" class="md-nav__link">
<a href="#full-versus-standard" class="md-nav__link">
<span class="md-ellipsis">
Can a Heltec V4 partition be expanded by OTA?
FULL versus standard
</span>
</a>
@@ -611,10 +611,32 @@
</li>
<li class="md-nav__item">
<a href="#merged-versus-non-merged-files" class="md-nav__link">
<a href="#installation-methods" class="md-nav__link">
<span class="md-ellipsis">
Merged versus non-merged files
Installation methods
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lora-ota-and-otafix" class="md-nav__link">
<span class="md-ellipsis">
LoRa OTA and OTAFIX
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#hardware-and-variant-names" class="md-nav__link">
<span class="md-ellipsis">
Hardware and variant names
</span>
</a>
@@ -1223,10 +1245,10 @@
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#what-full-means-for-a-usb-logger" class="md-nav__link">
<a href="#what-the-choices-mean" class="md-nav__link">
<span class="md-ellipsis">
What FULL means for a USB logger
What the choices mean
</span>
</a>
@@ -1234,10 +1256,10 @@
</li>
<li class="md-nav__item">
<a href="#can-a-heltec-v4-partition-be-expanded-by-ota" class="md-nav__link">
<a href="#full-versus-standard" class="md-nav__link">
<span class="md-ellipsis">
Can a Heltec V4 partition be expanded by OTA?
FULL versus standard
</span>
</a>
@@ -1245,10 +1267,32 @@
</li>
<li class="md-nav__item">
<a href="#merged-versus-non-merged-files" class="md-nav__link">
<a href="#installation-methods" class="md-nav__link">
<span class="md-ellipsis">
Merged versus non-merged files
Installation methods
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lora-ota-and-otafix" class="md-nav__link">
<span class="md-ellipsis">
LoRa OTA and OTAFIX
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#hardware-and-variant-names" class="md-nav__link">
<span class="md-ellipsis">
Hardware and variant names
</span>
</a>
@@ -1281,150 +1325,181 @@
<h1 id="firmware-picker">Firmware picker</h1>
<p>Choose what the board will do, then let the picker reduce the release assets
to one recommended firmware. The first guided board is Station G2 because its
standard, logging, FULL, LoRa-OTA, MQTT, bridge, room-server, and Companion
profiles are easy to confuse.</p>
<p>The picker reads public release metadata from GitHub. It does not upload any
device information.</p>
<p>Choose the exact hardware first. The remaining menus then show only firmware
roles and features that were actually built for that hardware in the current
release set.</p>
<p>The picker reads public release metadata from GitHub. It does not upload device
information. Hardware names, target names, and download links come directly
from the published firmware assets.</p>
<div class="firmware-picker" data-firmware-picker data-release-repo="mikecarper/MeshCore">
<div class="firmware-picker-intro" role="note">
<strong>Station G2 shortcut</strong>
<strong>Current release set</strong>
<p data-role="release-set">Loading release information...</p>
<p>
If the G2 normally stays connected to a computer and you want USB packet
logs, choose <strong>USB logging repeater</strong>. The recommended image
is the expanded <strong>FULL logging</strong> profile. The smaller legacy
logging image is mainly a compatibility fallback, not the normal choice
for a computer-powered logger.
For a new installation, choose the exact board and role, prefer a
<strong>FULL / complete profile</strong> when it is available, and select
<strong>USB first install / recovery</strong>. Narrower profiles remain
available when their reduced transport or feature set is intentional.
</p>
</div>
<form class="firmware-picker-form" data-role="form">
<label>
Release channel
<select data-field="channel">
<option value="development" selected>Current development and pre-releases</option>
<option value="stable">Stable releases</option>
1. Hardware
<select data-field="hardware" disabled>
<option value="">Loading hardware...</option>
</select>
</label>
<label>
What should the Station G2 do?
<select data-field="purpose">
<option value="usb-logging">USB logging repeater - recommended when connected to a computer</option>
<option value="field">Simple standalone repeater</option>
<option value="field-ota">Standalone repeater with LoRa/WiFi OTA, no external sensors</option>
<option value="mqtt">Full MQTT observer/repeater</option>
<option value="espnow">ESP-NOW bridge repeater</option>
<option value="room">Room server</option>
<option value="room-mqtt">Full MQTT room observer</option>
<option value="companion-usb">USB Companion</option>
<option value="companion-ble">Bluetooth Companion</option>
<option value="companion-wifi">WiFi Companion</option>
<option value="companion-full">Full Companion and LoRa-OTA source</option>
2. Firmware role
<select data-field="role" disabled>
<option value="">Choose hardware first</option>
</select>
</label>
<label>
How will this firmware be installed?
<select data-field="install">
<option value="first">First install, recovery, or changing partition/profile - USB cable</option>
<option value="wifi">Same profile and partition - browser/WiFi OTA</option>
<option value="lora">Same profile and partition - LoRa OTA</option>
3. Logging / MQTT
<select data-field="logging" disabled>
<option value="">Choose role first</option>
</select>
</label>
<label>
4. OTA capability
<select data-field="ota" disabled>
<option value="">Choose earlier options first</option>
</select>
</label>
<label>
5. Connection / bridge mode
<select data-field="mode" disabled>
<option value="">Choose earlier options first</option>
</select>
</label>
<label>
6. Feature profile
<select data-field="feature" disabled>
<option value="">Choose earlier options first</option>
</select>
</label>
<label>
7. Hardware/profile variant
<select data-field="variant" disabled>
<option value="">Choose earlier options first</option>
</select>
</label>
<label>
8. Installation method
<select data-field="install" disabled>
<option value="">Choose firmware options first</option>
</select>
</label>
</form>
<div class="firmware-picker-status" data-role="status" aria-live="polite">
Loading release catalog...
Loading the current firmware catalog...
</div>
<section class="firmware-picker-result" data-role="result" aria-live="polite" hidden>
<p class="firmware-picker-eyebrow">Recommended firmware</p>
<h2 data-role="result-title"></h2>
<p data-role="result-summary"></p>
<dl class="firmware-picker-facts" data-role="result-facts"></dl>
<div class="firmware-picker-actions">
<a class="firmware-picker-primary" data-role="download" href="#">Download recommended file</a>
<a data-role="release" href="#">Open its release</a>
</div>
<div class="firmware-picker-steps" data-role="steps"></div>
<p class="firmware-picker-eyebrow">Exact firmware match</p>
<h2>Recommended download</h2>
<div data-role="result-list"></div>
</section>
<section class="firmware-picker-missing" data-role="missing" aria-live="polite" hidden>
<h2>The matching asset is not in this release channel yet</h2>
<h2>No exact firmware matched</h2>
<p data-role="missing-text"></p>
<a href="https://github.com/mikecarper/MeshCore/releases">Browse all firmware releases</a>
</section>
<details class="firmware-asset-browser">
<summary>Advanced: search all recent release filenames</summary>
<summary>Advanced: search current release filenames</summary>
<p>
This search is for uncommon hardware variants and expert recovery. A
filename match is not a board-identity check.
Use this for uncommon board suffixes or expert recovery. A filename match
is not a board-identity check.
</p>
<label>
Filename contains
<input data-field="asset-search" placeholder="Station_G2, heltec_v4, repeater, ...">
<input data-field="asset-search" placeholder="Station_G2, heltec_v4, RAK_4631, ...">
</label>
<div data-role="asset-results"></div>
</details>
</div>
<h2 id="what-full-means-for-a-usb-logger">What FULL means for a USB logger</h2>
<p>A Station G2 that is powered from and monitored by a computer normally should
use the FULL logging profile:</p>
<ol>
<li>Save its name, radio settings, keys, and other configuration.</li>
<li>Download the exact Station G2 <code>full-logging-ota</code> merged image recommended
above.</li>
<li>Flash that <code>-merged.bin</code> over USB once. It installs the expanded partition
table as well as the application.</li>
<li>Reconnect the serial terminal at 115200 baud and restore any settings that
were not retained.</li>
<li>Leave the data-capable USB connection attached to collect logs. Use
<code>set usb.logging off</code> temporarily if the runtime output needs to be quiet.</li>
</ol>
<p>Choose the standalone or lean OTA repeater instead when the board is normally
battery/solar powered, has no computer collecting USB output, or must retain a
known legacy partition layout.</p>
<h2 id="can-a-heltec-v4-partition-be-expanded-by-ota">Can a Heltec V4 partition be expanded by OTA?</h2>
<p>No. WiFi OTA and LoRa OTA write an application into the inactive application
partition. They do not replace the partition table at flash offset <code>0x8000</code>.
Allowing a running application to move its own active/inactive partitions
would risk overwriting the running image, staged image, NVS, or filesystem.</p>
<p>The current Heltec V4 definition already uses its 16 MiB flash efficiently:</p>
<h2 id="what-the-choices-mean">What the choices mean</h2>
<table>
<thead>
<tr>
<th>Region</th>
<th style="text-align: right;">Size</th>
<th>Choice</th>
<th>Use</th>
</tr>
</thead>
<tbody>
<tr>
<td>Application slot A</td>
<td style="text-align: right;"><code>0x640000</code> (6.25 MiB)</td>
<td>Companion</td>
<td>A phone, computer, or host application controls the radio</td>
</tr>
<tr>
<td>Application slot B</td>
<td style="text-align: right;"><code>0x640000</code> (6.25 MiB)</td>
<td>Repeater</td>
<td>Standalone mesh relay</td>
</tr>
<tr>
<td>SPIFFS</td>
<td style="text-align: right;"><code>0x360000</code> (3.375 MiB)</td>
<td>Room Server</td>
<td>Hosts room conversations and history</td>
</tr>
<tr>
<td>Sensor / telemetry</td>
<td>Publishes supported sensor data</td>
</tr>
<tr>
<td>Terminal Chat</td>
<td>Standalone serial-terminal interface</td>
</tr>
<tr>
<td>USB logging / USB-connected MQTT</td>
<td>Node remains attached to a computer over a data-capable USB cable</td>
</tr>
<tr>
<td>Wi-Fi MQTT observer</td>
<td>Firmware connects directly to MQTT over Wi-Fi; this is not USB logging</td>
</tr>
<tr>
<td>No logging</td>
<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>
</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>
</tr>
</tbody>
</table>
<p>That is much larger than current MeshCore V4 applications. A different layout
is possible only as a custom build, and it requires a one-time exact-board
merged-image flash over USB. Expanding the app slots further would shrink or
remove SPIFFS, or remove the second slot and therefore remove safe OTA.</p>
<p>After installing a new partition table over USB, later WiFi or LoRa updates
must use a non-merged application built for the same board, role, and partition
signature. Never use an app-only FULL image to try to migrate a device that is
still running another partition layout.</p>
<h2 id="merged-versus-non-merged-files">Merged versus non-merged files</h2>
<p>Connection and bridge choices depend on the selected role. Companion firmware
may offer Full, Bluetooth, USB, Wi-Fi, serial, or Ethernet transports.
Repeaters may offer standard, ESP-NOW bridge, RS-232 bridge, Ethernet, or MQTT
observer modes.</p>
<h2 id="full-versus-standard">FULL versus standard</h2>
<p>For a new installation, use the FULL / complete profile when it exists and the
board has enough flash. FULL profiles keep the complete supported feature set
and CLI. Standard profiles remain useful for boards without a FULL build, for
an intentionally narrower transport, or when retaining an existing compatible
partition layout.</p>
<p>Changing between standard and FULL ESP32 layouts requires the exact-board
merged image over USB. A running application cannot safely move its own active
and inactive partitions.</p>
<h2 id="installation-methods">Installation methods</h2>
<table>
<thead>
<tr>
@@ -1435,20 +1510,42 @@ still running another partition layout.</p>
<tbody>
<tr>
<td><code>-merged.bin</code></td>
<td>First install, recovery, role/profile migration, or partition-table change over USB</td>
<td>ESP32 first install, recovery, role migration, or partition-profile change over USB</td>
</tr>
<tr>
<td><code>.bin</code> without <code>-merged</code></td>
<td>Browser/WiFi application update when the installed partition layout already matches</td>
<td>Non-merged <code>.bin</code></td>
<td>Same-board, same-role, same-partition application update</td>
</tr>
<tr>
<td><code>.mota</code></td>
<td>LoRa OTA package for the exact target identity and installed partition layout</td>
<td><code>.zip</code></td>
<td>Native nRF52 Serial DFU package; it is not an extra archive</td>
</tr>
<tr>
<td><code>.uf2</code></td>
<td>UF2 bootloader drag-and-drop installation</td>
</tr>
<tr>
<td><code>.hex</code></td>
<td>Full wired programmer or recovery flash</td>
</tr>
</tbody>
</table>
<p>When uncertain, back up the configuration and use the exact-board merged image
over USB. Do not send a merged image through browser OTA or LoRa OTA.</p>
<p>Never send a merged ESP32 image through browser OTA or LoRa OTA. Back up the
node configuration and verify every filename suffix before flashing.</p>
<h2 id="lora-ota-and-otafix">LoRa OTA and OTAFIX</h2>
<p>An OTA receiver build installs the receiving/staging firmware. A later LoRa
update still needs an exact target identity, compatible partition signature,
matching radio settings, and the correct update package.</p>
<p>nRF52 LoRa OTA requires an OTAFIX bootloader built for the exact board. There
is no universal bootloader file. Use the
<a href="https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/releases/latest">latest stable OTAFIX release</a>
and select the hardware-matched HEX, Serial DFU ZIP, or bootloader-update UF2.</p>
<h2 id="hardware-and-variant-names">Hardware and variant names</h2>
<p>The hardware menu preserves meaningful board suffixes such as display type,
radio chip, PA/FEM layout, pin map, and external-flash variant. Later menus
expose build variants such as FEM on/off, power saving, serial port, or
no-external-sensors when those choices exist. Do not substitute a similarly
named target.</p>
File diff suppressed because one or more lines are too long