summaryrefslogtreecommitdiff
path: root/src/audio/i2s_audio_output.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-04-21 15:27:57 +1000
committerjacqueline <me@jacqueline.id.au>2023-04-21 15:27:57 +1000
commit7083459cf3c62c32d0c039a4665e702d70a27bba (patch)
tree815757d591d8600469104398e95e80824bd94871 /src/audio/i2s_audio_output.cpp
parent130009eb142a5ce8bb6cf9cbb59d69a4d96ed5f9 (diff)
downloadtangara-fw-7083459cf3c62c32d0c039a4665e702d70a27bba.tar.gz
wrap driver instance ownership + di in a class
Diffstat (limited to 'src/audio/i2s_audio_output.cpp')
-rw-r--r--src/audio/i2s_audio_output.cpp22
1 files changed, 3 insertions, 19 deletions
diff --git a/src/audio/i2s_audio_output.cpp b/src/audio/i2s_audio_output.cpp
index e5c672f9..e69cc5ac 100644
--- a/src/audio/i2s_audio_output.cpp
+++ b/src/audio/i2s_audio_output.cpp
@@ -2,6 +2,7 @@
#include <algorithm>
#include <cstddef>
+#include <memory>
#include <variant>
#include "esp_err.h"
@@ -18,27 +19,10 @@ static const char* kTag = "I2SOUT";
namespace audio {
-auto I2SAudioOutput::create(drivers::GpioExpander* expander)
- -> cpp::result<std::unique_ptr<I2SAudioOutput>, Error> {
- // First, we need to perform initial configuration of the DAC chip.
- auto dac_result = drivers::AudioDac::create(expander);
- if (dac_result.has_error()) {
- ESP_LOGE(kTag, "failed to init dac: %d", dac_result.error());
- return cpp::fail(DAC_CONFIG);
- }
- std::unique_ptr<drivers::AudioDac> dac = std::move(dac_result.value());
-
- // Soft mute immediately, in order to minimise any clicks and pops caused by
- // the initial output element and pipeline configuration.
- // dac->WriteVolume(255);
- dac->WriteVolume(127); // for testing
-
- return std::make_unique<I2SAudioOutput>(expander, std::move(dac));
-}
-
I2SAudioOutput::I2SAudioOutput(drivers::GpioExpander* expander,
- std::unique_ptr<drivers::AudioDac> dac)
+ std::shared_ptr<drivers::AudioDac> dac)
: expander_(expander), dac_(std::move(dac)), current_config_() {
+ dac->WriteVolume(127); // for testing
dac_->SetSource(buffer());
}