arduino-audio-tools
Loading...
Searching...
No Matches
AudioBLEStream.h
1#pragma once
2
3#include "AudioToolsConfig.h"
4#include "AudioTools/CoreAudio/AudioBasic/Collections/Vector.h"
5#include "AudioTools/CoreAudio/Buffers.h"
6#include "AudioTools/CoreAudio/AudioBasic/StrView.h"
7
8
9namespace audio_tools {
10
21public:
22 AudioBLEStream(int defaultMTU) { max_transfer_size = defaultMTU; };
23
24 virtual void end() = 0;
25
26 virtual bool connected() = 0;
27
29 if (is_audio_info_active && this->info != info) {
30 TRACED();
32 writeAudioInfoCharacteristic(info);
33 }
34 }
35
36 operator bool() { return connected(); }
37
38 void setServiceUUID(const char *uuid) { BLE_AUDIO_SERVICE_UUID = uuid; }
39
40 void setRxUUID(const char *uuid) { BLE_CH2_UUID = uuid; }
41
42 void setTxUUID(const char *uuid) { BLE_CH1_UUID = uuid; }
43
44 void setAudioInfoUUID(const char *uuid) { BLE_INFO_UUID = uuid; }
45
46 void setAudioInfoActive(bool flag) { is_audio_info_active = flag; }
47
48 void setFramed(bool flag) { is_framed = flag; }
49
50 StrView toStr(AudioInfo info) {
51 snprintf(audio_info_str, 40, "%d:%d:%d", info.sample_rate, info.channels,
52 info.bits_per_sample);
53 return StrView(audio_info_str);
54 }
55
56 AudioInfo toInfo(const uint8_t *str) {
57 AudioInfo result;
58 sscanf((char*)str,"%d:%d:%d", &result.sample_rate, &result.channels, &result.bits_per_sample);
59 return result;
60 }
61
62protected:
63 // disable copy constructor
64 AudioBLEStream(AudioBLEStream const &other) = delete;
65 // disable assign constructor
66 void operator=(AudioBLEStream const &other) = delete;
67 const char *ble_server_name = nullptr;
68 uint16_t max_transfer_size = 0;
69 bool is_started = false;
70 bool is_audio_info_active = false;
71 bool is_framed = false;
72 char audio_info_str[40];
73
74 // Bluetooth LE GATT UUIDs for the Nordic UART profile Change UUID here if
75 // required
76 const char *BLE_AUDIO_SERVICE_UUID = "6e400001-b5a3-f393-e0a9-e50e24dcca9e";
77 const char *BLE_CH1_UUID = "6e400002-b5a3-f393-e0a9-e50e24dcca9e"; // RX
78 const char *BLE_CH2_UUID = "6e400003-b5a3-f393-e0a9-e50e24dcca9e"; // TX
79 const char *BLE_INFO_UUID = "6e400004-b5a3-f393-e0a9-e50e24dcca9e";
80
81 virtual int getMTU() = 0;
82
83 // override to implement your own extended logic
84 virtual void setAudioInfo(const uint8_t *data, size_t size) {
85 if (is_audio_info_active) {
86 AudioInfo ai = toInfo(data);
87 setAudioInfo(ai);
88 }
89 }
90 // override to implement your own extended logic
91 virtual void writeAudioInfoCharacteristic(AudioInfo info) = 0;
92};
93
94} // namespace audio_tools
Transmit and receive data via BLE using a Serial API. The following additional experimental features ...
Definition AudioBLEStream.h:20
void setAudioInfo(AudioInfo info)
Defines the input AudioInfo.
Definition AudioBLEStream.h:28
Base class for all Audio Streams. It support the boolean operator to test if the object is ready with...
Definition BaseStream.h:122
virtual void setAudioInfo(AudioInfo newInfo) override
Defines the input AudioInfo.
Definition BaseStream.h:130
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10
Basic Audio information which drives e.g. I2S.
Definition AudioTypes.h:55