From f94be3db2f2bb6c1b359744cb915683095e4ee80 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Wed, 26 Jul 2023 11:23:36 +1000 Subject: make event queue go faster --- src/system_fsm/system_fsm.cpp | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'src/system_fsm/system_fsm.cpp') 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 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()) { transit(); } } -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( - {.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( - {.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( - {.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( - {.falling = prev_has_headphones}); + HasPhonesChanged ev{.falling = prev_key_up}; + events::Audio().Dispatch(ev); } } -- cgit v1.2.3