summaryrefslogtreecommitdiff
path: root/src/audio/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio/include')
-rw-r--r--src/audio/include/audio_fsm.hpp3
-rw-r--r--src/audio/include/audio_sink.hpp8
-rw-r--r--src/audio/include/bt_audio_output.hpp49
3 files changed, 54 insertions, 6 deletions
diff --git a/src/audio/include/audio_fsm.hpp b/src/audio/include/audio_fsm.hpp
index d10f31e1..5d44fcda 100644
--- a/src/audio/include/audio_fsm.hpp
+++ b/src/audio/include/audio_fsm.hpp
@@ -12,6 +12,7 @@
#include "audio_events.hpp"
#include "audio_task.hpp"
+#include "bt_audio_output.hpp"
#include "database.hpp"
#include "display.hpp"
#include "fatfs_audio_input.hpp"
@@ -33,6 +34,7 @@ class AudioState : public tinyfsm::Fsm<AudioState> {
static auto Init(drivers::IGpios* gpio_expander,
std::weak_ptr<database::Database>,
std::shared_ptr<database::ITagParser>,
+ drivers::Bluetooth* bluetooth,
TrackQueue* queue) -> bool;
virtual ~AudioState() {}
@@ -68,6 +70,7 @@ class AudioState : public tinyfsm::Fsm<AudioState> {
static std::unique_ptr<AudioTask> sTask;
static std::unique_ptr<FatfsAudioInput> sFileSource;
static std::unique_ptr<I2SAudioOutput> sI2SOutput;
+ static std::unique_ptr<BluetoothAudioOutput> sBtOutput;
static TrackQueue* sTrackQueue;
static std::optional<database::TrackId> sCurrentTrack;
diff --git a/src/audio/include/audio_sink.hpp b/src/audio/include/audio_sink.hpp
index 2fb4bf63..b5d6ef57 100644
--- a/src/audio/include/audio_sink.hpp
+++ b/src/audio/include/audio_sink.hpp
@@ -18,15 +18,11 @@ namespace audio {
class IAudioSink {
private:
- static const std::size_t kDrainBufferSize = 24 * 1024;
StreamBufferHandle_t stream_;
public:
- IAudioSink()
- : stream_(xStreamBufferCreateWithCaps(
- kDrainBufferSize,
- 1,
- MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT)) {}
+ IAudioSink(size_t buffer_size, uint32_t caps)
+ : stream_(xStreamBufferCreateWithCaps(buffer_size, 1, caps)) {}
virtual ~IAudioSink() { vStreamBufferDeleteWithCaps(stream_); }
diff --git a/src/audio/include/bt_audio_output.hpp b/src/audio/include/bt_audio_output.hpp
new file mode 100644
index 00000000..e11a5d44
--- /dev/null
+++ b/src/audio/include/bt_audio_output.hpp
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2023 jacqueline <me@jacqueline.id.au>
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#pragma once
+
+#include <sys/_stdint.h>
+#include <cstdint>
+#include <memory>
+#include <vector>
+
+#include "audio_element.hpp"
+#include "audio_sink.hpp"
+#include "bluetooth.hpp"
+#include "chunk.hpp"
+#include "result.hpp"
+
+#include "gpios.hpp"
+#include "i2s_dac.hpp"
+#include "stream_info.hpp"
+
+namespace audio {
+
+class BluetoothAudioOutput : public IAudioSink {
+ public:
+ BluetoothAudioOutput(drivers::Bluetooth* bt);
+ ~BluetoothAudioOutput();
+
+ auto SetInUse(bool) -> void override;
+
+ auto SetVolumeImbalance(int_fast8_t balance) -> void override;
+ auto SetVolume(uint_fast8_t percent) -> void override;
+ auto GetVolume() -> uint_fast8_t override;
+ auto AdjustVolumeUp() -> bool override;
+ auto AdjustVolumeDown() -> bool override;
+
+ auto PrepareFormat(const Format&) -> Format override;
+ auto Configure(const Format& format) -> void override;
+
+ BluetoothAudioOutput(const BluetoothAudioOutput&) = delete;
+ BluetoothAudioOutput& operator=(const BluetoothAudioOutput&) = delete;
+
+ private:
+ drivers::Bluetooth* bluetooth_;
+};
+
+} // namespace audio