From 2774e83d9936a832ceff2377bae7c441f85be81f Mon Sep 17 00:00:00 2001 From: Priec Date: Mon, 19 Jan 2026 15:53:19 +0100 Subject: [PATCH] ported into a generic library --- mqtt_display/src/display/task.rs | 20 ++++++++++---------- mqtt_display/src/display/tui.rs | 9 --------- mqtt_display/src/i2c/com.rs | 16 +++++++--------- 3 files changed, 17 insertions(+), 28 deletions(-) diff --git a/mqtt_display/src/display/task.rs b/mqtt_display/src/display/task.rs index a9cab25..5d5bfc5 100644 --- a/mqtt_display/src/display/task.rs +++ b/mqtt_display/src/display/task.rs @@ -39,19 +39,19 @@ pub async fn display_task(i2c: I2cDevice) { let mut terminal = Terminal::new(backend).expect("terminal init failed"); let mut state = DisplayState::default(); - let mut orchestrator = Orchestrator::::new(); + let mut orchestrator = Orchestrator::::new(); let rx = receiver(); // Register pages // Enum-based registration - orchestrator.register_page(Screen::Menu, Screen::Menu); - orchestrator.register_page(Screen::Imu, Screen::Imu); - orchestrator.register_page(Screen::Chat, Screen::Chat); + orchestrator.register(Screen::Menu); + orchestrator.register(Screen::Imu); + orchestrator.register(Screen::Chat); orchestrator.bind(Key::tab(), ComponentAction::Next); orchestrator.bind(Key::enter(), ComponentAction::Select); - let _ = orchestrator.navigate_to("menu".into()); + let _ = orchestrator.navigate_to(Screen::Menu); info!("Display ready"); @@ -60,27 +60,27 @@ pub async fn display_task(i2c: I2cDevice) { match cmd { DisplayCommand::PushKey(key) => { if key == Key::tab() { - orchestrator.focus_manager_mut().wrap_next(); + orchestrator.focus_manager_mut().next(); } else if key == Key::enter() { if let Ok(events) = orchestrator.process_frame(key) { for event in events { match event { ScreenEvent::GoToImu => { - let _ = orchestrator.navigate_to("imu".into()); + let _ = orchestrator.navigate_to(Screen::Imu); } ScreenEvent::GoToChat => { - let _ = orchestrator.navigate_to("chat".into()); + let _ = orchestrator.navigate_to(Screen::Chat); } ScreenEvent::NavigatePrev => { if let Some(cur) = orchestrator.current() { let prev = cur.prev(); - let _ = orchestrator.navigate_to(prev.to_str().into()); + let _ = orchestrator.navigate_to(prev); } } ScreenEvent::NavigateNext => { if let Some(cur) = orchestrator.current() { let next = cur.next(); - let _ = orchestrator.navigate_to(next.to_str().into()); + let _ = orchestrator.navigate_to(next); } } } diff --git a/mqtt_display/src/display/tui.rs b/mqtt_display/src/display/tui.rs index 81940d8..92ed593 100644 --- a/mqtt_display/src/display/tui.rs +++ b/mqtt_display/src/display/tui.rs @@ -11,15 +11,6 @@ use ratatui::{ }; use log::info; -#[derive(Clone, Debug, PartialEq, Eq, Hash)] -pub enum Screen { - Menu, - Imu, - Chat, -} - -impl pages_tui::page::PageId for Screen {} - /// Focus targets - different per screen #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] pub enum PageFocus { diff --git a/mqtt_display/src/i2c/com.rs b/mqtt_display/src/i2c/com.rs index 069d285..a53ada6 100644 --- a/mqtt_display/src/i2c/com.rs +++ b/mqtt_display/src/i2c/com.rs @@ -5,19 +5,17 @@ use esp_hal::{ i2c::master::{Config, I2c}, peripherals::Peripherals, }; -use ssd1306::mode::BufferedGraphicsMode; +use mousefood::{EmbeddedBackend, EmbeddedBackendConfig}; +use ratatui::{ + layout::{Constraint, Direction, Layout}, + widgets::{Block, Borders, Paragraph}, + Terminal, +}; +use ssd1306::{prelude::*, I2CDisplayInterface, Ssd1306, mode::BufferedGraphicsMode}; use log::info; #[embassy_executor::task] pub async fn display_task() { - use mousefood::{EmbeddedBackend, EmbeddedBackendConfig}; - use ratatui::{ - layout::{Constraint, Direction, Layout}, - widgets::{Block, Borders, Paragraph}, - Terminal, - }; - use ssd1306::{prelude::*, I2CDisplayInterface, Ssd1306}; - let peripherals = unsafe { Peripherals::steal() }; let i2c = I2c::new(peripherals.I2C0, Config::default())