summaryrefslogtreecommitdiff
path: root/src/system_fsm/system_fsm.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-07-26 11:23:36 +1000
committerjacqueline <me@jacqueline.id.au>2023-07-26 11:23:36 +1000
commitf94be3db2f2bb6c1b359744cb915683095e4ee80 (patch)
tree79d335db661720947c518a535bdde733fe669032 /src/system_fsm/system_fsm.cpp
parentd8194135bbaad97d1f3428a74c7fc54ba3f604ec (diff)
downloadtangara-fw-f94be3db2f2bb6c1b359744cb915683095e4ee80.tar.gz
make event queue go faster
Diffstat (limited to 'src/system_fsm/system_fsm.cpp')
-rw-r--r--src/system_fsm/system_fsm.cpp27
1 files changed, 18 insertions, 9 deletions
diff --git a/src/system_fsm/system_fsm.cpp b/src/system_fsm/system_fsm.cpp
index c029c6bf..27e57b22 100644
--- a/src/system_fsm/system_fsm.cpp
+++ b/src/system_fsm/system_fsm.cpp
@@ -7,6 +7,7 @@
#include "system_fsm.hpp"
#include "audio_fsm.hpp"
#include "event_queue.hpp"
+#include "gpios.hpp"
#include "relative_wheel.hpp"
#include "system_events.hpp"
#include "tag_parser.hpp"
@@ -30,13 +31,18 @@ std::shared_ptr<audio::TrackQueue> SystemState::sTrackQueue;
console::AppConsole* SystemState::sAppConsole;
+auto SystemState::early_init_gpios() -> drivers::Gpios* {
+ sGpios.reset(drivers::Gpios::Create());
+ return sGpios.get();
+}
+
void SystemState::react(const FatalError& err) {
if (!is_in_state<states::Error>()) {
transit<states::Error>();
}
}
-void SystemState::react(const internal::GpioInterrupt& ev) {
+void SystemState::react(const internal::GpioInterrupt&) {
bool prev_key_up = sGpios->Get(drivers::Gpios::Pin::kKeyUp);
bool prev_key_down = sGpios->Get(drivers::Gpios::Pin::kKeyDown);
bool prev_key_lock = sGpios->Get(drivers::Gpios::Pin::kKeyLock);
@@ -50,20 +56,23 @@ void SystemState::react(const internal::GpioInterrupt& ev) {
bool has_headphones = !sGpios->Get(drivers::Gpios::Pin::kPhoneDetect);
if (key_up != prev_key_up) {
- events::Dispatch<KeyUpChanged, audio::AudioState, ui::UiState>(
- {.falling = prev_key_up});
+ KeyUpChanged ev{.falling = prev_key_up};
+ events::Audio().Dispatch(ev);
+ events::Ui().Dispatch(ev);
}
if (key_down != prev_key_down) {
- events::Dispatch<KeyDownChanged, audio::AudioState, ui::UiState>(
- {.falling = prev_key_down});
+ KeyDownChanged ev{.falling = prev_key_up};
+ events::Audio().Dispatch(ev);
+ events::Ui().Dispatch(ev);
}
if (key_lock != prev_key_lock) {
- events::Dispatch<KeyLockChanged, SystemState, ui::UiState>(
- {.falling = prev_key_lock});
+ KeyLockChanged ev{.falling = prev_key_up};
+ events::System().Dispatch(ev);
+ events::Ui().Dispatch(ev);
}
if (has_headphones != prev_has_headphones) {
- events::Dispatch<HasPhonesChanged, audio::AudioState>(
- {.falling = prev_has_headphones});
+ HasPhonesChanged ev{.falling = prev_key_up};
+ events::Audio().Dispatch(ev);
}
}