use crate::firmware::firmware_state::{AppCrashesStep, FirmwareState}; use crate::firmware::prometeu_context::PrometeuContext; use prometeu_core::abi::log::{LogLevel, LogSource}; #[derive(Debug, Clone)] pub struct HubHomeStep; impl HubHomeStep { pub fn on_enter(&mut self, ctx: &mut PrometeuContext) { ctx.os.log(LogLevel::Info, LogSource::Hub, 0, "Entering HubHome".to_string()); } pub fn on_update(&mut self, ctx: &mut PrometeuContext) -> Option { let mut error = None; // Always updates the Hub GUI (clears screen and processes input if no focus) ctx.hub.gui_update(ctx.os, ctx.hw); if let Some(focused_id) = ctx.hub.window_manager.focused { if ctx.hw.pad().start().down { ctx.hub.window_manager.remove_window(focused_id); } else { // System App runs here, drawing over the Hub background error = ctx.os.tick(ctx.vm, ctx.signals, ctx.hw); } } // Renders the System App window borders ctx.hub.render(ctx.os, ctx.hw); ctx.hw.gfx_mut().present(); if let Some(err) = error { return Some(FirmwareState::AppCrashes(AppCrashesStep { error: err })); } None } pub fn on_exit(&mut self, _ctx: &mut PrometeuContext) {} }