diff options
| author | jacqueline <me@jacqueline.id.au> | 2024-05-02 19:12:26 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2024-05-02 19:12:26 +1000 |
| commit | 1573a8c4cde1cd9528b422b2dcc598e37ffe94a7 (patch) | |
| tree | d162822b8fd7054f81bace0c7a65ab4d5e6f93ef /src/system_fsm/system_fsm.cpp | |
| parent | a231fd1c8afedbeb14b0bc77d76bad61db986059 (diff) | |
| download | tangara-fw-1573a8c4cde1cd9528b422b2dcc598e37ffe94a7.tar.gz | |
WIP merge cyclically dependent components into one big component
Diffstat (limited to 'src/system_fsm/system_fsm.cpp')
| -rw-r--r-- | src/system_fsm/system_fsm.cpp | 102 |
1 files changed, 0 insertions, 102 deletions
diff --git a/src/system_fsm/system_fsm.cpp b/src/system_fsm/system_fsm.cpp deleted file mode 100644 index 59d41c73..00000000 --- a/src/system_fsm/system_fsm.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright 2023 jacqueline <me@jacqueline.id.au> - * - * SPDX-License-Identifier: GPL-3.0-only - */ - -#include "system_fsm.hpp" -#include "audio_fsm.hpp" -#include "driver/gpio.h" -#include "event_queue.hpp" -#include "gpios.hpp" -#include "service_locator.hpp" -#include "system_events.hpp" -#include "tag_parser.hpp" -#include "track_queue.hpp" - -[[maybe_unused]] static const char kTag[] = "system"; - -namespace system_fsm { - -std::shared_ptr<ServiceLocator> SystemState::sServices; -std::unique_ptr<drivers::SdStorage> SystemState::sStorage; - -console::AppConsole* SystemState::sAppConsole; - -void check_interrupts_cb(TimerHandle_t timer) { - if (!gpio_get_level(GPIO_NUM_34)) { - events::System().Dispatch(internal::GpioInterrupt{}); - } - if (!gpio_get_level(GPIO_NUM_35)) { - events::System().Dispatch(internal::SamdInterrupt{}); - } -} - -void SystemState::react(const FatalError& err) { - if (!is_in_state<states::Error>()) { - transit<states::Error>(); - } -} - -void SystemState::react(const HapticTrigger& trigger) { - auto& haptics = sServices->haptics(); - haptics.PlayWaveformEffect(trigger.effect); -} - -void SystemState::react(const internal::GpioInterrupt&) { - auto& gpios = sServices->gpios(); - bool prev_key_lock = gpios.IsLocked(); - bool prev_has_headphones = !gpios.Get(drivers::Gpios::Pin::kPhoneDetect); - bool prev_has_sd = gpios.Get(drivers::Gpios::Pin::kSdCardDetect); - - gpios.Read(); - - bool key_lock = gpios.IsLocked(); - bool has_headphones = !gpios.Get(drivers::Gpios::Pin::kPhoneDetect); - bool has_sd = gpios.Get(drivers::Gpios::Pin::kSdCardDetect); - - if (key_lock != prev_key_lock) { - KeyLockChanged ev{.locking = key_lock}; - events::System().Dispatch(ev); - events::Audio().Dispatch(ev); - events::Ui().Dispatch(ev); - } - if (has_headphones != prev_has_headphones) { - HasPhonesChanged ev{.has_headphones = has_headphones}; - events::Audio().Dispatch(ev); - } - if (has_sd != prev_has_sd) { - SdDetectChanged ev{.has_sd_card = !has_sd}; - events::System().Dispatch(ev); - events::Ui().Dispatch(ev); - } -} - -void SystemState::react(const internal::SamdInterrupt&) { - auto& samd = sServices->samd(); - auto prev_charge_status = samd.GetChargeStatus(); - auto prev_usb_status = samd.GetUsbStatus(); - - samd.UpdateChargeStatus(); - samd.UpdateUsbStatus(); - - auto charge_status = samd.GetChargeStatus(); - auto usb_status = samd.GetUsbStatus(); - - if (charge_status != prev_charge_status && sServices) { - sServices->battery().Update(); - } - if (usb_status != prev_usb_status) { - events::Ui().Dispatch(SamdUsbStatusChanged{.new_status = usb_status}); - } -} - -auto SystemState::IdleCondition() -> bool { - auto db = sServices->database().lock(); - return sServices->gpios().IsLocked() && !(db && db->isUpdating()) && - audio::AudioState::is_in_state<audio::states::Standby>(); -} - -} // namespace system_fsm - -FSM_INITIAL_STATE(system_fsm::SystemState, system_fsm::states::Booting) |
