summaryrefslogtreecommitdiff
path: root/src/audio
diff options
context:
space:
mode:
authorailurux <ailuruxx@gmail.com>2023-08-28 14:59:52 +1000
committerailurux <ailuruxx@gmail.com>2023-08-28 14:59:52 +1000
commitdb601935c6145445467692c0a4ff2b81e27cf6ce (patch)
treee2eed4a38abd03f14dba504ce5e8dedee0da6a12 /src/audio
parent6f4ace1dd4b9b34f95af1ba365b68624e209d147 (diff)
parent3a0c42f9240eedfbc6a1e94ad3a59c52664fb5b5 (diff)
downloadtangara-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.cpp14
-rw-r--r--src/audio/include/audio_events.hpp4
-rw-r--r--src/audio/include/audio_fsm.hpp3
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;