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>
63 lines
1.1 KiB
Rust
63 lines
1.1 KiB
Rust
#![allow(clippy::let_underscore_untyped)]
|
|
|
|
use paste::paste;
|
|
use paste_test_suite::paste_test;
|
|
|
|
#[test]
|
|
fn test_attr() {
|
|
paste! {
|
|
#[paste_test(k = "val" "ue")]
|
|
struct A;
|
|
|
|
#[paste_test_suite::paste_test(k = "val" "ue")]
|
|
struct B;
|
|
|
|
#[::paste_test_suite::paste_test(k = "val" "ue")]
|
|
struct C;
|
|
|
|
#[paste_test(k = "va" [<l u>] e)]
|
|
struct D;
|
|
}
|
|
|
|
let _ = A;
|
|
let _ = B;
|
|
let _ = C;
|
|
let _ = D;
|
|
}
|
|
|
|
#[test]
|
|
fn test_paste_cfg() {
|
|
macro_rules! m {
|
|
($ret:ident, $width:expr) => {
|
|
paste! {
|
|
#[cfg(any(feature = "protocol_feature_" $ret:snake, target_pointer_width = "" $width))]
|
|
fn new() -> $ret { todo!() }
|
|
}
|
|
};
|
|
}
|
|
|
|
struct Paste;
|
|
|
|
#[cfg(target_pointer_width = "64")]
|
|
m!(Paste, 64);
|
|
#[cfg(target_pointer_width = "32")]
|
|
m!(Paste, 32);
|
|
|
|
let _ = new;
|
|
}
|
|
|
|
#[test]
|
|
fn test_path_in_attr() {
|
|
macro_rules! m {
|
|
(#[x = $x:ty]) => {
|
|
stringify!($x)
|
|
};
|
|
}
|
|
|
|
let ty = paste! {
|
|
m!(#[x = foo::Bar])
|
|
};
|
|
|
|
assert_eq!("foo::Bar", ty);
|
|
}
|