summaryrefslogtreecommitdiff
path: root/src/drivers/bluetooth.cpp
diff options
context:
space:
mode:
authorailurux <ailuruxx@gmail.com>2024-05-10 13:06:20 +1000
committerailurux <ailuruxx@gmail.com>2024-05-10 13:06:20 +1000
commit3f177cdb8880abf199f4445f1398cd69fb813892 (patch)
treee20de4949b1344c826e5af41ab701f3db75b21bc /src/drivers/bluetooth.cpp
parent8019c7691889cde4c3d40bbd78d485a92d713bbf (diff)
parente4ce7c4ac23402e09be8d6a52e0f739c0dff4ff0 (diff)
downloadtangara-fw-3f177cdb8880abf199f4445f1398cd69fb813892.tar.gz
Merge branch 'main' into file-browser
Diffstat (limited to 'src/drivers/bluetooth.cpp')
-rw-r--r--src/drivers/bluetooth.cpp19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/drivers/bluetooth.cpp b/src/drivers/bluetooth.cpp
index 5d1b35fa..fcb764f6 100644
--- a/src/drivers/bluetooth.cpp
+++ b/src/drivers/bluetooth.cpp
@@ -1,4 +1,4 @@
-#include "bluetooth.hpp"
+#include "drivers/bluetooth.hpp"
#include <stdint.h>
@@ -25,12 +25,11 @@
#include "freertos/portmacro.h"
#include "freertos/projdefs.h"
#include "freertos/timers.h"
-#include "sample.hpp"
#include "tinyfsm/include/tinyfsm.hpp"
-#include "bluetooth_types.hpp"
+#include "drivers/bluetooth_types.hpp"
+#include "drivers/nvs.hpp"
#include "memory_resource.hpp"
-#include "nvs.hpp"
#include "tasks.hpp"
namespace drivers {
@@ -39,6 +38,7 @@ namespace drivers {
DRAM_ATTR static StreamBufferHandle_t sStream = nullptr;
DRAM_ATTR static std::atomic<float> sVolumeFactor = 1.f;
+DRAM_ATTR static std::atomic<uint32_t> sSamplesUsed = 0;
static tasks::WorkerPool* sBgWorker;
@@ -74,6 +74,13 @@ IRAM_ATTR auto a2dp_data_cb(uint8_t* buf, int32_t buf_size) -> int32_t {
}
size_t bytes_received = xStreamBufferReceive(stream, buf, buf_size, 0);
+ size_t samples_received = bytes_received / 2;
+ if (UINT32_MAX - sSamplesUsed < samples_received) {
+ sSamplesUsed = samples_received - (UINT32_MAX - sSamplesUsed);
+ } else {
+ sSamplesUsed += samples_received;
+ }
+
// Apply software volume scaling.
int16_t* samples = reinterpret_cast<int16_t*>(buf);
float factor = sVolumeFactor.load();
@@ -166,6 +173,10 @@ auto Bluetooth::SetVolumeFactor(float f) -> void {
sVolumeFactor = f;
}
+auto Bluetooth::SamplesUsed() -> uint32_t {
+ return sSamplesUsed;
+}
+
auto Bluetooth::SetEventHandler(std::function<void(bluetooth::Event)> cb)
-> void {
auto lock = bluetooth::BluetoothState::lock();