From ca5e866a2ffff822b96ce12177c6d10aa04bd9c7 Mon Sep 17 00:00:00 2001 From: ailurux Date: Thu, 12 Sep 2024 21:28:50 +1000 Subject: [PATCH 1/2] Remove explicit opacity set on header --- lua/browser.lua | 1 - lua/file_browser.lua | 1 - 2 files changed, 2 deletions(-) diff --git a/lua/browser.lua b/lua/browser.lua index fb806adc..bd743152 100644 --- a/lua/browser.lua +++ b/lua/browser.lua @@ -42,7 +42,6 @@ return screen:new{ pad_left = 4, pad_right = 4, pad_bottom = 2, - bg_opa = lvgl.OPA(100), scrollbar_mode = lvgl.SCROLLBAR_MODE.OFF } theme.set_subject(header, "header") diff --git a/lua/file_browser.lua b/lua/file_browser.lua index 23d815c2..4371c8e2 100644 --- a/lua/file_browser.lua +++ b/lua/file_browser.lua @@ -43,7 +43,6 @@ return screen:new { pad_left = 4, pad_right = 4, pad_bottom = 2, - bg_opa = lvgl.OPA(100), scrollbar_mode = lvgl.SCROLLBAR_MODE.OFF } theme.set_subject(header, "header") From a174d76aa16e09ddfc2ce67393c92ed947a817a5 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Fri, 13 Sep 2024 10:12:40 +1000 Subject: [PATCH 2/2] Mount the SD card asynchronously when it becomes available Previously we were doing it synchronously, which led to some odd looking livelock stacktraces... we still don't have a consistent repro, but this at least makes the stack when we mount a lot more predictable --- src/tangara/system_fsm/running.cpp | 9 +++++---- src/tangara/system_fsm/system_events.hpp | 2 ++ src/tangara/system_fsm/system_fsm.hpp | 6 ++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/tangara/system_fsm/running.cpp b/src/tangara/system_fsm/running.cpp index 07166e2f..33c6c7dc 100644 --- a/src/tangara/system_fsm/running.cpp +++ b/src/tangara/system_fsm/running.cpp @@ -40,7 +40,7 @@ void Running::entry() { sUnmountTimer = xTimerCreate("unmount_timeout", kTicksBeforeUnmount, false, NULL, timer_callback); } - mountStorage(); + events::System().Dispatch(internal::Mount{}); } void Running::exit() { @@ -72,7 +72,8 @@ void Running::react(const SdDetectChanged& ev) { } if (ev.has_sd_card && !sStorage) { - mountStorage(); + events::System().Dispatch(internal::Mount{}); + return; } // Don't automatically unmount, since this event seems to occasionally happen @@ -120,7 +121,7 @@ void Running::react(const SamdUsbMscChanged& ev) { gpios.WriteSync(drivers::IGpios::Pin::kSdPowerEnable, 0); // Now it's ready for us. - mountStorage(); + events::System().Dispatch(internal::Mount{}); } } @@ -145,7 +146,7 @@ auto Running::updateSdState(drivers::SdState state) -> void { events::System().Dispatch(SdStateChanged{}); } -auto Running::mountStorage() -> void { +void Running::react(const internal::Mount&) { // Only mount our storage if we know it's not currently in use by the SAMD. if (sServices->samd().UsbMassStorage()) { updateSdState(drivers::SdState::kNotMounted); diff --git a/src/tangara/system_fsm/system_events.hpp b/src/tangara/system_fsm/system_events.hpp index 3452e58e..c93c14d5 100644 --- a/src/tangara/system_fsm/system_events.hpp +++ b/src/tangara/system_fsm/system_events.hpp @@ -82,6 +82,8 @@ struct SamdInterrupt : tinyfsm::Event {}; struct IdleTimeout : tinyfsm::Event {}; struct UnmountTimeout : tinyfsm::Event {}; +struct Mount : tinyfsm::Event {}; + } // namespace internal } // namespace system_fsm diff --git a/src/tangara/system_fsm/system_fsm.hpp b/src/tangara/system_fsm/system_fsm.hpp index 5c4157cd..40009781 100644 --- a/src/tangara/system_fsm/system_fsm.hpp +++ b/src/tangara/system_fsm/system_fsm.hpp @@ -63,6 +63,7 @@ class SystemState : public tinyfsm::Fsm { virtual void react(const audio::PlaybackUpdate&) {} virtual void react(const internal::IdleTimeout&) {} virtual void react(const internal::UnmountTimeout&) {} + virtual void react(const internal::Mount&) {} protected: auto IdleCondition() -> bool; @@ -101,16 +102,17 @@ class Running : public SystemState { void react(const audio::PlaybackUpdate&) override; void react(const database::event::UpdateFinished&) override; void react(const SamdUsbMscChanged&) override; - void react(const internal::UnmountTimeout&) override; void react(const StorageError&) override; + void react(const internal::UnmountTimeout&) override; + void react(const internal::Mount&) override; + using SystemState::react; private: auto checkIdle() -> void; auto updateSdState(drivers::SdState) -> void; - auto mountStorage() -> void; auto unmountStorage() -> void; bool storage_mounted_;