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

+52
View File
@@ -0,0 +1,52 @@
#[doc = r"Register block"]
#[repr(C)]
pub struct XIP_ENC {
#[doc = "0x00 - Bits 31:0 of XIP AES KEY"]
pub key0: KEY0,
#[doc = "0x04 - Bits 63:32 of XIP AES KEY"]
pub key1: KEY1,
#[doc = "0x08 - Bits 95:64 of XIP AES KEY"]
pub key2: KEY2,
#[doc = "0x0c - Bits 127:96 of XIP AES KEY"]
pub key3: KEY3,
#[doc = "0x10 - Bits 31:0 of XIP NONCE"]
pub nonce0: NONCE0,
#[doc = "0x14 - Bits 63:32 of XIP NONCE"]
pub nonce1: NONCE1,
#[doc = "0x18 - Bits 95:64 of XIP NONCE"]
pub nonce2: NONCE2,
#[doc = "0x1c - Enable stream cipher for XIP"]
pub enable: ENABLE,
}
#[doc = "KEY0 (w) register accessor: an alias for `Reg<KEY0_SPEC>`"]
pub type KEY0 = crate::Reg<key0::KEY0_SPEC>;
#[doc = "Bits 31:0 of XIP AES KEY"]
pub mod key0;
#[doc = "KEY1 (w) register accessor: an alias for `Reg<KEY1_SPEC>`"]
pub type KEY1 = crate::Reg<key1::KEY1_SPEC>;
#[doc = "Bits 63:32 of XIP AES KEY"]
pub mod key1;
#[doc = "KEY2 (w) register accessor: an alias for `Reg<KEY2_SPEC>`"]
pub type KEY2 = crate::Reg<key2::KEY2_SPEC>;
#[doc = "Bits 95:64 of XIP AES KEY"]
pub mod key2;
#[doc = "KEY3 (w) register accessor: an alias for `Reg<KEY3_SPEC>`"]
pub type KEY3 = crate::Reg<key3::KEY3_SPEC>;
#[doc = "Bits 127:96 of XIP AES KEY"]
pub mod key3;
#[doc = "NONCE0 (w) register accessor: an alias for `Reg<NONCE0_SPEC>`"]
pub type NONCE0 = crate::Reg<nonce0::NONCE0_SPEC>;
#[doc = "Bits 31:0 of XIP NONCE"]
pub mod nonce0;
#[doc = "NONCE1 (w) register accessor: an alias for `Reg<NONCE1_SPEC>`"]
pub type NONCE1 = crate::Reg<nonce1::NONCE1_SPEC>;
#[doc = "Bits 63:32 of XIP NONCE"]
pub mod nonce1;
#[doc = "NONCE2 (w) register accessor: an alias for `Reg<NONCE2_SPEC>`"]
pub type NONCE2 = crate::Reg<nonce2::NONCE2_SPEC>;
#[doc = "Bits 95:64 of XIP NONCE"]
pub mod nonce2;
#[doc = "ENABLE (rw) register accessor: an alias for `Reg<ENABLE_SPEC>`"]
pub type ENABLE = crate::Reg<enable::ENABLE_SPEC>;
#[doc = "Enable stream cipher for XIP"]
pub mod enable;