wip: add flash info view

This commit is contained in:
2026-08-29 15:52:38 +00:00
parent e65162249d
commit 92c20d61cb
6 changed files with 125 additions and 18 deletions
+49
View File
@@ -0,0 +1,49 @@
use crate::navigation::inputs::ButtonAction;
use crate::navigation::navigation::Action;
use crate::navigation::navigation::Navigable;
use crate::navigation::navigation::NewState;
use crate::navigation::outputs::Outputs;
use crate::views::view::View;
use embedded_graphics::mono_font::MonoTextStyle;
use embedded_graphics::mono_font::ascii::FONT_10X20;
use embedded_graphics::pixelcolor::Rgb565;
use embedded_graphics::prelude::DrawTarget;
use embedded_graphics::prelude::RgbColor;
use embedded_graphics::text::Text;
use embedded_graphics::prelude::Point;
#[derive(Debug, Clone)]
pub struct FlashInfoView {}
impl Navigable for FlashInfoView {
fn display(&self, outputs: &mut Outputs) -> impl core::future::Future<Output = ()> + Send {
let style = MonoTextStyle::new(&FONT_10X20, Rgb565::WHITE);
Text::new("Flash Initialized: {:?}", Point::new(40, 40), style);
core::future::ready(())
}
fn handle_input(&self, input: Action) -> impl core::future::Future<Output = NewState> + Send {
async move {
let Action::Button(input) = input else {
// Skip timer inputs
return NewState {
view: View::FlashInfo(self.clone()),
replace_view: true,
redraw: false,
};
};
let new_menu = match input {
_ => View::FlashInfo(self.clone()),
};
NewState {
replace_view: matches!(new_menu, View::FlashInfo(_)),
view: new_menu,
redraw: true,
}
}
}
}
+42 -5
View File
@@ -1,11 +1,14 @@
use crate::navigation::navigation::{Action, Navigable, NewState};
use crate::navigation::outputs::Outputs;
use crate::views::{menu_item, view::View};
use crate::views::{flash_info_view::FlashInfoView, menu_item, view::View};
use crate::navigation::inputs::ButtonAction;
use embedded_graphics::pixelcolor::Rgb565;
use embedded_graphics::prelude::RgbColor;
use embedded_graphics_core::draw_target::DrawTarget;
pub const MAX_SELECTED: i8 = 2;
pub const MAX_SELECTED: i32 = 2;
#[derive(Debug, Clone)]
pub struct SettingsMenu {
@@ -18,16 +21,50 @@ impl Navigable for SettingsMenu {
display.clear(Rgb565::BLACK).unwrap();
menu_item::show(display, "System Inforation", 0, self.selected);
menu_item::show(display, "Wifi Information", 1, self.selected);
menu_item::show(display, "Flash Information", 2, self.selected);
core::future::ready(())
}
fn handle_input(&self, input: Action) -> impl core::future::Future<Output = NewState> + Send {
async move {
let Action::Button(input) = input else {
// Skip timer inputs
return NewState {
view: View::Settings(self.clone()),
replace_view: true,
redraw: false,
};
};
let new_menu = match input {
ButtonAction::Up => {
let new_selected = if (self.selected - 1) < 0 {
MAX_SELECTED - 1
} else {
self.selected - 1
};
View::Settings(SettingsMenu {
selected: new_selected,
})
}
ButtonAction::Down => {
let new_selected = self.selected.wrapping_add(1) % MAX_SELECTED;
View::Settings(SettingsMenu {
selected: new_selected,
})
}
ButtonAction::Ok => match self.selected {
2 => View::FlashInfo(FlashInfoView {}),
_ => View::Settings(self.clone()),
},
_ => View::Settings(self.clone()),
};
NewState {
view: View::Settings(SettingsMenu { selected: 0 }),
replace_view: true,
redraw: !matches!(input, Action::Timer),
replace_view: matches!(new_menu, View::Settings(_)),
view: new_menu,
redraw: true,
}
}
}
+5 -2
View File
@@ -1,8 +1,8 @@
use crate::navigation::outputs::Outputs;
use crate::views::card_view::CardView;
use crate::views::{
journal_view::JournalView, main_menu::MainMenu, scan_menu::ScanMenu,
settings_menu::SettingsMenu,
flash_info_view::FlashInfoView, journal_view::JournalView, main_menu::MainMenu,
scan_menu::ScanMenu, settings_menu::SettingsMenu,
};
use crate::navigation::navigation::{Navigable, NewState};
@@ -14,6 +14,7 @@ pub enum View {
Settings(SettingsMenu),
Journal(JournalView),
Card(CardView),
FlashInfo(FlashInfoView),
}
impl Navigable for View {
@@ -25,6 +26,7 @@ impl Navigable for View {
View::Settings(settings_menu) => settings_menu.display(outputs).await,
View::Journal(journal_view) => journal_view.display(outputs).await,
View::Card(card_view) => card_view.display(outputs).await,
View::FlashInfo(flash_info_view) => flash_info_view.display(outputs).await,
}
}
}
@@ -40,6 +42,7 @@ impl Navigable for View {
View::Settings(settings_menu) => settings_menu.handle_input(input).await,
View::Journal(journal_view) => journal_view.handle_input(input).await,
View::Card(card_view) => card_view.handle_input(input).await,
View::FlashInfo(flash_info_view) => flash_info_view.handle_input(input).await,
}
}
}