From 948589ae5d18c4d058797c37a1c65a24cc581588 Mon Sep 17 00:00:00 2001 From: Stephen Waits Date: Thu, 30 Apr 2026 07:09:53 -0600 Subject: [PATCH] chore: release 1.5.0 --- CHANGELOG.md | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.lock | 2 +- Cargo.toml | 2 +- 3 files changed, 78 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 10f57bb..d5fdc7e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,82 @@ and this project adheres to [Semantic Versioning](https://semver.org/). ## [Unreleased] +## [1.5.0] - 2026-04-30 + +### Added + +- **Heltec Mesh Node T114 board support** (nRF52840 + SX1262 + 1.14" + 240×135 ST7789 color TFT). The first color display board in the + project, and the third nRF52840 + SX1262 board alongside the + RAK4631 and Wio Tracker L1. + - `VEXT_ENABLE` (P0.21) driven HIGH at boot to power the SX1262 + + TFT rail. Without this, lora-phy init succeeds at the SPI level + but TX_DONE never fires. + - `VTFT_CTRL` on P0.03 (active-LOW); PWM backlight on P0.15 + (active-LOW, inverted) for smooth dim/bright transitions. + - TFT SPI2 (SCK P1.08 / MOSI P1.09) at 8 MHz over EasyDMA, async + `ExclusiveDevice` from `embedded-hal-bus`. + - Linker uses the shared `ld/nrf52840-memory.x` so the S140 + SoftDevice region (0x01000–0x26000) is preserved per project + policy. + +- **`BoardDisplay` trait** (`src/display.rs`) bundles `render_*`, + `present()`, `set_bright()`, and `set_dim()`. Replaces the previous + `DrawTarget` + `DisplayBrightness` combo as + the `LoRaBoard::DisplayDriver` bound, so each board renders in its + native pixel format and resolution without aliasing or + color-quantization round-trips. Existing mono OLED drivers + (`Sh1106`, `Ssd1306Async`) get adapter impls that delegate to the + existing `display::render` module — no behavior change for any + previously supported board. + +- **Async ST7789 driver** (`src/driver/st7789.rs`) wrapping + `lcd-async` (async fork of `mipidsi`) with a 64,800-byte raw-byte + framebuffer in `.bss`. Renders via + `lcd_async::raw_framebuf::RawFrameBuf` and presents via + a single async DMA blit (`panel.show_raw_data(...).await`); the + await yields the executor for the ~65 ms SPI transfer so the radio + task isn't starved during repaints. + +- **Native 240×135 RGB565 renderer** (`src/display/render_color.rs`) + with splash, dashboard, and sparkline parity with the mono path, + plus a shared QR-code blit (`src/display/qr.rs`) generic over + `PixelColor`. The blit re-centers the 64×64 bitmap (cells in cols + 0..50 with ~14 px right-side padding), so both mono and color + splash now show the QR with 7 px quiet zones on all four sides + (was visibly left-shifted on mono). + +- **Shared content types** (`BoardInfo`, `DashboardCtx`) decouple + *what* to draw from *how* each board renders it. `create_display()` + now takes the board's full `DisplayParts` bundle (was just the I2C + bus), so non-I2C displays can carry SPI + control pins through. + +- **IDF app descriptor on every ESP image.** New + `esp-bootloader-esp-idf` 0.5 dependency (chip-feature-gated like + the rest of the `esp-*` stack) plus `esp_app_desc!()` in + `src/main.rs`, which emits the `.flash.appdesc` section that + `espflash` v4 requires in every ESP binary. + +### Changed + +- **ESP build modernized to upstream crates.io.** Removed the + `[patch.crates-io]` block that pinned `esp-hal`, `esp-rtos`, + `esp-backtrace`, and `esp-println` to `esp-rs/esp-hal#main`. The + versions tracked there (`esp-hal 1.1`, `esp-rtos 0.3`, + `esp-backtrace 0.19`, `esp-println 0.17`) have all reached + crates.io with the `embassy-executor` 0.10 compatibility we needed, + so the local fork pins are no longer required. `cargo:espflash` + bumped to v4 in `mise.toml` to match. + +- **`hsmc` 0.5.0 → 0.5.1.** Patch bump pulled in transparently with + the lockfile refresh; no behavior change. + +- **Documentation consolidated.** `PROTOCOL.md` removed from the + firmware repo (it now lives canonically in the spec repo, linked + from `README.md`). `BLE_MUX_DESIGN_DOC.md` moved to + `docs/ble_mux_design.md` so all firmware design docs sit under + `docs/`. + ## [1.4.1] - 2026-04-29 ### Fixed diff --git a/Cargo.lock b/Cargo.lock index bdc0fda..0acfcf8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -586,7 +586,7 @@ dependencies = [ [[package]] name = "donglora" -version = "1.4.1" +version = "1.5.0" dependencies = [ "cfg-if", "cortex-m", diff --git a/Cargo.toml b/Cargo.toml index 6af25a6..29b1a4a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ members = ["."] [package] name = "donglora" -version = "1.4.1" +version = "1.5.0" edition = "2021" build = "build.rs" authors = ["Stephen Waits "]