From f35bb64c2b8dbb72fd15f1880e4d01d263660910 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Tue, 6 Dec 2022 13:17:56 +1100 Subject: basic i2s output element --- src/audio/include/i2s_audio_output.hpp | 38 ++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 11 deletions(-) (limited to 'src/audio/include/i2s_audio_output.hpp') diff --git a/src/audio/include/i2s_audio_output.hpp b/src/audio/include/i2s_audio_output.hpp index cd542f71..4b4a458d 100644 --- a/src/audio/include/i2s_audio_output.hpp +++ b/src/audio/include/i2s_audio_output.hpp @@ -3,30 +3,46 @@ #include #include +#include "audio_element.hpp" #include "result.hpp" #include "dac.hpp" #include "gpio_expander.hpp" +#include "sys/_stdint.h" -namespace drivers { +namespace audio { -class I2SAudioOutput : public IAudioOutput { +class I2SAudioOutput : public IAudioElement { public: enum Error { DAC_CONFIG, I2S_CONFIG, STREAM_INIT }; - static auto create(GpioExpander* expander) + static auto create(drivers::GpioExpander* expander) -> cpp::result, Error>; - I2SAudioOutput(std::unique_ptr& dac, - audio_element_handle_t element); + I2SAudioOutput(drivers::GpioExpander* expander, + std::unique_ptr dac); ~I2SAudioOutput(); - virtual auto SetVolume(uint8_t volume) -> void; - virtual auto Configure(audio_element_info_t& info) -> void; - virtual auto SetSoftMute(bool enabled) -> void; + auto SetInputBuffer(MessageBufferHandle_t* in) -> void { input_buffer_ = in; } + + auto IdleTimeout() const -> TickType_t override; + auto ProcessStreamInfo(const StreamInfo& info) + -> cpp::result override; + auto ProcessChunk(const cpp::span& chunk) + -> cpp::result override; + auto ProcessIdle() -> cpp::result override; + + I2SAudioOutput(const I2SAudioOutput&) = delete; + I2SAudioOutput& operator=(const I2SAudioOutput&) = delete; private: - std::unique_ptr dac_; - bool is_soft_muted_ = false; + auto SetVolume(uint8_t volume) -> void; + auto SetSoftMute(bool enabled) -> void; + + drivers::GpioExpander* expander_; + std::unique_ptr dac_; + + uint8_t volume_; + bool is_soft_muted_; }; -} // namespace drivers +} // namespace audio -- cgit v1.2.3