diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-06-19 08:51:34 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-06-19 08:51:34 +1000 |
| commit | 6ff8b5886ef91ed46dba08686900d519f6c9c62d (patch) | |
| tree | 133daa91898e047fd93a5e83ba6990af2904e5a1 /src/audio/include | |
| parent | 4e5dba158367f9b8b440e6c5051c95d9c22b76d7 (diff) | |
| download | tangara-fw-6ff8b5886ef91ed46dba08686900d519f6c9c62d.tar.gz | |
Support playing tracks by track id
Diffstat (limited to 'src/audio/include')
| -rw-r--r-- | src/audio/include/audio_events.hpp | 2 | ||||
| -rw-r--r-- | src/audio/include/audio_fsm.hpp | 11 | ||||
| -rw-r--r-- | src/audio/include/fatfs_audio_input.hpp | 3 |
3 files changed, 14 insertions, 2 deletions
diff --git a/src/audio/include/audio_events.hpp b/src/audio/include/audio_events.hpp index eebf5efe..60a0740c 100644 --- a/src/audio/include/audio_events.hpp +++ b/src/audio/include/audio_events.hpp @@ -21,9 +21,9 @@ struct PlayFile : tinyfsm::Event { struct PlayTrack : tinyfsm::Event { database::TrackId id; std::optional<database::TrackData> data; - std::optional<database::TrackTags> tags; }; +struct InputFileOpened : tinyfsm::Event {}; struct InputFileFinished : tinyfsm::Event {}; struct AudioPipelineIdle : tinyfsm::Event {}; diff --git a/src/audio/include/audio_fsm.hpp b/src/audio/include/audio_fsm.hpp index 72654ab5..bd902706 100644 --- a/src/audio/include/audio_fsm.hpp +++ b/src/audio/include/audio_fsm.hpp @@ -38,10 +38,13 @@ class AudioState : public tinyfsm::Fsm<AudioState> { /* Fallback event handler. Does nothing. */ void react(const tinyfsm::Event& ev) {} + void react(const system_fsm::StorageMounted&); + virtual void react(const system_fsm::BootComplete&) {} virtual void react(const PlayTrack&) {} virtual void react(const PlayFile&) {} + virtual void react(const InputFileOpened&) {} virtual void react(const InputFileFinished&) {} virtual void react(const AudioPipelineIdle&) {} @@ -69,8 +72,10 @@ class Uninitialised : public AudioState { class Standby : public AudioState { public: - void react(const PlayTrack&) override {} + void react(const InputFileOpened&) override; + void react(const PlayTrack&) override; void react(const PlayFile&) override; + using AudioState::react; }; @@ -79,6 +84,10 @@ class Playback : public AudioState { void entry() override; void exit() override; + void react(const PlayTrack&) override; + void react(const PlayFile&) override; + + void react(const InputFileOpened&) override; void react(const InputFileFinished&) override; void react(const AudioPipelineIdle&) override; diff --git a/src/audio/include/fatfs_audio_input.hpp b/src/audio/include/fatfs_audio_input.hpp index f5a65d0d..ab392f54 100644 --- a/src/audio/include/fatfs_audio_input.hpp +++ b/src/audio/include/fatfs_audio_input.hpp @@ -7,6 +7,7 @@ #pragma once #include <cstdint> +#include <future> #include <memory> #include <string> #include <vector> @@ -33,6 +34,7 @@ class FatfsAudioInput : public IAudioElement { FatfsAudioInput(); ~FatfsAudioInput(); + auto OpenFile(std::future<std::optional<std::string>>&& path) -> void; auto OpenFile(const std::string& path) -> bool; auto NeedsToProcess() const -> bool override; @@ -47,6 +49,7 @@ class FatfsAudioInput : public IAudioElement { auto ContainerToStreamType(database::Encoding) -> std::optional<codecs::StreamType>; + std::optional<std::future<std::optional<std::string>>> pending_path_; FIL current_file_; bool is_file_open_; |
