You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
-2Lines changed: 0 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -38,8 +38,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
38
38
-`rustyfarian-esp-hal-wifi`: `hal_c3_connect_async_led` example — async Wi-Fi connect with spawned `led_task` that blinks the onboard GPIO8 LED during connection, holds steady once IP acquired; uses `AtomicBool` for task coordination
39
39
-`rustyfarian-esp-hal-wifi`: `hal_c6_connect_async_led` example — async Wi-Fi connect with spawned `led_task` that pulses the onboard WS2812 RGB LED (GPIO8) blue via `PulseEffect` during connection, holds dim green once connected
40
40
- Build scripts: `build-example.sh` and `flash.sh` auto-detect `rustyfarian-esp-hal-ws2812` feature for `hal_c6_*_led*` examples
41
-
- Justfile: `check-wifi-hal-embassy` recipe that verifies the `embassy` feature compiles for ESP32-C6 (`riscv32imac-unknown-none-elf`) and ESP32-C3 (`riscv32imc-unknown-none-elf`)
42
-
-`espnow-pure`: `PeerTracker` — heartbeat-based peer liveness tracker with online/offline transition detection, extracted from rustbox-rgb-puzzle brain firmware
43
41
-`rustyfarian-esp-hal-wifi`: `EspHalWifiManager` with real `WifiDriver` implementation using `esp-radio 0.17.0` for bare-metal ESP32-C3/C6 (ADR 006 Phase 5); `hal_c3_connect` and `hal_c6_connect` examples
44
42
-`rustyfarian-network-pure`: `status_colors` module with shared LED colour palette (`BOOT`, `WIFI_CONNECTING`, `MQTT_CONNECTING`, `CONNECTED`, `ERROR`, `OFFLINE`)
45
43
-`rustyfarian-esp-idf-mqtt`: `MqttBuilder::build_and_wait()` with `StatusLed` support for visual boot feedback (cyan pulse while connecting, green on success, red on timeout)
Copy file name to clipboardExpand all lines: docs/ROADMAP.md
+5-8Lines changed: 5 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,11 +1,12 @@
1
1
# Roadmap
2
2
3
-
*Last updated: April 2026*
3
+
*Last updated: May 2026*
4
4
5
5
The bare-metal stack is now aligned on the April 2026 esp-hal wave (`esp-hal 1.1.0` / `esp-radio 0.18.0` / `esp-rtos 0.3.0` / embassy 0.10), hardware-validated on ESP32-C3 and ESP32-C6.
6
6
The bare-metal Wi-Fi surface is now async-only — `esp-radio 0.18` removed direct `smoltcp` integration and made the controller async-only, so `WiFiManager::init_async` + `AsyncWifiHandle` is the single public path.
7
+
The OTA MVP three-crate triad (`ota-pure`, `rustyfarian-esp-idf-ota`, `rustyfarian-esp-hal-ota`) has shipped per [ADR 011](adr/011-ota-crate-hosting-and-transport.md) and [`docs/features/ota-mvp-v1.md`](features/ota-mvp-v1.md); all public APIs are explicitly marked experimental.
7
8
TTN v3 LoRa validation remains blocked on hardware.
8
-
Next milestone: release v0.2.0 with the accumulated post-0.1.0 features (including this upgrade), then deliver the OTA MVP three-crate triad — design locked by [ADR 011](adr/011-ota-crate-hosting-and-transport.md) and [`docs/features/ota-mvp-v1.md`](features/ota-mvp-v1.md), unblocked by the April 2026 stack landing.
9
+
Next milestone: release v0.2.0 bundling the accumulated post-0.1.0 features (April 2026 stack upgrade, async Wi-Fi, OTA MVP, command framework, power-save, ESP-NOW channel scanning).
9
10
10
11
```mermaid
11
12
%%{init: {
@@ -25,12 +26,7 @@ Next milestone: release v0.2.0 with the accumulated post-0.1.0 features (includi
25
26
timeline
26
27
title rustyfarian-network Roadmap
27
28
28
-
Ready : Wi-Fi Radio Power Config v1 — TX power levels, power-save enum, auto-burst during discovery (feature-doc)
29
-
30
-
Near term : Release v0.2.0 — EspHalWifiManager, async Wi-Fi on the April 2026 esp-hal wave, status_colors, non-blocking publish, power save, ESP-NOW channel scanning, command framework
: OTA MVP Stage 2 — rustyfarian-esp-idf-ota (OtaSession::fetch_and_apply / mark_valid / rollback) on ESP32-C3 via EspOta + EspHttpConnection
33
-
: OTA MVP Stage 3 — rustyfarian-esp-hal-ota async over embassy-net + esp_bootloader_esp_idf::OtaUpdater with strict internal HTTP/1.1 GET (ADR 011)
29
+
Near term : Release v0.2.0 — EspHalWifiManager, async Wi-Fi on the April 2026 esp-hal wave, OTA MVP triad, status_colors, non-blocking publish, power save, ESP-NOW channel scanning, command framework
34
30
35
31
Mid term : Phase 5 — TTN v3 EU868 OTAA validation (blocked on hardware)
- WiFiManager LED integration for esp-hal — `ActiveLowLed<P>` adapter, `hal_c3_connect_async_led` and `hal_c6_connect_async_led` examples (StatusLed support matching ESP-IDF; the synchronous `init_with_led` was later removed when the stack moved to esp-radio 0.18 — LED feedback now wires via spawned tasks alongside `init_async`)
67
63
- esp-hal Stack Upgrade — April 2026 wave: workspace exact-pinned to `esp-hal 1.1.0`, `esp-rtos 0.3.0`, `esp-radio 0.18.0`, `esp-bootloader-esp-idf 0.5.0`, `esp-alloc 0.10.0`, `esp-println 0.17.0`, `esp-backtrace 0.19.0`, `embassy-executor 0.10.0`, `embassy-net 0.8.0`, `embassy-time 0.5.1`, `embassy-sync 0.8.0`, `smoltcp 0.12.0`. `rustyfarian-esp-hal-wifi` collapsed to async-only (`WiFiManager::init_async` + `AsyncWifiHandle`) — sync surface and direct `smoltcp` integration removed (BREAKING for the bare-metal Wi-Fi consumers; `embassy` feature is now effectively required). Hardware-validated on ESP32-C3-DevKitM-1 and ESP32-C6-DevKitC-1; LoRa example builds clean for ESP32-S3 (Phase 5 hardware run separate). Tooling: `scripts/detect-port.sh` filters espflash's auto-detect to USB serial devices on macOS. See `docs/features/esp-hal-stack-upgrade-april-2026-v1.md`.
64
+
- OTA MVP — three-crate dual-stack firmware update: `ota-pure` (no_std, host-tested), `rustyfarian-esp-idf-ota` (blocking, ESP-IDF), `rustyfarian-esp-hal-ota` (async, bare-metal via `embassy-net` + `esp_bootloader_esp_idf::OtaUpdater`). Streaming SHA-256 verify, partition swap, rollback; strict internal HTTP/1.1 GET parser. All public APIs explicitly experimental (locked by [ADR 011](adr/011-ota-crate-hosting-and-transport.md) and [`docs/features/ota-mvp-v1.md`](features/ota-mvp-v1.md)).
Copy file name to clipboardExpand all lines: docs/features/archive/esp-hal-stack-upgrade-april-2026-v1.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -115,8 +115,8 @@ Explicitly out of scope (must not be touched):
115
115
-[x]**Does `esp-alloc 0.10` rename or restructure `heap_allocator!`?** — Resolved 2026-04-29: no — both the plain `heap_allocator!(size: N)` and the `#[esp_hal::ram(reclaimed)] heap_allocator!(size: N)` forms keep working unchanged in the C3 and C6 examples.
116
116
-[x]**Does `esp-bootloader-esp-idf 0.5` still produce a descriptor accepted by the IDF v5.3.3 bootloader?** — Deferred: build step passed, but full validation requires hardware flashing, which is not part of this migration task. The espflash workaround in project-lore (`--bootloader <path>` + `--ignore-app-descriptor`) remains in place.
117
117
-[x]**Should the workspace add `embassy-sync = "=0.8.0"` explicitly to force unification?** — Resolved 2026-04-29: yes — added to workspace `Cargo.toml` at `=0.8.0` (matches what `esp-rtos 0.3` pulls transitively and what `rustyfarian-ws2812` pins).
118
-
-[]**Is the `xtensa-esp32s3-none-elf` toolchain installed and ready on the development machine?** — Confirmed 2026-04-29: yes; `just build-example hal_esp32s3_join` builds clean in `release` profile (final binary linked).
119
-
-[]**embassy-executor 0.10 spawn shape** — surfaced 2026-04-29 (was not on the original list): `Spawner::must_spawn` was removed; `#[embassy_executor::task]` macros now return `Result<SpawnToken, SpawnError>`. All three async examples updated from `spawner.must_spawn(task(arg))` to `spawner.spawn(task(arg).unwrap())`.
118
+
-[x]**Is the `xtensa-esp32s3-none-elf` toolchain installed and ready on the development machine?** — Confirmed 2026-04-29: yes; `just build-example hal_esp32s3_join` builds clean in `release` profile (final binary linked).
119
+
-[x]**embassy-executor 0.10 spawn shape** — surfaced 2026-04-29 (was not on the original list): `Spawner::must_spawn` was removed; `#[embassy_executor::task]` macros now return `Result<SpawnToken, SpawnError>`. All three async examples updated from `spawner.must_spawn(task(arg))` to `spawner.spawn(task(arg).unwrap())`.
@@ -520,3 +520,5 @@ The four ADR 011 decisions fully constrain the design; consumer feature doc and
520
520
## Session Log
521
521
522
522
**2026-05-01** — Feature design doc created from `review-queue/ota-mvp-three-crates.md`, locked by ADR 011, beekeeper lift inventory completed. Four crates' public surface, Cargo.toml patterns, lift sources, HTTP strictness constraint, stage gates, and workspace integration all specified. Ready for Stage 1 implementation.
523
+
524
+
**2026-05-05** — All three stages delivered on the `ota-mvp` branch (commits `b5a2445`, `9a55c0c`, plus PR-review follow-ups). Public surface matches the design above with two additions surfaced during implementation: `EspHalOtaManager::new(config, FLASH<'d>)` takes the FLASH peripheral (`esp-storage 0.9` consumes it at construction) instead of the zero-arg shape originally sketched, and `OtaError::DownloadFailed { status: 0 }` is reserved as a sentinel for protocol-shape rejections from the bare-metal HTTP client. PR-review follow-ups also tightened error-mapping (read-error → `ServerUnreachable`, early-EOF → `DownloadFailed { status: 0 }`, rollback-failure → `FlashWriteFailed`), added an internal `log::warn!` at the `HttpError` → `OtaError` boundary, and tagged all three crates as **experimental API** in CHANGELOG and README. `just verify`, `just test-ota` (37/37), `just test-ota-hal` (33/33) all green. Archived.
0 commit comments