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.cpp18
1 files changed, 15 insertions, 3 deletions
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 <stdint.h>
#include <algorithm>
#include <cstddef>
@@ -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<uint_fast8_t>(percent, 100);
float new_value = static_cast<float>(max_volume_) / 100 * percent;