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>
37 lines
595 B
Rust
37 lines
595 B
Rust
extern crate defmt as defmt2;
|
|
|
|
fn main() {
|
|
let baz: Baz<Qux> = Default::default();
|
|
defmt::info!("{}", baz);
|
|
}
|
|
|
|
trait Foo {
|
|
type Bar;
|
|
}
|
|
#[derive(defmt::Format, Default)]
|
|
struct Baz<T: Foo> {
|
|
field: T::Bar,
|
|
field2: Quux<T>,
|
|
}
|
|
#[derive(defmt::Format, Default)]
|
|
struct Qux;
|
|
impl Foo for Qux {
|
|
type Bar = Qux;
|
|
}
|
|
#[allow(dead_code)]
|
|
#[derive(defmt::Format, Default)]
|
|
enum Quux<T: Foo> {
|
|
#[default]
|
|
None,
|
|
Variant1(T),
|
|
Variant2 {
|
|
f: T::Bar,
|
|
},
|
|
Variant3(T::Bar),
|
|
}
|
|
|
|
#[allow(dead_code)]
|
|
#[derive(defmt::Format)]
|
|
#[defmt(crate = defmt2)]
|
|
struct Quz;
|