summaryrefslogtreecommitdiff
path: root/src/audio/i2s_audio_output.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio/i2s_audio_output.cpp')
-rw-r--r--src/audio/i2s_audio_output.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/audio/i2s_audio_output.cpp b/src/audio/i2s_audio_output.cpp
index e77c7c92..fb52a7a8 100644
--- a/src/audio/i2s_audio_output.cpp
+++ b/src/audio/i2s_audio_output.cpp
@@ -48,6 +48,7 @@ I2SAudioOutput::I2SAudioOutput(StreamBufferHandle_t s,
: IAudioOutput(s),
expander_(expander),
dac_(std::move(dac)),
+ current_mode_(Modes::kOff),
current_config_(),
left_difference_(0),
current_volume_(0),
@@ -60,12 +61,18 @@ I2SAudioOutput::~I2SAudioOutput() {
dac_->SetSource(nullptr);
}
-auto I2SAudioOutput::SetInUse(bool in_use) -> void {
- if (in_use) {
- dac_->Start();
- } else {
+auto I2SAudioOutput::SetMode(Modes mode) -> void {
+ if (mode == current_mode_) {
+ return;
+ }
+ if (mode == Modes::kOff) {
dac_->Stop();
+ return;
+ } else if (current_mode_ == Modes::kOff) {
+ dac_->Start();
}
+ current_mode_ = mode;
+ dac_->SetPaused(mode == Modes::kOnPaused);
}
auto I2SAudioOutput::SetVolumeImbalance(int_fast8_t balance) -> void {