diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-06-07 09:50:25 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-06-07 09:50:25 +1000 |
| commit | 610991455d335663de1dd6c0c6a3e0247ffd46df (patch) | |
| tree | 8022526de2d30ca39386cf72d6fb5752d0c22803 /src/audio/audio_fsm.cpp | |
| parent | d2e5d2ab3cff0723cd995b0fca62aeb2a681d32d (diff) | |
| download | tangara-fw-610991455d335663de1dd6c0c6a3e0247ffd46df.tar.gz | |
R4 pre-emptive bringup
Includes stripping out the IC-specific I2S stuff, and doing more manual
volume control using pots
Diffstat (limited to 'src/audio/audio_fsm.cpp')
| -rw-r--r-- | src/audio/audio_fsm.cpp | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/audio/audio_fsm.cpp b/src/audio/audio_fsm.cpp index 9c7af6fe..3ab8b6e8 100644 --- a/src/audio/audio_fsm.cpp +++ b/src/audio/audio_fsm.cpp @@ -5,18 +5,20 @@ */ #include "audio_fsm.hpp" +#include <memory> #include "audio_decoder.hpp" #include "audio_events.hpp" #include "audio_task.hpp" -#include "dac.hpp" #include "fatfs_audio_input.hpp" #include "i2s_audio_output.hpp" +#include "i2s_dac.hpp" #include "pipeline.hpp" namespace audio { drivers::GpioExpander* AudioState::sGpioExpander; -std::weak_ptr<drivers::AudioDac> AudioState::sDac; +std::shared_ptr<drivers::I2SDac> AudioState::sDac; +std::shared_ptr<drivers::DigitalPot> AudioState::sPots; std::weak_ptr<database::Database> AudioState::sDatabase; std::unique_ptr<FatfsAudioInput> AudioState::sFileSource; @@ -24,14 +26,19 @@ std::unique_ptr<I2SAudioOutput> AudioState::sI2SOutput; std::vector<std::unique_ptr<IAudioElement>> AudioState::sPipeline; auto AudioState::Init(drivers::GpioExpander* gpio_expander, - std::weak_ptr<drivers::AudioDac> dac, - std::weak_ptr<database::Database> database) -> void { + std::weak_ptr<database::Database> database) -> bool { sGpioExpander = gpio_expander; - sDac = dac; + + auto dac = drivers::I2SDac::create(gpio_expander); + if (!dac) { + return false; + } + sDac.reset(dac.value()); + sPots.reset(new drivers::DigitalPot(gpio_expander)); sDatabase = database; sFileSource.reset(new FatfsAudioInput()); - sI2SOutput.reset(new I2SAudioOutput(sGpioExpander, sDac)); + sI2SOutput.reset(new I2SAudioOutput(sGpioExpander, sDac, sPots)); // Perform initial pipeline configuration. // TODO(jacqueline): Factor this out once we have any kind of dynamic @@ -43,6 +50,8 @@ auto AudioState::Init(drivers::GpioExpander* gpio_expander, pipeline->AddInput(sFileSource.get()); task::StartPipeline(pipeline, sI2SOutput.get()); + + return true; } namespace states { |
