add peripherals module which has shared state of all peripherals
This commit was merged in pull request #47.
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user