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>
24 lines
696 B
Rust
24 lines
696 B
Rust
macro_rules! droppable {
|
|
() => {
|
|
static COUNT: core::sync::atomic::AtomicI32 = core::sync::atomic::AtomicI32::new(0);
|
|
|
|
#[derive(Eq, Ord, PartialEq, PartialOrd)]
|
|
struct Droppable(i32);
|
|
impl Droppable {
|
|
fn new() -> Self {
|
|
COUNT.fetch_add(1, core::sync::atomic::Ordering::Relaxed);
|
|
Droppable(Self::count())
|
|
}
|
|
|
|
fn count() -> i32 {
|
|
COUNT.load(core::sync::atomic::Ordering::Relaxed)
|
|
}
|
|
}
|
|
impl Drop for Droppable {
|
|
fn drop(&mut self) {
|
|
COUNT.fetch_sub(1, core::sync::atomic::Ordering::Relaxed);
|
|
}
|
|
}
|
|
};
|
|
}
|