diff options
| author | ailurux <ailuruxx@gmail.com> | 2023-08-28 14:59:52 +1000 |
|---|---|---|
| committer | ailurux <ailuruxx@gmail.com> | 2023-08-28 14:59:52 +1000 |
| commit | db601935c6145445467692c0a4ff2b81e27cf6ce (patch) | |
| tree | e2eed4a38abd03f14dba504ce5e8dedee0da6a12 /src/audio | |
| parent | 6f4ace1dd4b9b34f95af1ba365b68624e209d147 (diff) | |
| parent | 3a0c42f9240eedfbc6a1e94ad3a59c52664fb5b5 (diff) | |
| download | tangara-fw-db601935c6145445467692c0a4ff2b81e27cf6ce.tar.gz | |
Merge branch 'main' of git.sr.ht:~jacqueline/tangara-fw
Diffstat (limited to 'src/audio')
| -rw-r--r-- | src/audio/audio_fsm.cpp | 14 | ||||
| -rw-r--r-- | src/audio/include/audio_events.hpp | 4 | ||||
| -rw-r--r-- | src/audio/include/audio_fsm.hpp | 3 |
3 files changed, 20 insertions, 1 deletions
diff --git a/src/audio/audio_fsm.cpp b/src/audio/audio_fsm.cpp index e68eedaf..6cca8211 100644 --- a/src/audio/audio_fsm.cpp +++ b/src/audio/audio_fsm.cpp @@ -133,6 +133,12 @@ void Standby::react(const QueueUpdate& ev) { sFileSource->SetPath(db->GetTrackPath(*current_track)); } +void Standby::react(const TogglePlayPause& ev) { + if (sCurrentTrack) { + transit<Playback>(); + } +} + void Playback::entry() { ESP_LOGI(kTag, "beginning playback"); sOutput->SetInUse(true); @@ -142,8 +148,10 @@ void Playback::exit() { ESP_LOGI(kTag, "finishing playback"); // TODO(jacqueline): Second case where it's useful to wait for the i2s buffer // to drain. - vTaskDelay(pdMS_TO_TICKS(250)); + vTaskDelay(pdMS_TO_TICKS(10)); sOutput->SetInUse(false); + + events::System().Dispatch(PlaybackFinished{}); } void Playback::react(const QueueUpdate& ev) { @@ -168,6 +176,10 @@ void Playback::react(const QueueUpdate& ev) { sFileSource->SetPath(db->GetTrackPath(*current_track)); } +void Playback::react(const TogglePlayPause& ev) { + transit<Standby>(); +} + void Playback::react(const PlaybackUpdate& ev) { ESP_LOGI(kTag, "elapsed: %lu, total: %lu", ev.seconds_elapsed, ev.seconds_total); diff --git a/src/audio/include/audio_events.hpp b/src/audio/include/audio_events.hpp index 28e29863..8ee8b057 100644 --- a/src/audio/include/audio_events.hpp +++ b/src/audio/include/audio_events.hpp @@ -25,6 +25,8 @@ struct PlaybackUpdate : tinyfsm::Event { uint32_t seconds_total; }; +struct PlaybackFinished : tinyfsm::Event {}; + struct QueueUpdate : tinyfsm::Event { bool current_changed; }; @@ -35,6 +37,8 @@ struct PlayFile : tinyfsm::Event { struct VolumeChanged : tinyfsm::Event {}; +struct TogglePlayPause : tinyfsm::Event {}; + namespace internal { struct InputFileOpened : tinyfsm::Event {}; diff --git a/src/audio/include/audio_fsm.hpp b/src/audio/include/audio_fsm.hpp index 430bc298..cfa65551 100644 --- a/src/audio/include/audio_fsm.hpp +++ b/src/audio/include/audio_fsm.hpp @@ -57,6 +57,7 @@ class AudioState : public tinyfsm::Fsm<AudioState> { virtual void react(const PlayFile&) {} virtual void react(const QueueUpdate&) {} virtual void react(const PlaybackUpdate&) {} + virtual void react(const TogglePlayPause&) {} virtual void react(const internal::InputFileOpened&) {} virtual void react(const internal::InputFileClosed&) {} @@ -90,6 +91,7 @@ class Standby : public AudioState { void react(const PlayFile&) override; void react(const internal::InputFileOpened&) override; void react(const QueueUpdate&) override; + void react(const TogglePlayPause&) override; using AudioState::react; }; @@ -102,6 +104,7 @@ class Playback : public AudioState { void react(const PlayFile&) override; void react(const QueueUpdate&) override; void react(const PlaybackUpdate&) override; + void react(const TogglePlayPause&) override; void react(const internal::InputFileOpened&) override; void react(const internal::InputFileClosed&) override; |
