summaryrefslogtreecommitdiff
path: root/src/audio/bt_audio_output.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio/bt_audio_output.cpp')
-rw-r--r--src/audio/bt_audio_output.cpp24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/audio/bt_audio_output.cpp b/src/audio/bt_audio_output.cpp
index 04daf71f..7d6bade2 100644
--- a/src/audio/bt_audio_output.cpp
+++ b/src/audio/bt_audio_output.cpp
@@ -9,6 +9,7 @@
#include <algorithm>
#include <cstddef>
#include <cstdint>
+#include <cmath>
#include <memory>
#include <variant>
@@ -54,11 +55,30 @@ auto BluetoothAudioOutput::GetVolume() -> uint16_t {
}
auto BluetoothAudioOutput::GetVolumePct() -> uint_fast8_t {
- return static_cast<uint_fast8_t>(static_cast<int>(volume_) * 100 / 0x7f);
+ return static_cast<uint_fast8_t>(round(static_cast<int>(volume_) * 100.0 / 0x7f));
+}
+
+auto BluetoothAudioOutput::SetVolumePct(uint_fast8_t val) -> bool {
+ if (val > 100) {
+ return false;
+ }
+ uint16_t vol = (val * (0x7f))/100;
+ SetVolume(vol);
+ return true;
}
auto BluetoothAudioOutput::GetVolumeDb() -> int_fast16_t {
- return 0;
+ double pct = GetVolumePct()/100.0;
+ if (pct <= 0) {
+ pct = 0.01;
+ }
+ int_fast16_t db = log(pct) * 20;
+ return db;
+}
+
+auto BluetoothAudioOutput::SetVolumeDb(int_fast16_t val) -> bool {
+ double pct = exp(val / 20.0) * 100;
+ return SetVolumePct(pct);
}
auto BluetoothAudioOutput::AdjustVolumeUp() -> bool {