summaryrefslogtreecommitdiff
path: root/src/tangara/system_fsm
diff options
context:
space:
mode:
authorayumi <ayumi@noreply.codeberg.org>2025-02-15 02:25:27 +0100
committerayumi <ayumi@noreply.codeberg.org>2025-03-05 08:57:46 +0100
commit9fdf94e9cee5a5180ffefc2b8314f7a9879ebbc6 (patch)
tree80c2ca8003fe32e59eccf2e208a53e1e87c66790 /src/tangara/system_fsm
parent42c2a4f2445ff56a2a0a78c4ef265e5be346d40d (diff)
downloadtangara-fw-9fdf94e9cee5a5180ffefc2b8314f7a9879ebbc6.tar.gz
Allow manually unmounting the SD card
Diffstat (limited to 'src/tangara/system_fsm')
-rw-r--r--src/tangara/system_fsm/running.cpp15
-rw-r--r--src/tangara/system_fsm/system_events.hpp3
-rw-r--r--src/tangara/system_fsm/system_fsm.hpp5
3 files changed, 22 insertions, 1 deletions
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<Idle>();
+ } else {
+ unmountStorage();
+ }
+}
+
void Running::react(const internal::UnmountTimeout&) {
if (IdleCondition()) {
- transit<Idle>();
+ 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<SystemState> {
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;