summaryrefslogtreecommitdiff
path: root/src/system_fsm/system_fsm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/system_fsm/system_fsm.cpp')
-rw-r--r--src/system_fsm/system_fsm.cpp53
1 files changed, 21 insertions, 32 deletions
diff --git a/src/system_fsm/system_fsm.cpp b/src/system_fsm/system_fsm.cpp
index d21e8bcb..e048cec7 100644
--- a/src/system_fsm/system_fsm.cpp
+++ b/src/system_fsm/system_fsm.cpp
@@ -9,6 +9,7 @@
#include "event_queue.hpp"
#include "gpios.hpp"
#include "relative_wheel.hpp"
+#include "service_locator.hpp"
#include "system_events.hpp"
#include "tag_parser.hpp"
#include "track_queue.hpp"
@@ -17,22 +18,8 @@ static const char kTag[] = "system";
namespace system_fsm {
-std::shared_ptr<drivers::Gpios> SystemState::sGpios;
-std::shared_ptr<drivers::Samd> SystemState::sSamd;
-std::shared_ptr<drivers::NvsStorage> SystemState::sNvs;
-
-std::shared_ptr<drivers::TouchWheel> SystemState::sTouch;
-std::shared_ptr<drivers::RelativeWheel> SystemState::sRelativeTouch;
-std::shared_ptr<drivers::AdcBattery> SystemState::sAdc;
-std::shared_ptr<battery::Battery> SystemState::sBattery;
-std::shared_ptr<drivers::SdStorage> SystemState::sStorage;
-std::shared_ptr<drivers::Display> SystemState::sDisplay;
-std::shared_ptr<drivers::Bluetooth> SystemState::sBluetooth;
-
-std::shared_ptr<database::Database> SystemState::sDatabase;
-std::shared_ptr<database::TagParserImpl> SystemState::sTagParser;
-
-std::shared_ptr<audio::TrackQueue> SystemState::sTrackQueue;
+std::shared_ptr<ServiceLocator> SystemState::sServices;
+std::unique_ptr<drivers::SdStorage> SystemState::sStorage;
console::AppConsole* SystemState::sAppConsole;
@@ -43,17 +30,18 @@ void SystemState::react(const FatalError& err) {
}
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);
- bool prev_has_headphones = !sGpios->Get(drivers::Gpios::Pin::kPhoneDetect);
+ auto& gpios = sServices->gpios();
+ bool prev_key_up = gpios.Get(drivers::Gpios::Pin::kKeyUp);
+ bool prev_key_down = gpios.Get(drivers::Gpios::Pin::kKeyDown);
+ bool prev_key_lock = gpios.Get(drivers::Gpios::Pin::kKeyLock);
+ bool prev_has_headphones = !gpios.Get(drivers::Gpios::Pin::kPhoneDetect);
- sGpios->Read();
+ gpios.Read();
- bool key_up = sGpios->Get(drivers::Gpios::Pin::kKeyUp);
- bool key_down = sGpios->Get(drivers::Gpios::Pin::kKeyDown);
- bool key_lock = sGpios->Get(drivers::Gpios::Pin::kKeyLock);
- bool has_headphones = !sGpios->Get(drivers::Gpios::Pin::kPhoneDetect);
+ bool key_up = gpios.Get(drivers::Gpios::Pin::kKeyUp);
+ bool key_down = gpios.Get(drivers::Gpios::Pin::kKeyDown);
+ bool key_lock = gpios.Get(drivers::Gpios::Pin::kKeyLock);
+ bool has_headphones = !gpios.Get(drivers::Gpios::Pin::kPhoneDetect);
if (key_up != prev_key_up) {
KeyUpChanged ev{.falling = prev_key_up};
@@ -77,14 +65,15 @@ void SystemState::react(const internal::GpioInterrupt&) {
}
void SystemState::react(const internal::SamdInterrupt&) {
- auto prev_charge_status = sSamd->GetChargeStatus();
- auto prev_usb_status = sSamd->GetUsbStatus();
+ auto& samd = sServices->samd();
+ auto prev_charge_status = samd.GetChargeStatus();
+ auto prev_usb_status = samd.GetUsbStatus();
- sSamd->UpdateChargeStatus();
- sSamd->UpdateUsbStatus();
+ samd.UpdateChargeStatus();
+ samd.UpdateUsbStatus();
- auto charge_status = sSamd->GetChargeStatus();
- auto usb_status = sSamd->GetUsbStatus();
+ auto charge_status = samd.GetChargeStatus();
+ auto usb_status = samd.GetUsbStatus();
if (charge_status != prev_charge_status) {
ChargingStatusChanged ev{};
@@ -97,7 +86,7 @@ void SystemState::react(const internal::SamdInterrupt&) {
}
auto SystemState::IdleCondition() -> bool {
- return !sGpios->Get(drivers::IGpios::Pin::kKeyLock) &&
+ return !sServices->gpios().Get(drivers::IGpios::Pin::kKeyLock) &&
audio::AudioState::is_in_state<audio::states::Standby>();
}