From 610991455d335663de1dd6c0c6a3e0247ffd46df Mon Sep 17 00:00:00 2001 From: jacqueline Date: Wed, 7 Jun 2023 09:50:25 +1000 Subject: R4 pre-emptive bringup Includes stripping out the IC-specific I2S stuff, and doing more manual volume control using pots --- src/audio/include/audio_fsm.hpp | 10 ++++++---- src/audio/include/audio_sink.hpp | 7 ++++++- src/audio/include/audio_task.hpp | 8 -------- src/audio/include/i2s_audio_output.hpp | 20 +++++++++++++++----- 4 files changed, 27 insertions(+), 18 deletions(-) (limited to 'src/audio/include') 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 +#include #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 { public: static auto Init(drivers::GpioExpander* gpio_expander, - std::weak_ptr, - std::weak_ptr) -> void; + std::weak_ptr) -> bool; virtual ~AudioState() {} @@ -41,7 +42,8 @@ class AudioState : public tinyfsm::Fsm { protected: static drivers::GpioExpander* sGpioExpander; - static std::weak_ptr sDac; + static std::shared_ptr sDac; + static std::shared_ptr sPots; static std::weak_ptr sDatabase; static std::unique_ptr 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& 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 -#include -#include - -#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 dac); + std::weak_ptr dac, + std::weak_ptr 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& 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 dac_; + std::shared_ptr dac_; + std::shared_ptr pots_; std::optional current_config_; + int_fast8_t left_difference_; + uint_fast8_t attenuation_; }; } // namespace audio -- cgit v1.2.3