diff options
| author | ailurux <ailuruxx@gmail.com> | 2024-09-13 13:45:15 +1000 |
|---|---|---|
| committer | ailurux <ailuruxx@gmail.com> | 2024-09-13 13:45:15 +1000 |
| commit | 79dccc2685fad2763c5df31255095946cece2248 (patch) | |
| tree | ce7d7695e84cfb71832746bbccf9f9545409501b /src | |
| parent | df8de179e0212a2a9c46f770c228b514d08a774c (diff) | |
| parent | a174d76aa16e09ddfc2ce67393c92ed947a817a5 (diff) | |
| download | tangara-fw-79dccc2685fad2763c5df31255095946cece2248.tar.gz | |
Merge branch 'main' into daniel/persistent-positions
Diffstat (limited to 'src')
| -rw-r--r-- | src/tangara/system_fsm/running.cpp | 9 | ||||
| -rw-r--r-- | src/tangara/system_fsm/system_events.hpp | 2 | ||||
| -rw-r--r-- | src/tangara/system_fsm/system_fsm.hpp | 6 |
3 files changed, 11 insertions, 6 deletions
diff --git a/src/tangara/system_fsm/running.cpp b/src/tangara/system_fsm/running.cpp index 07166e2f..33c6c7dc 100644 --- a/src/tangara/system_fsm/running.cpp +++ b/src/tangara/system_fsm/running.cpp @@ -40,7 +40,7 @@ void Running::entry() { sUnmountTimer = xTimerCreate("unmount_timeout", kTicksBeforeUnmount, false, NULL, timer_callback); } - mountStorage(); + events::System().Dispatch(internal::Mount{}); } void Running::exit() { @@ -72,7 +72,8 @@ void Running::react(const SdDetectChanged& ev) { } if (ev.has_sd_card && !sStorage) { - mountStorage(); + events::System().Dispatch(internal::Mount{}); + return; } // Don't automatically unmount, since this event seems to occasionally happen @@ -120,7 +121,7 @@ void Running::react(const SamdUsbMscChanged& ev) { gpios.WriteSync(drivers::IGpios::Pin::kSdPowerEnable, 0); // Now it's ready for us. - mountStorage(); + events::System().Dispatch(internal::Mount{}); } } @@ -145,7 +146,7 @@ auto Running::updateSdState(drivers::SdState state) -> void { events::System().Dispatch(SdStateChanged{}); } -auto Running::mountStorage() -> void { +void Running::react(const internal::Mount&) { // Only mount our storage if we know it's not currently in use by the SAMD. if (sServices->samd().UsbMassStorage()) { updateSdState(drivers::SdState::kNotMounted); diff --git a/src/tangara/system_fsm/system_events.hpp b/src/tangara/system_fsm/system_events.hpp index 3452e58e..c93c14d5 100644 --- a/src/tangara/system_fsm/system_events.hpp +++ b/src/tangara/system_fsm/system_events.hpp @@ -82,6 +82,8 @@ struct SamdInterrupt : tinyfsm::Event {}; struct IdleTimeout : tinyfsm::Event {}; struct UnmountTimeout : tinyfsm::Event {}; +struct Mount : tinyfsm::Event {}; + } // namespace internal } // namespace system_fsm diff --git a/src/tangara/system_fsm/system_fsm.hpp b/src/tangara/system_fsm/system_fsm.hpp index 5c4157cd..40009781 100644 --- a/src/tangara/system_fsm/system_fsm.hpp +++ b/src/tangara/system_fsm/system_fsm.hpp @@ -63,6 +63,7 @@ class SystemState : public tinyfsm::Fsm<SystemState> { virtual void react(const audio::PlaybackUpdate&) {} virtual void react(const internal::IdleTimeout&) {} virtual void react(const internal::UnmountTimeout&) {} + virtual void react(const internal::Mount&) {} protected: auto IdleCondition() -> bool; @@ -101,16 +102,17 @@ class Running : public SystemState { void react(const audio::PlaybackUpdate&) override; void react(const database::event::UpdateFinished&) override; void react(const SamdUsbMscChanged&) override; - void react(const internal::UnmountTimeout&) override; void react(const StorageError&) override; + void react(const internal::UnmountTimeout&) override; + void react(const internal::Mount&) override; + using SystemState::react; private: auto checkIdle() -> void; auto updateSdState(drivers::SdState) -> void; - auto mountStorage() -> void; auto unmountStorage() -> void; bool storage_mounted_; |
