prepare Outputs type
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use crate::card::model::Card;
|
||||
use crate::display::shared_bus::DualPrimaryDisplay;
|
||||
use crate::navigation::inputs::ButtonAction;
|
||||
use crate::navigation::inputs::Inputs;
|
||||
use crate::navigation::outputs::Outputs;
|
||||
use crate::navigation::state::NavigationState;
|
||||
use crate::views::view::View;
|
||||
|
||||
@@ -33,15 +33,16 @@ pub trait Navigable {
|
||||
where
|
||||
D: DrawTarget<Color = Rgb565> + Send,
|
||||
D::Error: core::fmt::Debug;
|
||||
// fn display<D>(&self, outputs: &mut Outputs) -> 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, display: &'static mut DualPrimaryDisplay<'static>) {
|
||||
pub async fn run(mut inputs: Inputs, mut outputs: Outputs) {
|
||||
log::info!("starting navigation");
|
||||
|
||||
let mut state = NavigationState::new();
|
||||
state.screens.last().unwrap().display(display).await;
|
||||
state.screens.last().unwrap().display(&mut outputs.primary_display).await;
|
||||
|
||||
loop {
|
||||
let selection = select(
|
||||
@@ -87,7 +88,7 @@ pub async fn run(mut inputs: Inputs, display: &'static mut DualPrimaryDisplay<'s
|
||||
state.screens.push(new_state.view);
|
||||
|
||||
if action != Action::Timer || new_state.redraw {
|
||||
state.screens.last().unwrap().display(display).await;
|
||||
state.screens.last().unwrap().display(&mut outputs.primary_display).await;
|
||||
}
|
||||
|
||||
Timer::after(Duration::from_millis(DEBOUNCE_DURATION_MILLIS)).await;
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
use crate::display::{shared_bus::{DualPrimaryDisplay, DualSecondaryDisplay}, tertiary_lcd::TertiaryI2cLcd};
|
||||
|
||||
|
||||
|
||||
pub struct Outputs {
|
||||
pub primary_display: DualPrimaryDisplay<'static>,
|
||||
pub secondary_display_1: DualSecondaryDisplay<'static>,
|
||||
// pub secondary_display_2: DualSecondaryDisplay<'static>,
|
||||
// pub secondary_display_3: DualSecondaryDisplay<'static>,
|
||||
pub tertiary_display: TertiaryI2cLcd<'static>,
|
||||
pub _led_a: (),
|
||||
}
|
||||
@@ -24,16 +24,16 @@ impl NavigationState {
|
||||
match &self.screens.len() {
|
||||
0 => {
|
||||
log::info!("No screens to go back to");
|
||||
return self.screens.last().unwrap();
|
||||
self.screens.last().unwrap()
|
||||
}
|
||||
1 => {
|
||||
log::info!("Only one screen on stack, cannot go back");
|
||||
return self.screens.last().unwrap();
|
||||
self.screens.last().unwrap()
|
||||
}
|
||||
_ => {
|
||||
log::info!("Going back to previous screen");
|
||||
self.screens.pop();
|
||||
return self.screens.last().unwrap();
|
||||
self.screens.last().unwrap()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user