feat: restore Heltec V3, add firmware output, support all common boards

Reverts the removal of heltec_v3 — it's a major board. Xtensa builds
use the esp toolchain (+esp via espup); check-all gracefully skips
boards whose toolchain isn't installed.

Build artifacts now land in firmware/ with readable names like
lora-dongle-rak_4631-release.elf instead of being buried in target/.

DESIGN.md updated with "support all common boards" principle (#10)
and corrected toolchain policy (#11).
This commit is contained in:
swaits committed 2026-03-29 20:42:54 -06:00
1 parent 0e9315280b
commit 7064110293
6 files changed
+854 -22

No files matched your search

+10 -5
View File
@@ -47,10 +47,14 @@ radio — it just gives you clean access to it.
9. **Easy board support.** Adding a new board means dropping a `.rs` file and adding
a Cargo feature. Nothing else changes.
10. **Standard toolchain only.** No custom Rust forks, no `espup`, no special SDKs.
If a board can't build with stock `rustup`, it doesn't ship. This rules out
Xtensa-based ESP32 chips (S2, S3) until upstream Rust fully supports them.
RISC-V ESP32 variants (C3, C6, H2) are fine.
10. **Support all common LoRa boards.** This project supports every common LoRa
board, and even some uncommon ones. The architecture is designed to accommodate
them cleanly. If the code isn't structured for a new board, fix the code.
11. **Standard toolchain.** No custom Rust forks or special SDKs. Use stock `rustup`
channels (stable, nightly). Xtensa targets use nightly + `-Zbuild-std`; Cortex-M
and RISC-V targets use stable. Boards that need the `esp` toolchain (via `espup`)
are supported but gracefully skipped when the toolchain isn't installed.
## Architecture
@@ -96,4 +100,5 @@ keep, but never prematurely.
| Boot behavior | Idle until host commands | Host-driven principle |
| Persistence | None | Always start fresh, true dumb pipe |
| Board codegen | Jinja2 via build.rs | Auto-discovers boards from filesystem |
| Rust toolchain | Standard `rustup` only | No forks, no espup, no special SDKs |
| Rust toolchain | Stock `rustup` (stable/nightly) | No forks; `espup` for Xtensa boards only |
| Firmware output | `firmware/lora-dongle-{board}-{profile}.elf` | Readable names, not buried in `target/` |