From 874218e3ff0ffd244936b3d56f1645efc3f9519f Mon Sep 17 00:00:00 2001 From: jacqueline Date: Mon, 15 Apr 2024 14:53:41 +1000 Subject: [PATCH] Fix some bt device issues - Don't allow adjusting volume if there's no device - Cap bt nvs values correctly - Persist bt volumes correctly even when the encoded for has a null byte (facepalm 4 me) --- src/audio/bt_audio_output.cpp | 4 ++-- src/drivers/nvs.cpp | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/audio/bt_audio_output.cpp b/src/audio/bt_audio_output.cpp index 8f2b8cf3..229a38bb 100644 --- a/src/audio/bt_audio_output.cpp +++ b/src/audio/bt_audio_output.cpp @@ -90,7 +90,7 @@ auto BluetoothAudioOutput::SetVolumeDb(int_fast16_t val) -> bool { } auto BluetoothAudioOutput::AdjustVolumeUp() -> bool { - if (volume_ == 100) { + if (volume_ == 100 || !bluetooth_.IsConnected()) { return false; } volume_++; @@ -99,7 +99,7 @@ auto BluetoothAudioOutput::AdjustVolumeUp() -> bool { } auto BluetoothAudioOutput::AdjustVolumeDown() -> bool { - if (volume_ == 0) { + if (volume_ == 0 || !bluetooth_.IsConnected()) { return false; } volume_--; diff --git a/src/drivers/nvs.cpp b/src/drivers/nvs.cpp index 33d92a9f..fbdb5286 100644 --- a/src/drivers/nvs.cpp +++ b/src/drivers/nvs.cpp @@ -273,7 +273,7 @@ auto NvsStorage::BluetoothVolume(const bluetooth::mac_addr_t& mac) -> uint8_t { // Note we don't set the dirty flag here, even though it's an LRU cache, so // that we can avoid constantly re-writing this setting to flash when the // user hasn't actually been changing their volume. - return bt_volumes_.Get(mac).value_or(10); + return bt_volumes_.Get(mac).value_or(50); } auto NvsStorage::BluetoothVolume(const bluetooth::mac_addr_t& mac, uint8_t vol) @@ -405,7 +405,7 @@ class VolumesParseClient : public cppbor::ParseClient { std::copy(data.begin(), data.end(), mac_->begin()); } else if (item->type() == cppbor::UINT && state_ == State::kPair) { vol_ = - std::clamp(item->asUint()->unsignedValue(), 0, UINT8_MAX); + std::clamp(item->asUint()->unsignedValue(), 0, UINT16_MAX); } return this; } @@ -470,7 +470,7 @@ auto NvsStorage::writeBtVolumes() -> void { cppbor::Uint{vol->second}}); } std::string encoded = enc.toString(); - nvs_set_str(handle_, kKeyBluetoothVolumes, encoded.c_str()); + nvs_set_blob(handle_, kKeyBluetoothVolumes, encoded.data(), encoded.size()); } } // namespace drivers