From 9fdf94e9cee5a5180ffefc2b8314f7a9879ebbc6 Mon Sep 17 00:00:00 2001 From: ayumi Date: Sat, 15 Feb 2025 02:25:27 +0100 Subject: Allow manually unmounting the SD card --- src/tangara/system_fsm/running.cpp | 15 ++++++++++++++- src/tangara/system_fsm/system_events.hpp | 3 +++ src/tangara/system_fsm/system_fsm.hpp | 5 +++++ 3 files changed, 22 insertions(+), 1 deletion(-) (limited to 'src/tangara/system_fsm') diff --git a/src/tangara/system_fsm/running.cpp b/src/tangara/system_fsm/running.cpp index 13f58ef9..87b7f1ac 100644 --- a/src/tangara/system_fsm/running.cpp +++ b/src/tangara/system_fsm/running.cpp @@ -59,9 +59,22 @@ void Running::react(const database::event::UpdateFinished&) { checkIdle(); } +void Running::react(const ui::UnmountRequest& ev) { + events::Audio().Dispatch(audio::TogglePlayPause{.set_to = false}); + events::Audio().Dispatch(UnmountRequest{.idle = false}); +} + +void Running::react(const audio::UnmountReady& ev) { + if (ev.idle) { + transit(); + } else { + unmountStorage(); + } +} + void Running::react(const internal::UnmountTimeout&) { if (IdleCondition()) { - transit(); + events::Audio().Dispatch(UnmountRequest{.idle = true}); } } diff --git a/src/tangara/system_fsm/system_events.hpp b/src/tangara/system_fsm/system_events.hpp index c2e3a2ab..b96846e0 100644 --- a/src/tangara/system_fsm/system_events.hpp +++ b/src/tangara/system_fsm/system_events.hpp @@ -40,6 +40,9 @@ struct FatalError : tinyfsm::Event {}; struct OnIdle : tinyfsm::Event {}; struct SdStateChanged : tinyfsm::Event {}; +struct UnmountRequest : tinyfsm::Event { + bool idle; +}; struct StorageError : tinyfsm::Event { FRESULT error; diff --git a/src/tangara/system_fsm/system_fsm.hpp b/src/tangara/system_fsm/system_fsm.hpp index 40009781..398a0b9b 100644 --- a/src/tangara/system_fsm/system_fsm.hpp +++ b/src/tangara/system_fsm/system_fsm.hpp @@ -27,6 +27,7 @@ #include "drivers/touchwheel.hpp" #include "system_fsm/service_locator.hpp" #include "system_fsm/system_events.hpp" +#include "ui/ui_fsm.hpp" #include "tinyfsm.hpp" namespace system_fsm { @@ -64,6 +65,8 @@ class SystemState : public tinyfsm::Fsm { virtual void react(const internal::IdleTimeout&) {} virtual void react(const internal::UnmountTimeout&) {} virtual void react(const internal::Mount&) {} + virtual void react(const ui::UnmountRequest&) {} + virtual void react(const audio::UnmountReady&) {} protected: auto IdleCondition() -> bool; @@ -103,6 +106,8 @@ class Running : public SystemState { void react(const database::event::UpdateFinished&) override; void react(const SamdUsbMscChanged&) override; void react(const StorageError&) override; + void react(const ui::UnmountRequest&) override; + void react(const audio::UnmountReady&) override; void react(const internal::UnmountTimeout&) override; void react(const internal::Mount&) override; -- cgit v1.2.3