add peripherals module which has shared state of all peripherals

This commit was merged in pull request #47.
This commit is contained in:
2026-08-29 17:57:08 +00:00
parent 282bcd163c
commit a31c818b37
18 changed files with 207 additions and 99 deletions
+19 -4
View File
@@ -3,6 +3,7 @@ use crate::navigation::inputs::ButtonAction;
use crate::navigation::inputs::Inputs;
use crate::navigation::outputs::Outputs;
use crate::navigation::state::NavigationState;
use crate::peripherals::Peripherals;
use crate::views::view::View;
use embassy_futures::select::{Either, select};
@@ -27,16 +28,25 @@ pub struct NewState {
}
pub trait Navigable {
fn display(&self, outputs: &mut Outputs) -> impl core::future::Future<Output = ()> + Send;
fn display(
&self,
outputs: &mut Outputs,
peripherals: &Peripherals,
) -> impl core::future::Future<Output = ()> + Send;
fn handle_input(&self, input: Action) -> impl core::future::Future<Output = NewState> + Send;
}
#[embassy_executor::task]
pub async fn run(mut inputs: Inputs, mut outputs: Outputs) {
pub async fn run(mut inputs: Inputs, mut outputs: Outputs, peripherals: &'static Peripherals) {
log::info!("starting navigation");
let mut state = NavigationState::new();
state.screens.last().unwrap().display(&mut outputs).await;
state
.screens
.last()
.unwrap()
.display(&mut outputs, peripherals)
.await;
loop {
let selection = select(
@@ -82,7 +92,12 @@ pub async fn run(mut inputs: Inputs, mut outputs: Outputs) {
state.screens.push(new_state.view);
if action != Action::Timer || new_state.redraw {
state.screens.last().unwrap().display(&mut outputs).await;
state
.screens
.last()
.unwrap()
.display(&mut outputs, peripherals)
.await;
}
Timer::after(Duration::from_millis(DEBOUNCE_DURATION_MILLIS)).await;