summaryrefslogtreecommitdiff
path: root/src/system_fsm/system_fsm.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-05-19 21:21:27 +1000
committerjacqueline <me@jacqueline.id.au>2023-05-19 21:21:27 +1000
commita6ab1504058304012791281f9eb42c262745888f (patch)
treef82379cd1e66a8ae2f1afbae5cf083a8ab7acc53 /src/system_fsm/system_fsm.cpp
parentb320a6a863cf1c10dc79254af41f573730935564 (diff)
downloadtangara-fw-a6ab1504058304012791281f9eb42c262745888f.tar.gz
Add tinyfsm, start converting core functions to an FSM-based event loop
Diffstat (limited to 'src/system_fsm/system_fsm.cpp')
-rw-r--r--src/system_fsm/system_fsm.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/system_fsm/system_fsm.cpp b/src/system_fsm/system_fsm.cpp
new file mode 100644
index 00000000..c529df5e
--- /dev/null
+++ b/src/system_fsm/system_fsm.cpp
@@ -0,0 +1,24 @@
+#include "system_fsm.hpp"
+#include "system_events.hpp"
+
+namespace system_fsm {
+
+std::shared_ptr<drivers::GpioExpander> SystemState::sGpioExpander;
+std::shared_ptr<drivers::Samd> SystemState::sSamd;
+
+std::shared_ptr<drivers::TouchWheel> SystemState::sTouch;
+std::shared_ptr<drivers::Battery> SystemState::sBattery;
+std::shared_ptr<drivers::SdStorage> SystemState::sStorage;
+std::shared_ptr<drivers::Display> SystemState::sDisplay;
+std::shared_ptr<drivers::AudioDac> SystemState::sDac;
+std::shared_ptr<database::Database> SystemState::sDatabase;
+
+void SystemState::react(const FatalError& err) {
+ if (!is_in_state<states::Error>()) {
+ transit<states::Error>();
+ }
+}
+
+} // namespace system_fsm
+
+FSM_INITIAL_STATE(system_fsm::SystemState, system_fsm::states::Booting)