|
|
|
@ -111,6 +111,15 @@ auto I2SAudioOutput::GetVolumePct() -> uint_fast8_t { |
|
|
|
|
return (current_volume_ - kMinVolume) * 100 / (max_volume_ - kMinVolume); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
auto I2SAudioOutput::SetVolumePct(uint_fast8_t val) -> bool { |
|
|
|
|
if (val > 100) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
uint16_t vol = (val * (max_volume_ - kMinVolume))/100 + kMinVolume; |
|
|
|
|
SetVolume(vol); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
auto I2SAudioOutput::GetVolumeDb() -> int_fast16_t { |
|
|
|
|
// Add two before dividing in order to round correctly.
|
|
|
|
|
return (static_cast<int>(current_volume_) - |
|
|
|
@ -118,6 +127,11 @@ auto I2SAudioOutput::GetVolumeDb() -> int_fast16_t { |
|
|
|
|
4; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
auto I2SAudioOutput::SetVolumeDb(int_fast16_t val) -> bool { |
|
|
|
|
SetVolume(val * 4 + static_cast<int>(drivers::wm8523::kLineLevelReferenceVolume) - 2); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
auto I2SAudioOutput::AdjustVolumeUp() -> bool { |
|
|
|
|
if (GetVolume() >= max_volume_) { |
|
|
|
|
return false; |
|
|
|
|