arduino-audio-tools
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
AudioBLEServer Class Reference

A simple BLE server that implements the serial protocol, so that it can be used to send and recevie audio. In BLE terminologiy this is a Peripheral. This implementation uses the ArduinoBLE library! This is working only correctly if the client sets the max MTU to a value >= 256. Otherwise some of the transmitted information gets silently dropped. More...

#include <AudioBLEServer.h>

Inheritance diagram for AudioBLEServer:
AudioBLEStream AudioBLEStream AudioStream AudioStream BaseStream AudioInfoSupport AudioInfoSource BaseStream AudioInfoSupport AudioInfoSource Stream Stream Print Print

Public Member Functions

 AudioBLEServer (int mtu=0)
 
 AudioBLEServer (int mtu=517)
 
virtual void addNotifyAudioChange (AudioInfoSupport &bi)
 Adds target to be notified about audio changes.
 
virtual AudioInfo audioInfo () override
 provides the actual input AudioInfo
 
virtual AudioInfo audioInfoOut ()
 
int available () override
 
int available () override
 
int availableForWrite () override
 
int availableForWrite () override
 
virtual bool begin ()
 
bool begin (const char *name)
 
bool begin (const char *name)
 
virtual void clearNotifyAudioChange ()
 Deletes all change notify subscriptions.
 
bool connected () override
 
bool connected () override
 
void end () override
 
void end () override
 
virtual void flush () override
 
bool isNotifyActive ()
 Checks if the automatic AudioInfo update is active.
 
 operator bool ()
 
size_t readBytes (uint8_t *data, size_t len) override
 
size_t readBytes (uint8_t *data, size_t len) override
 
virtual size_t readSilence (uint8_t *buffer, size_t length)
 Source to generate silence: just sets the buffer to 0.
 
virtual bool removeNotifyAudioChange (AudioInfoSupport &bi)
 Removes a target in order not to be notified about audio changes.
 
void setAudioInfo (AudioInfo info)
 Defines the input AudioInfo.
 
void setAudioInfoActive (bool flag)
 
void setAudioInfoUUID (const char *uuid)
 
void setFramed (bool flag)
 
void setNotifyActive (bool flag)
 Deactivate/Reactivate automatic AudioInfo updates: (default is active)
 
void setRxUUID (const char *uuid)
 
void setServiceUUID (const char *uuid)
 
void setTxUUID (const char *uuid)
 
void setWriteBufferSize (int size)
 
AudioInfo toInfo (const uint8_t *str)
 
StrView toStr (AudioInfo info)
 
size_t write (const uint8_t *data, size_t dataSize) override
 
size_t write (const uint8_t *data, size_t len) override
 
virtual size_t write (uint8_t ch) override
 
virtual void writeSilence (size_t len)
 Writes len bytes of silence (=0).
 

Protected Member Functions

bool checkCentralConnected ()
 
int getMTU () override
 
int getMTU () override
 
size_t getReadSize (size_t dataSize)
 
size_t getReadSize (size_t dataSize)
 
virtual int not_supported (int out, const char *msg="")
 
void notifyAudioChange (AudioInfo info)
 
void onConnect (BLEDevice device)
 
void onConnect (BLEServer *pServer) override
 
void onDisconnect (BLEDevice device)
 
void onDisconnect (BLEServer *pServer) override
 
void onRead (BLECharacteristic *pCharacteristic) override
 provide the next batch of audio data
 
void onRead (BLECharacteristic characteristic)
 provide the next batch of audio data
 
void onWrite (BLECharacteristic *pCharacteristic) override
 store the next batch of data
 
void onWrite (BLECharacteristic characteristic)
 store the next batch of data
 
virtual void receiveAudio (const uint8_t *data, size_t size)
 
virtual void receiveAudio (const uint8_t *data, size_t size)
 
void refillReadBuffer ()
 
virtual void setAudioInfo (const uint8_t *data, size_t size)
 
void setupBLEService ()
 
void setupBLEService ()
 
void setupRXBuffer ()
 
void setupRXBuffer ()
 
void setupTXBuffer ()
 
void setupTXBuffer ()
 
void writeAudioInfoCharacteristic (AudioInfo info)
 
void writeAudioInfoCharacteristic (AudioInfo info)
 

Static Protected Member Functions

static void bleOnRead (BLEDevice device, BLECharacteristic characteristic)
 
static void bleOnWrite (BLEDevice device, BLECharacteristic characteristic)
 
static void blePeripheralConnectHandler (BLEDevice device)
 
static void blePeripheralDisconnectHandler (BLEDevice device)
 

Protected Attributes

int _timeout = 10
 
char audio_info_str [40]
 
const charBLE_AUDIO_SERVICE_UUID = "6e400001-b5a3-f393-e0a9-e50e24dcca9e"
 
const charBLE_CH1_UUID = "6e400002-b5a3-f393-e0a9-e50e24dcca9e"
 
const charBLE_CH2_UUID = "6e400003-b5a3-f393-e0a9-e50e24dcca9e"
 
const charBLE_INFO_UUID = "6e400004-b5a3-f393-e0a9-e50e24dcca9e"
 
const charble_server_name = nullptr
 
BLEDevice central
 
BLECharacteristic ch01_char {BLE_CH1_UUID, BLERead, getMTU()}
 
BLECharacteristicch01_char
 
BLEDescriptor ch01_desc {"2901", "channel 1"}
 
BLECharacteristic ch02_char {BLE_CH2_UUID, BLEWrite, getMTU()}
 
BLECharacteristicch02_char
 
BLEDescriptor ch02_desc {"2901", "channel 2"}
 
AudioInfo info
 
BLECharacteristic info_char
 
BLECharacteristicinfo_char
 
BLEDescriptor info_desc {"2901", "info"}
 
bool is_audio_info_active = false
 
bool is_framed = false
 
bool is_notify_active = true
 
bool is_started = false
 
uint16_t max_transfer_size = 0
 
Vector< AudioInfoSupport * > notify_vector
 
BLEAdvertisingp_advertising = nullptr
 
BLEServerp_server = nullptr
 
BLEServicep_service = nullptr
 
RingBuffer< uint8_treceive_buffer {0}
 
RingBuffer< uint16_treceive_sizes {0}
 
BLEService service {BLE_AUDIO_SERVICE_UUID}
 
RingBuffer< uint8_ttmp_in {0}
 
RingBuffer< uint8_ttmp_out {0}
 
RingBuffer< uint8_ttransmit_buffer {0}
 
RingBuffer< uint16_ttransmit_buffer_sizes {0}
 
int write_buffer_size = MAX_SINGLE_CHARS
 

Detailed Description

A simple BLE server that implements the serial protocol, so that it can be used to send and recevie audio. In BLE terminologiy this is a Peripheral. This implementation uses the ArduinoBLE library! This is working only correctly if the client sets the max MTU to a value >= 256. Otherwise some of the transmitted information gets silently dropped.

A simple BLE server that implements the serial protocol, so that it can be used to send and recevie audio. In BLE terminologiy this is a Peripheral.

Author
Phil Schatzmann

Constructor & Destructor Documentation

◆ AudioBLEServer() [1/2]

AudioBLEServer ( int  mtu = 0)
inline

◆ AudioBLEServer() [2/2]

AudioBLEServer ( int  mtu = 517)
inline

Member Function Documentation

◆ addNotifyAudioChange()

virtual void addNotifyAudioChange ( AudioInfoSupport bi)
inlinevirtualinherited

◆ audioInfo()

virtual AudioInfo audioInfo ( )
inlineoverridevirtualinherited

◆ audioInfoOut()

virtual AudioInfo audioInfoOut ( )
inlinevirtualinherited

◆ available() [1/2]

int available ( )
inlineoverridevirtual

Reimplemented from BaseStream.

◆ available() [2/2]

int available ( )
inlineoverridevirtual

Reimplemented from BaseStream.

◆ availableForWrite() [1/2]

int availableForWrite ( )
inlineoverridevirtual

Reimplemented from BaseStream.

◆ availableForWrite() [2/2]

int availableForWrite ( )
inlineoverridevirtual

Reimplemented from BaseStream.

◆ begin() [1/3]

virtual bool begin ( )
inlinevirtualinherited

◆ begin() [2/3]

bool begin ( const char name)
inline

◆ begin() [3/3]

bool begin ( const char name)
inline

◆ bleOnRead()

static void bleOnRead ( BLEDevice  device,
BLECharacteristic  characteristic 
)
inlinestaticprotected

◆ bleOnWrite()

static void bleOnWrite ( BLEDevice  device,
BLECharacteristic  characteristic 
)
inlinestaticprotected

◆ blePeripheralConnectHandler()

static void blePeripheralConnectHandler ( BLEDevice  device)
inlinestaticprotected

◆ blePeripheralDisconnectHandler()

static void blePeripheralDisconnectHandler ( BLEDevice  device)
inlinestaticprotected

◆ checkCentralConnected()

bool checkCentralConnected ( )
inlineprotected

◆ clearNotifyAudioChange()

virtual void clearNotifyAudioChange ( )
inlinevirtualinherited

Deletes all change notify subscriptions.

Reimplemented in RTSPClient< TcpClient, UdpSocket >.

◆ connected() [1/2]

bool connected ( )
inlineoverridevirtual

Implements AudioBLEStream.

◆ connected() [2/2]

bool connected ( )
inlineoverridevirtual

Implements AudioBLEStream.

◆ end() [1/2]

void end ( )
inlineoverridevirtual

Implements AudioBLEStream.

◆ end() [2/2]

void end ( )
inlineoverridevirtual

Implements AudioBLEStream.

◆ flush()

virtual void flush ( )
inlineoverridevirtualinherited

◆ getMTU() [1/2]

int getMTU ( )
inlineoverrideprotectedvirtual

Implements AudioBLEStream.

◆ getMTU() [2/2]

int getMTU ( )
inlineoverrideprotectedvirtual

Implements AudioBLEStream.

◆ getReadSize() [1/2]

size_t getReadSize ( size_t  dataSize)
inlineprotected

◆ getReadSize() [2/2]

size_t getReadSize ( size_t  dataSize)
inlineprotected

◆ isNotifyActive()

bool isNotifyActive ( )
inlineinherited

Checks if the automatic AudioInfo update is active.

◆ not_supported()

virtual int not_supported ( int  out,
const char msg = "" 
)
inlineprotectedvirtualinherited

◆ notifyAudioChange()

void notifyAudioChange ( AudioInfo  info)
inlineprotectedinherited

◆ onConnect() [1/2]

void onConnect ( BLEDevice  device)
inlineprotected

◆ onConnect() [2/2]

void onConnect ( BLEServer pServer)
inlineoverrideprotected

◆ onDisconnect() [1/2]

void onDisconnect ( BLEDevice  device)
inlineprotected

◆ onDisconnect() [2/2]

void onDisconnect ( BLEServer pServer)
inlineoverrideprotected

◆ onRead() [1/2]

void onRead ( BLECharacteristic pCharacteristic)
inlineoverrideprotected

provide the next batch of audio data

◆ onRead() [2/2]

void onRead ( BLECharacteristic  characteristic)
inlineprotected

provide the next batch of audio data

◆ onWrite() [1/2]

void onWrite ( BLECharacteristic pCharacteristic)
inlineoverrideprotected

store the next batch of data

◆ onWrite() [2/2]

void onWrite ( BLECharacteristic  characteristic)
inlineprotected

store the next batch of data

◆ operator bool()

operator bool ( )
inlinevirtualinherited

Reimplemented from AudioStream.

◆ readBytes() [1/2]

size_t readBytes ( uint8_t data,
size_t  len 
)
inlineoverridevirtual

Reimplemented from AudioStream.

◆ readBytes() [2/2]

size_t readBytes ( uint8_t data,
size_t  len 
)
inlineoverridevirtual

Reimplemented from AudioStream.

◆ readSilence()

virtual size_t readSilence ( uint8_t buffer,
size_t  length 
)
inlinevirtualinherited

Source to generate silence: just sets the buffer to 0.

◆ receiveAudio() [1/2]

virtual void receiveAudio ( const uint8_t data,
size_t  size 
)
inlineprotectedvirtual

◆ receiveAudio() [2/2]

virtual void receiveAudio ( const uint8_t data,
size_t  size 
)
inlineprotectedvirtual

◆ refillReadBuffer()

void refillReadBuffer ( )
inlineprotectedinherited

◆ removeNotifyAudioChange()

virtual bool removeNotifyAudioChange ( AudioInfoSupport bi)
inlinevirtualinherited

Removes a target in order not to be notified about audio changes.

Reimplemented in RTSPClient< TcpClient, UdpSocket >.

◆ setAudioInfo() [1/2]

void setAudioInfo ( AudioInfo  info)
inlinevirtualinherited

Defines the input AudioInfo.

Reimplemented from AudioStream.

◆ setAudioInfo() [2/2]

virtual void setAudioInfo ( const uint8_t data,
size_t  size 
)
inlineprotectedvirtualinherited

◆ setAudioInfoActive()

void setAudioInfoActive ( bool  flag)
inlineinherited

◆ setAudioInfoUUID()

void setAudioInfoUUID ( const char uuid)
inlineinherited

◆ setFramed()

void setFramed ( bool  flag)
inlineinherited

◆ setNotifyActive()

void setNotifyActive ( bool  flag)
inlineinherited

Deactivate/Reactivate automatic AudioInfo updates: (default is active)

◆ setRxUUID()

void setRxUUID ( const char uuid)
inlineinherited

◆ setServiceUUID()

void setServiceUUID ( const char uuid)
inlineinherited

◆ setTxUUID()

void setTxUUID ( const char uuid)
inlineinherited

◆ setupBLEService() [1/2]

void setupBLEService ( )
inlineprotected

◆ setupBLEService() [2/2]

void setupBLEService ( )
inlineprotected

◆ setupRXBuffer() [1/2]

void setupRXBuffer ( )
inlineprotected

◆ setupRXBuffer() [2/2]

void setupRXBuffer ( )
inlineprotected

◆ setupTXBuffer() [1/2]

void setupTXBuffer ( )
inlineprotected

◆ setupTXBuffer() [2/2]

void setupTXBuffer ( )
inlineprotected

◆ setWriteBufferSize()

void setWriteBufferSize ( int  size)
inlineinherited

◆ toInfo()

AudioInfo toInfo ( const uint8_t str)
inlineinherited

◆ toStr()

StrView toStr ( AudioInfo  info)
inlineinherited

◆ write() [1/3]

size_t write ( const uint8_t data,
size_t  dataSize 
)
inlineoverridevirtual

Reimplemented from AudioStream.

◆ write() [2/3]

size_t write ( const uint8_t data,
size_t  len 
)
inlineoverridevirtual

Reimplemented from AudioStream.

◆ write() [3/3]

virtual size_t write ( uint8_t  ch)
inlineoverridevirtualinherited

◆ writeAudioInfoCharacteristic() [1/2]

void writeAudioInfoCharacteristic ( AudioInfo  info)
inlineprotectedvirtual

Implements AudioBLEStream.

◆ writeAudioInfoCharacteristic() [2/2]

void writeAudioInfoCharacteristic ( AudioInfo  info)
inlineprotectedvirtual

Implements AudioBLEStream.

◆ writeSilence()

virtual void writeSilence ( size_t  len)
inlinevirtualinherited

Writes len bytes of silence (=0).

Member Data Documentation

◆ _timeout

int _timeout = 10
protectedinherited

◆ audio_info_str

char audio_info_str[40]
protectedinherited

◆ BLE_AUDIO_SERVICE_UUID

const char* BLE_AUDIO_SERVICE_UUID = "6e400001-b5a3-f393-e0a9-e50e24dcca9e"
protectedinherited

◆ BLE_CH1_UUID

const char* BLE_CH1_UUID = "6e400002-b5a3-f393-e0a9-e50e24dcca9e"
protectedinherited

◆ BLE_CH2_UUID

const char* BLE_CH2_UUID = "6e400003-b5a3-f393-e0a9-e50e24dcca9e"
protectedinherited

◆ BLE_INFO_UUID

const char* BLE_INFO_UUID = "6e400004-b5a3-f393-e0a9-e50e24dcca9e"
protectedinherited

◆ ble_server_name

const char* ble_server_name = nullptr
protectedinherited

◆ central

BLEDevice central
protected

◆ ch01_char [1/2]

BLECharacteristic ch01_char {BLE_CH1_UUID, BLERead, getMTU()}
protected

◆ ch01_char [2/2]

BLECharacteristic* ch01_char
protected

◆ ch01_desc

BLEDescriptor ch01_desc {"2901", "channel 1"}
protected

◆ ch02_char [1/2]

BLECharacteristic ch02_char {BLE_CH2_UUID, BLEWrite, getMTU()}
protected

◆ ch02_char [2/2]

BLECharacteristic* ch02_char
protected

◆ ch02_desc

BLEDescriptor ch02_desc {"2901", "channel 2"}
protected

◆ info

AudioInfo info
protectedinherited

◆ info_char [1/2]

BLECharacteristic info_char
protected
Initial value:
80}
const char * BLE_INFO_UUID
Definition AudioBLEStream.h:79
size_t writeData(Print *p_out, T *data, int samples, int maxSamples=512)
Definition AudioTypes.h:512

◆ info_char [2/2]

BLECharacteristic* info_char
protected

◆ info_desc

BLEDescriptor info_desc {"2901", "info"}
protected

◆ is_audio_info_active

bool is_audio_info_active = false
protectedinherited

◆ is_framed

bool is_framed = false
protectedinherited

◆ is_notify_active

bool is_notify_active = true
protectedinherited

◆ is_started

bool is_started = false
protectedinherited

◆ max_transfer_size

uint16_t max_transfer_size = 0
protectedinherited

◆ notify_vector

Vector<AudioInfoSupport*> notify_vector
protectedinherited

◆ p_advertising

BLEAdvertising* p_advertising = nullptr
protected

◆ p_server

BLEServer* p_server = nullptr
protected

◆ p_service

BLEService* p_service = nullptr
protected

◆ receive_buffer

RingBuffer< uint8_t > receive_buffer {0}
protected

◆ receive_sizes

RingBuffer< uint16_t > receive_sizes {0}
protected

◆ service

BLEService service {BLE_AUDIO_SERVICE_UUID}
protected

◆ tmp_in

RingBuffer<uint8_t> tmp_in {0}
protectedinherited

◆ tmp_out

RingBuffer<uint8_t> tmp_out {0}
protectedinherited

◆ transmit_buffer

RingBuffer< uint8_t > transmit_buffer {0}
protected

◆ transmit_buffer_sizes

RingBuffer< uint16_t > transmit_buffer_sizes {0}
protected

◆ write_buffer_size

int write_buffer_size = MAX_SINGLE_CHARS
protectedinherited

The documentation for this class was generated from the following files: