summaryrefslogtreecommitdiff
path: root/src/audio/include
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-08-30 16:48:10 +1000
committerjacqueline <me@jacqueline.id.au>2023-08-30 16:48:10 +1000
commit320fdeb9d8355d3c361d5c6d60de8afc64501af9 (patch)
treef0d5a2ab82199c78ad6768c6b18ba1239a0b7ee4 /src/audio/include
parent4247c9fe7d25c921fbfc73fc50e849c8780e7ad6 (diff)
downloadtangara-fw-320fdeb9d8355d3c361d5c6d60de8afc64501af9.tar.gz
Use a service locator instead of passing around subsets of drivers between FSMs
Diffstat (limited to 'src/audio/include')
-rw-r--r--src/audio/include/audio_fsm.hpp14
-rw-r--r--src/audio/include/fatfs_audio_input.hpp4
-rw-r--r--src/audio/include/i2s_audio_output.hpp7
3 files changed, 8 insertions, 17 deletions
diff --git a/src/audio/include/audio_fsm.hpp b/src/audio/include/audio_fsm.hpp
index cfa65551..1376feae 100644
--- a/src/audio/include/audio_fsm.hpp
+++ b/src/audio/include/audio_fsm.hpp
@@ -11,6 +11,7 @@
#include <vector>
#include "audio_sink.hpp"
+#include "service_locator.hpp"
#include "tinyfsm.hpp"
#include "audio_decoder.hpp"
@@ -32,12 +33,6 @@ namespace audio {
class AudioState : public tinyfsm::Fsm<AudioState> {
public:
- static auto Init(drivers::IGpios* gpio_expander,
- std::weak_ptr<database::Database>,
- std::shared_ptr<database::ITagParser>,
- drivers::Bluetooth* bluetooth,
- TrackQueue* queue) -> bool;
-
virtual ~AudioState() {}
virtual void entry() {}
@@ -46,8 +41,6 @@ class AudioState : public tinyfsm::Fsm<AudioState> {
/* Fallback event handler. Does nothing. */
void react(const tinyfsm::Event& ev) {}
- void react(const system_fsm::StorageMounted&);
-
void react(const system_fsm::KeyUpChanged&);
void react(const system_fsm::KeyDownChanged&);
void react(const system_fsm::HasPhonesChanged&);
@@ -65,16 +58,13 @@ class AudioState : public tinyfsm::Fsm<AudioState> {
virtual void react(const internal::AudioPipelineIdle&) {}
protected:
- static drivers::IGpios* sIGpios;
- static std::shared_ptr<drivers::I2SDac> sDac;
- static std::weak_ptr<database::Database> sDatabase;
+ static std::shared_ptr<system_fsm::ServiceLocator> sServices;
static std::shared_ptr<FatfsAudioInput> sFileSource;
static std::unique_ptr<Decoder> sDecoder;
static std::shared_ptr<SampleConverter> sSampleConverter;
static std::shared_ptr<IAudioOutput> sOutput;
- static TrackQueue* sTrackQueue;
static std::optional<database::TrackId> sCurrentTrack;
};
diff --git a/src/audio/include/fatfs_audio_input.hpp b/src/audio/include/fatfs_audio_input.hpp
index da44d2ec..b67d29dc 100644
--- a/src/audio/include/fatfs_audio_input.hpp
+++ b/src/audio/include/fatfs_audio_input.hpp
@@ -30,7 +30,7 @@ namespace audio {
*/
class FatfsAudioInput : public IAudioSource {
public:
- explicit FatfsAudioInput(std::shared_ptr<database::ITagParser> tag_parser);
+ explicit FatfsAudioInput(database::ITagParser& tag_parser);
~FatfsAudioInput();
/*
@@ -53,7 +53,7 @@ class FatfsAudioInput : public IAudioSource {
auto ContainerToStreamType(database::Container)
-> std::optional<codecs::StreamType>;
- std::shared_ptr<database::ITagParser> tag_parser_;
+ database::ITagParser& tag_parser_;
std::mutex new_stream_mutex_;
std::shared_ptr<codecs::IStream> new_stream_;
diff --git a/src/audio/include/i2s_audio_output.hpp b/src/audio/include/i2s_audio_output.hpp
index 0068916e..fa09deef 100644
--- a/src/audio/include/i2s_audio_output.hpp
+++ b/src/audio/include/i2s_audio_output.hpp
@@ -19,7 +19,8 @@ namespace audio {
class I2SAudioOutput : public IAudioOutput {
public:
- I2SAudioOutput(drivers::IGpios* expander, std::weak_ptr<drivers::I2SDac> dac);
+ I2SAudioOutput(drivers::IGpios& expander,
+ std::unique_ptr<drivers::I2SDac> dac);
~I2SAudioOutput();
auto SetInUse(bool) -> void override;
@@ -37,8 +38,8 @@ class I2SAudioOutput : public IAudioOutput {
I2SAudioOutput& operator=(const I2SAudioOutput&) = delete;
private:
- drivers::IGpios* expander_;
- std::shared_ptr<drivers::I2SDac> dac_;
+ drivers::IGpios& expander_;
+ std::unique_ptr<drivers::I2SDac> dac_;
std::optional<Format> current_config_;
int_fast8_t left_difference_;