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/include | |
| 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/include')
| -rw-r--r-- | src/audio/include/audio_fsm.hpp | 10 | ||||
| -rw-r--r-- | src/audio/include/audio_sink.hpp | 7 | ||||
| -rw-r--r-- | src/audio/include/audio_task.hpp | 8 | ||||
| -rw-r--r-- | src/audio/include/i2s_audio_output.hpp | 20 |
4 files changed, 27 insertions, 18 deletions
diff --git a/src/audio/include/audio_fsm.hpp b/src/audio/include/audio_fsm.hpp index 7368cfc8..6274041c 100644 --- a/src/audio/include/audio_fsm.hpp +++ b/src/audio/include/audio_fsm.hpp @@ -5,15 +5,17 @@ */ #pragma once + #include <memory> +#include <vector> #include "audio_events.hpp" -#include "dac.hpp" #include "database.hpp" #include "display.hpp" #include "fatfs_audio_input.hpp" #include "gpio_expander.hpp" #include "i2s_audio_output.hpp" +#include "i2s_dac.hpp" #include "storage.hpp" #include "tinyfsm.hpp" @@ -24,8 +26,7 @@ namespace audio { class AudioState : public tinyfsm::Fsm<AudioState> { public: static auto Init(drivers::GpioExpander* gpio_expander, - std::weak_ptr<drivers::AudioDac>, - std::weak_ptr<database::Database>) -> void; + std::weak_ptr<database::Database>) -> bool; virtual ~AudioState() {} @@ -41,7 +42,8 @@ class AudioState : public tinyfsm::Fsm<AudioState> { protected: static drivers::GpioExpander* sGpioExpander; - static std::weak_ptr<drivers::AudioDac> sDac; + static std::shared_ptr<drivers::I2SDac> sDac; + static std::shared_ptr<drivers::DigitalPot> sPots; static std::weak_ptr<database::Database> sDatabase; static std::unique_ptr<FatfsAudioInput> sFileSource; diff --git a/src/audio/include/audio_sink.hpp b/src/audio/include/audio_sink.hpp index 331105af..2cc706ff 100644 --- a/src/audio/include/audio_sink.hpp +++ b/src/audio/include/audio_sink.hpp @@ -40,9 +40,14 @@ class IAudioSink { free(metadata_); } + virtual auto SetVolumeImbalance(int_fast8_t balance) -> void = 0; + virtual auto SetVolume(uint_fast8_t percent) -> void = 0; + virtual auto GetVolume() -> uint_fast8_t = 0; + virtual auto AdjustVolumeUp() -> void = 0; + virtual auto AdjustVolumeDown() -> void = 0; + virtual auto Configure(const StreamInfo::Format& format) -> bool = 0; virtual auto Send(const cpp::span<std::byte>& data) -> void = 0; - virtual auto Log() -> void {} auto buffer() -> StreamBufferHandle_t { return handle_; } }; diff --git a/src/audio/include/audio_task.hpp b/src/audio/include/audio_task.hpp index 298bd591..f997caee 100644 --- a/src/audio/include/audio_task.hpp +++ b/src/audio/include/audio_task.hpp @@ -6,16 +6,8 @@ #pragma once -#include <memory> -#include <optional> -#include <string> - -#include "audio_element.hpp" #include "audio_sink.hpp" -#include "dac.hpp" -#include "freertos/portmacro.h" #include "pipeline.hpp" -#include "stream_buffer.hpp" namespace audio { diff --git a/src/audio/include/i2s_audio_output.hpp b/src/audio/include/i2s_audio_output.hpp index 46c3ada8..20980573 100644 --- a/src/audio/include/i2s_audio_output.hpp +++ b/src/audio/include/i2s_audio_output.hpp @@ -15,8 +15,9 @@ #include "chunk.hpp" #include "result.hpp" -#include "dac.hpp" +#include "digital_pot.hpp" #include "gpio_expander.hpp" +#include "i2s_dac.hpp" #include "stream_info.hpp" namespace audio { @@ -24,23 +25,32 @@ namespace audio { class I2SAudioOutput : public IAudioSink { public: I2SAudioOutput(drivers::GpioExpander* expander, - std::weak_ptr<drivers::AudioDac> dac); + std::weak_ptr<drivers::I2SDac> dac, + std::weak_ptr<drivers::DigitalPot> pots); ~I2SAudioOutput(); + auto SetVolumeImbalance(int_fast8_t balance) -> void override; + auto SetVolume(uint_fast8_t percent) -> void override; + auto GetVolume() -> uint_fast8_t override; + auto AdjustVolumeUp() -> void override; + auto AdjustVolumeDown() -> void override; + auto Configure(const StreamInfo::Format& format) -> bool override; auto Send(const cpp::span<std::byte>& data) -> void override; - auto Log() -> void override; I2SAudioOutput(const I2SAudioOutput&) = delete; I2SAudioOutput& operator=(const I2SAudioOutput&) = delete; private: - auto SetVolume(uint8_t volume) -> void; + auto GetAdjustedMaxAttenuation() -> int_fast8_t; drivers::GpioExpander* expander_; - std::shared_ptr<drivers::AudioDac> dac_; + std::shared_ptr<drivers::I2SDac> dac_; + std::shared_ptr<drivers::DigitalPot> pots_; std::optional<StreamInfo::Pcm> current_config_; + int_fast8_t left_difference_; + uint_fast8_t attenuation_; }; } // namespace audio |
