From 0347555d5b2314e1be58261ef29fa13a76c039e6 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Fri, 30 Jun 2023 17:05:11 +1000 Subject: Start on converting gpio expander interupts to fsm events --- src/system_fsm/system_fsm.cpp | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (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 c59c0908..dd5161ed 100644 --- a/src/system_fsm/system_fsm.cpp +++ b/src/system_fsm/system_fsm.cpp @@ -5,6 +5,8 @@ */ #include "system_fsm.hpp" +#include "audio_fsm.hpp" +#include "event_queue.hpp" #include "relative_wheel.hpp" #include "system_events.hpp" @@ -28,6 +30,42 @@ void SystemState::react(const FatalError& err) { } } +void SystemState::react(const internal::GpioInterrupt& ev) { + ESP_LOGI("sys", "gpios changed"); + bool prev_key_up = sGpioExpander->get_input(drivers::GpioExpander::KEY_UP); + bool prev_key_down = + sGpioExpander->get_input(drivers::GpioExpander::KEY_DOWN); + bool prev_key_lock = + sGpioExpander->get_input(drivers::GpioExpander::KEY_LOCK); + bool prev_has_headphones = + sGpioExpander->get_input(drivers::GpioExpander::PHONE_DETECT); + + sGpioExpander->Read(); + + bool key_up = sGpioExpander->get_input(drivers::GpioExpander::KEY_UP); + bool key_down = sGpioExpander->get_input(drivers::GpioExpander::KEY_DOWN); + bool key_lock = sGpioExpander->get_input(drivers::GpioExpander::KEY_LOCK); + bool has_headphones = + sGpioExpander->get_input(drivers::GpioExpander::PHONE_DETECT); + + if (key_up != prev_key_up) { + events::Dispatch( + {.falling = prev_key_up}); + } + if (key_down != prev_key_down) { + events::Dispatch( + {.falling = prev_key_down}); + } + if (key_lock != prev_key_lock) { + events::Dispatch( + {.falling = prev_key_lock}); + } + if (has_headphones != prev_has_headphones) { + events::Dispatch( + {.falling = prev_has_headphones}); + } +} + } // namespace system_fsm FSM_INITIAL_STATE(system_fsm::SystemState, system_fsm::states::Booting) -- cgit v1.2.3