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:
17624 files changed
+4564928
-38
No files matched your search
Vendored
+100
@@ -0,0 +1,100 @@
|
||||
use super::*;
|
||||
use crate::export;
|
||||
|
||||
macro_rules! arrays {
|
||||
( $($len:literal $fmt:literal,)+ ) => {
|
||||
impl<T, const N: usize> Format for [T; N]
|
||||
where
|
||||
T: Format
|
||||
{
|
||||
default_format!();
|
||||
|
||||
#[inline]
|
||||
fn _format_tag() -> Str {
|
||||
match N {
|
||||
$(
|
||||
$len => internp!($fmt),
|
||||
)+
|
||||
_ => internp!("{=[?]}"),
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn _format_data(&self) {
|
||||
match N {
|
||||
$( $len )|+ => export::fmt_array(self),
|
||||
_ => export::fmt_slice(self),
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
arrays! {
|
||||
0 "{=[?;0]}",
|
||||
1 "{=[?;1]}",
|
||||
2 "{=[?;2]}",
|
||||
3 "{=[?;3]}",
|
||||
4 "{=[?;4]}",
|
||||
5 "{=[?;5]}",
|
||||
6 "{=[?;6]}",
|
||||
7 "{=[?;7]}",
|
||||
8 "{=[?;8]}",
|
||||
9 "{=[?;9]}",
|
||||
10 "{=[?;10]}",
|
||||
11 "{=[?;11]}",
|
||||
12 "{=[?;12]}",
|
||||
13 "{=[?;13]}",
|
||||
14 "{=[?;14]}",
|
||||
15 "{=[?;15]}",
|
||||
16 "{=[?;16]}",
|
||||
17 "{=[?;17]}",
|
||||
18 "{=[?;18]}",
|
||||
19 "{=[?;19]}",
|
||||
20 "{=[?;20]}",
|
||||
21 "{=[?;21]}",
|
||||
22 "{=[?;22]}",
|
||||
23 "{=[?;23]}",
|
||||
24 "{=[?;24]}",
|
||||
25 "{=[?;25]}",
|
||||
26 "{=[?;26]}",
|
||||
27 "{=[?;27]}",
|
||||
28 "{=[?;28]}",
|
||||
29 "{=[?;29]}",
|
||||
30 "{=[?;30]}",
|
||||
31 "{=[?;31]}",
|
||||
32 "{=[?;32]}",
|
||||
64 "{=[?;64]}",
|
||||
128 "{=[?;128]}",
|
||||
256 "{=[?;256]}",
|
||||
512 "{=[?;512]}",
|
||||
1024 "{=[?;1024]}",
|
||||
2048 "{=[?;2048]}",
|
||||
4096 "{=[?;4096]}",
|
||||
8192 "{=[?;8192]}",
|
||||
16384 "{=[?;16384]}",
|
||||
32768 "{=[?;32768]}",
|
||||
65536 "{=[?;65536]}",
|
||||
131072 "{=[?;131072]}",
|
||||
262144 "{=[?;262144]}",
|
||||
524288 "{=[?;524288]}",
|
||||
1048576 "{=[?;1048576]}",
|
||||
2097152 "{=[?;2097152]}",
|
||||
4194304 "{=[?;4194304]}",
|
||||
8388608 "{=[?;8388608]}",
|
||||
16777216 "{=[?;16777216]}",
|
||||
33554432 "{=[?;33554432]}",
|
||||
67108864 "{=[?;67108864]}",
|
||||
134217728 "{=[?;134217728]}",
|
||||
268435456 "{=[?;268435456]}",
|
||||
536870912 "{=[?;536870912]}",
|
||||
1073741824 "{=[?;1073741824]}",
|
||||
100 "{=[?;100]}",
|
||||
1000 "{=[?;1000]}",
|
||||
10000 "{=[?;10000]}",
|
||||
100000 "{=[?;100000]}",
|
||||
1000000 "{=[?;1000000]}",
|
||||
10000000 "{=[?;10000000]}",
|
||||
100000000 "{=[?;100000000]}",
|
||||
1000000000 "{=[?;1000000000]}",
|
||||
}
|
||||
Reference in new issue
Block a user