summaryrefslogtreecommitdiff
path: root/src/system_fsm/system_fsm.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-08-18 15:40:24 +1000
committerjacqueline <me@jacqueline.id.au>2023-08-18 15:40:24 +1000
commitcad70605401e8fa30811e8c68a0cc5c014438942 (patch)
tree42307c27b01ce80b1e9038dea6dca2d4aa94eae1 /src/system_fsm/system_fsm.cpp
parent697ec3c5843c66253f73572c26b9b4885680d56c (diff)
downloadtangara-fw-cad70605401e8fa30811e8c68a0cc5c014438942.tar.gz
Add interrupts for samd changes
Diffstat (limited to 'src/system_fsm/system_fsm.cpp')
-rw-r--r--src/system_fsm/system_fsm.cpp27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/system_fsm/system_fsm.cpp b/src/system_fsm/system_fsm.cpp
index 96e806f4..24f65a4f 100644
--- a/src/system_fsm/system_fsm.cpp
+++ b/src/system_fsm/system_fsm.cpp
@@ -13,6 +13,8 @@
#include "tag_parser.hpp"
#include "track_queue.hpp"
+static const char kTag[] = "system";
+
namespace system_fsm {
std::shared_ptr<drivers::Gpios> SystemState::sGpios;
@@ -33,11 +35,6 @@ 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>();
@@ -78,6 +75,26 @@ void SystemState::react(const internal::GpioInterrupt&) {
}
}
+void SystemState::react(const internal::SamdInterrupt&) {
+ auto prev_charge_status = sSamd->GetChargeStatus();
+ auto prev_usb_status = sSamd->GetUsbStatus();
+
+ sSamd->UpdateChargeStatus();
+ sSamd->UpdateUsbStatus();
+
+ auto charge_status = sSamd->GetChargeStatus();
+ auto usb_status = sSamd->GetUsbStatus();
+
+ if (charge_status != prev_charge_status) {
+ ChargingStatusChanged ev{};
+ events::System().Dispatch(ev);
+ events::Ui().Dispatch(ev);
+ }
+ if (usb_status != prev_usb_status) {
+ ESP_LOGI(kTag, "usb status changed");
+ }
+}
+
} // namespace system_fsm
FSM_INITIAL_STATE(system_fsm::SystemState, system_fsm::states::Booting)