diff options
| author | jacqueline <me@jacqueline.id.au> | 2022-12-06 13:17:56 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2022-12-06 13:17:56 +1100 |
| commit | f35bb64c2b8dbb72fd15f1880e4d01d263660910 (patch) | |
| tree | 4696065116c21147da02b6e6470a6215b343081f /src/audio/include/i2s_audio_output.hpp | |
| parent | e0b2562cc4e0e5ae73efacddf68b83bd9fbb6acb (diff) | |
| download | tangara-fw-f35bb64c2b8dbb72fd15f1880e4d01d263660910.tar.gz | |
basic i2s output element
Diffstat (limited to 'src/audio/include/i2s_audio_output.hpp')
| -rw-r--r-- | src/audio/include/i2s_audio_output.hpp | 38 |
1 files changed, 27 insertions, 11 deletions
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 <cstdint> #include <memory> +#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<std::unique_ptr<I2SAudioOutput>, Error>; - I2SAudioOutput(std::unique_ptr<AudioDac>& dac, - audio_element_handle_t element); + I2SAudioOutput(drivers::GpioExpander* expander, + std::unique_ptr<drivers::AudioDac> 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<void, AudioProcessingError> override; + auto ProcessChunk(const cpp::span<std::byte>& chunk) + -> cpp::result<std::size_t, AudioProcessingError> override; + auto ProcessIdle() -> cpp::result<void, AudioProcessingError> override; + + I2SAudioOutput(const I2SAudioOutput&) = delete; + I2SAudioOutput& operator=(const I2SAudioOutput&) = delete; private: - std::unique_ptr<AudioDac> dac_; - bool is_soft_muted_ = false; + auto SetVolume(uint8_t volume) -> void; + auto SetSoftMute(bool enabled) -> void; + + drivers::GpioExpander* expander_; + std::unique_ptr<drivers::AudioDac> dac_; + + uint8_t volume_; + bool is_soft_muted_; }; -} // namespace drivers +} // namespace audio |
