feat: add display UI with splash screen, dashboard, and RSSI sparkline

Implement full SSD1306 OLED display support:
- Splash screen on boot (1.5s) with project name, version, board
- Dashboard showing radio state, config, counters, RSSI/SNR
- RSSI history sparkline (64-sample ring buffer, 2px-wide bars)
- DisplayOn/DisplayOff host commands routed via dedicated channel
- Pure render functions against generic DrawTarget (no hardware coupling)
- Display on/off control bypasses radio task entirely

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
swaitsandClaude Opus 4.6 committed 2026-03-29 20:42:54 -06:00
1 parent 7064110293
commit 3102fc747a
17624 files changed
+4564928 -38

No files matched your search

+13
View File
@@ -0,0 +1,13 @@
- Version of `ssd1306` in use (if applicable): [version here]
- MCU/other hardware in use: [hardware description here]
- Display resolution and interface: [SPI/I2C], [128x64]
## Description of the problem/feature request/other
[description here]
## Test case (if applicable)
```rust
// Failing test case demonstrating the issue here
```
+12
View File
@@ -0,0 +1,12 @@
Hi! Thank you for helping out with SSD1306 development! Please:
- [ ] Check that you've added documentation to any new methods
- [ ] Rebase from `master` if you're not already up to date
- [ ] Add or modify an example if there are changes to the public API
- [ ] Add a `CHANGELOG.md` entry in the **Unreleased** section under the appropriate heading (**Added**, **Fixed**, **Changed**, etc)
- [ ] Run `rustfmt` on the project with `cargo fmt --all` - CI will not pass without this step
- [ ] Check that your branch is up to date with master and that CI is passing once the PR is opened
## PR description
[add your PR description here]
+78
View File
@@ -0,0 +1,78 @@
name: Build and test
on:
push:
branches-ignore:
- '*.tmp'
tags:
- '*'
pull_request:
workflow_dispatch:
jobs:
fmt:
name: fmt
runs-on: "ubuntu-latest"
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@1.84
with:
components: rustfmt
- run: cargo fmt --all -- --check
test:
name: test
runs-on: "ubuntu-latest"
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@1.84
- run: cargo test --lib --target x86_64-unknown-linux-gnu
- run: cargo test --doc --target x86_64-unknown-linux-gnu
test-msrv:
name: build with MSRV
runs-on: "ubuntu-latest"
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: 1.75
- run: cargo build --lib --target x86_64-unknown-linux-gnu
- run: cargo build --lib --target x86_64-unknown-linux-gnu --features async
- run: cargo doc --target x86_64-unknown-linux-gnu
- run: cargo doc --target x86_64-unknown-linux-gnu --features async
build:
strategy:
fail-fast: false
matrix:
target:
- arm-unknown-linux-gnueabi
# Raspberry Pi 2, 3, etc
- armv7-unknown-linux-gnueabihf
# Linux
- x86_64-unknown-linux-gnu
- x86_64-unknown-linux-musl
# Bare metal
- thumbv6m-none-eabi
include:
- target: thumbv7em-none-eabi
examples: true
- target: thumbv7em-none-eabihf
examples: true
- target: thumbv7m-none-eabi
examples: true
name: ${{matrix.target}}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@1.84
with:
components: rustfmt
- run: rustup target add ${{matrix.target}}
- run: cargo build --target ${{matrix.target}} --all-features --release
- if: ${{ matrix.examples }}
run: cargo build --target ${{matrix.target}} --examples --release
- if: ${{ matrix.examples }}
run: cargo build --target ${{matrix.target}} --all-features --examples --release
- run: cargo doc --all-features --target ${{matrix.target }}