From d5d6e3993cd67238ff245446e69e2f200c3fd0e5 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Mon, 4 Sep 2023 16:17:55 +1000 Subject: Support changing max volume, persisted to nvs --- src/audio/i2s_audio_output.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/audio/i2s_audio_output.cpp') diff --git a/src/audio/i2s_audio_output.cpp b/src/audio/i2s_audio_output.cpp index 927f6541..68b03145 100644 --- a/src/audio/i2s_audio_output.cpp +++ b/src/audio/i2s_audio_output.cpp @@ -5,6 +5,7 @@ */ #include "i2s_audio_output.hpp" +#include #include #include @@ -48,9 +49,8 @@ I2SAudioOutput::I2SAudioOutput(drivers::IGpios& expander, dac_(std::move(dac)), current_config_(), left_difference_(0), - current_volume_(kDefaultVolume), - max_volume_(kLineLevelVolume) { - SetVolume(GetVolume()); + current_volume_(0), + max_volume_(0) { dac_->SetSource(stream()); } @@ -72,6 +72,18 @@ auto I2SAudioOutput::SetVolumeImbalance(int_fast8_t balance) -> void { SetVolume(GetVolume()); } +auto I2SAudioOutput::SetMaxVolume(uint16_t max) -> void { + max_volume_ = std::clamp(max, drivers::wm8523::kAbsoluteMinVolume, + drivers::wm8523::kAbsoluteMaxVolume); + SetVolume(GetVolume()); +} + +auto I2SAudioOutput::SetVolumeDb(uint16_t vol) -> void { + current_volume_ = + std::clamp(vol, drivers::wm8523::kAbsoluteMinVolume, max_volume_); + SetVolume(GetVolume()); +} + auto I2SAudioOutput::SetVolume(uint_fast8_t percent) -> void { percent = std::min(percent, 100); float new_value = static_cast(max_volume_) / 100 * percent; -- cgit v1.2.3