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
+49
@@ -0,0 +1,49 @@
|
||||
use alloc::sync::Arc;
|
||||
|
||||
/// A way of waking up a specific task.
|
||||
///
|
||||
/// By implementing this trait, types that are expected to be wrapped in an `Arc`
|
||||
/// can be converted into [`Waker`] objects.
|
||||
/// Those Wakers can be used to signal executors that a task it owns
|
||||
/// is ready to be `poll`ed again.
|
||||
///
|
||||
/// Currently, there are two ways to convert `ArcWake` into [`Waker`]:
|
||||
///
|
||||
/// * [`waker`](super::waker()) converts `Arc<impl ArcWake>` into [`Waker`].
|
||||
/// * [`waker_ref`](super::waker_ref()) converts `&Arc<impl ArcWake>` into [`WakerRef`] that
|
||||
/// provides access to a [`&Waker`][`Waker`].
|
||||
///
|
||||
/// [`Waker`]: std::task::Waker
|
||||
/// [`WakerRef`]: super::WakerRef
|
||||
// Note: Send + Sync required because `Arc<T>` doesn't automatically imply
|
||||
// those bounds, but `Waker` implements them.
|
||||
pub trait ArcWake: Send + Sync {
|
||||
/// Indicates that the associated task is ready to make progress and should
|
||||
/// be `poll`ed.
|
||||
///
|
||||
/// This function can be called from an arbitrary thread, including threads which
|
||||
/// did not create the `ArcWake` based [`Waker`].
|
||||
///
|
||||
/// Executors generally maintain a queue of "ready" tasks; `wake` should place
|
||||
/// the associated task onto this queue.
|
||||
///
|
||||
/// [`Waker`]: std::task::Waker
|
||||
fn wake(self: Arc<Self>) {
|
||||
Self::wake_by_ref(&self)
|
||||
}
|
||||
|
||||
/// Indicates that the associated task is ready to make progress and should
|
||||
/// be `poll`ed.
|
||||
///
|
||||
/// This function can be called from an arbitrary thread, including threads which
|
||||
/// did not create the `ArcWake` based [`Waker`].
|
||||
///
|
||||
/// Executors generally maintain a queue of "ready" tasks; `wake_by_ref` should place
|
||||
/// the associated task onto this queue.
|
||||
///
|
||||
/// This function is similar to [`wake`](ArcWake::wake), but must not consume the provided data
|
||||
/// pointer.
|
||||
///
|
||||
/// [`Waker`]: std::task::Waker
|
||||
fn wake_by_ref(arc_self: &Arc<Self>);
|
||||
}
|
||||
Reference in new issue
Block a user