Your ROOT_URL in app.ini is https://git.ondrovo.com/ but you are visiting http://159.69.29.240:49153/MightyPork/tangara-fw/commit/a174d76aa16e09ddfc2ce67393c92ed947a817a5 You should set ROOT_URL correctly, otherwise the web may not work correctly.

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
custom
jacqueline 8 months ago
parent ca5e866a2f
commit a174d76aa1
  1. 9
      src/tangara/system_fsm/running.cpp
  2. 2
      src/tangara/system_fsm/system_events.hpp
  3. 6
      src/tangara/system_fsm/system_fsm.hpp

@ -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);

@ -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

@ -63,6 +63,7 @@ class SystemState : public tinyfsm::Fsm<SystemState> {
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_;

Loading…
Cancel
Save