summaryrefslogtreecommitdiff
path: root/src/system_fsm
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2024-03-21 11:51:48 +1100
committerjacqueline <me@jacqueline.id.au>2024-03-21 11:51:48 +1100
commitdadac304dd930ddf4c5aebcc069c5d9f881b2b60 (patch)
tree70613be70cffae36b005d89c28b86e2bd3301f2f /src/system_fsm
parent7305820aa9657e71153ada579ad67cf8bcbba6be (diff)
downloadtangara-fw-dadac304dd930ddf4c5aebcc069c5d9f881b2b60.tar.gz
Add very basic usb msc ui
Diffstat (limited to 'src/system_fsm')
-rw-r--r--src/system_fsm/idle.cpp10
-rw-r--r--src/system_fsm/running.cpp6
2 files changed, 14 insertions, 2 deletions
diff --git a/src/system_fsm/idle.cpp b/src/system_fsm/idle.cpp
index b6bb2572..980f0c94 100644
--- a/src/system_fsm/idle.cpp
+++ b/src/system_fsm/idle.cpp
@@ -13,6 +13,7 @@
#include "audio_fsm.hpp"
#include "event_queue.hpp"
+#include "samd.hpp"
#include "storage.hpp"
#include "system_events.hpp"
#include "system_fsm.hpp"
@@ -40,7 +41,7 @@ void Idle::entry() {
events::Audio().Dispatch(OnIdle{});
events::Ui().Dispatch(OnIdle{});
- sIdleTimeout = xTimerCreate("idle_timeout", kTicksBeforeSleep, false, NULL,
+ sIdleTimeout = xTimerCreate("idle_timeout", kTicksBeforeSleep, true, NULL,
timer_callback);
xTimerStart(sIdleTimeout, portMAX_DELAY);
}
@@ -63,6 +64,13 @@ void Idle::react(const internal::IdleTimeout& ev) {
transit<Running>();
return;
}
+ auto s = static_cast<int>(sServices->samd().GetUsbStatus());
+ ESP_LOGI(kTag, "usb status is %i", s);
+ if (sServices->samd().GetUsbStatus() != drivers::Samd::UsbStatus::kDetached) {
+ // Stay powered on if we're plugged in, in order to charge faster, sync
+ // files, flash updates, etc.
+ return;
+ }
ESP_LOGI(kTag, "system shutting down");
// FIXME: It would be neater to just free a bunch of our pointers, deinit the
diff --git a/src/system_fsm/running.cpp b/src/system_fsm/running.cpp
index d1d02fab..d80809e6 100644
--- a/src/system_fsm/running.cpp
+++ b/src/system_fsm/running.cpp
@@ -41,7 +41,11 @@ void Running::entry() {
sUnmountTimer = xTimerCreate("unmount_timeout", kTicksBeforeUnmount, false,
NULL, timer_callback);
}
- mountStorage();
+ // Only mount our storage immediately if we know it's not currently in use
+ // by the SAMD.
+ if (!sServices->samd().UsbMassStorage()) {
+ mountStorage();
+ }
}
void Running::exit() {