Arduino A2DP
BluetoothA2DPSink.h
1 // Licensed under the Apache License, Version 2.0 (the "License");
2 // you may not use this file except in compliance with the License.
3 // You may obtain a copy of the License at
4 
5 // http://www.apache.org/licenses/LICENSE-2.0
6 //
7 // Unless required by applicable law or agreed to in writing, software
8 // distributed under the License is distributed on an "AS IS" BASIS,
9 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10 // See the License for the specific language governing permissions and
11 // limitations under the License.
12 //
13 // Copyright 2020 Phil Schatzmann
14 // Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
15 
16 #pragma once
17 #include "BluetoothA2DPCommon.h"
18 #include "BluetoothA2DPOutput.h"
19 #include "freertos/ringbuf.h"
20 
21 // Comment out next line to deactivate warnings
22 #ifndef A2DP_I2S_AUDIOTOOLS
23 #warning "AudioTools library is not included first or installed"
24 #endif
25 
26 #define APP_SIG_WORK_DISPATCH (0x01)
27 
28 #ifndef BT_AV_TAG
29 #define BT_AV_TAG "BT_AV"
30 #endif
31 
32 /* @brief event for handler "bt_av_hdl_stack_up */
33 enum {
34  BT_APP_EVT_STACK_UP = 0,
35 };
36 
37 extern "C" void ccall_i2s_task_handler(void *arg);
38 extern "C" void ccall_audio_data_callback(const uint8_t *data, uint32_t len);
39 extern "C" void ccall_av_hdl_a2d_evt(uint16_t event, void *p_param);
40 extern "C" void ccall_av_hdl_avrc_evt(uint16_t event, void *p_param);
41 
42 // defines the mechanism to confirm a pin request
43 enum PinCodeRequest { Undefined, Confirm, Reply };
44 
45 // provide global ref for callbacks
46 class BluetoothA2DPSink;
47 extern BluetoothA2DPSink *actual_bluetooth_a2dp_sink;
48 
61  friend void ccall_i2s_task_handler(void *arg);
63  friend void ccall_audio_data_callback(const uint8_t *data, uint32_t len);
65  friend void ccall_av_hdl_a2d_evt(uint16_t event, void *p_param);
67  friend void ccall_av_hdl_avrc_evt(uint16_t event, void *p_param);
68 
69  public:
72 
75  set_output(out);
76  }
77 
78 #if A2DP_I2S_AUDIOTOOLS
80  BluetoothA2DPSink(audio_tools::AudioOutput &output) : BluetoothA2DPSink() {
81  set_output(output);
82  }
84  BluetoothA2DPSink(audio_tools::AudioStream &output) : BluetoothA2DPSink(){
85  set_output(output);
86  }
87 #endif
88 
89 #ifdef ARDUINO
91  BluetoothA2DPSink(Print &output) : BluetoothA2DPSink() {
92  set_output(output);
93  }
94 #endif
95 
97  virtual ~BluetoothA2DPSink();
98 
99 #if A2DP_LEGACY_I2S_SUPPORT
101  virtual void set_pin_config(i2s_pin_config_t pin_config) {
102  out->set_pin_config(pin_config);
103  }
104 
106  virtual void set_i2s_port(i2s_port_t i2s_num) { out->set_i2s_port(i2s_num); }
107 
109  virtual void set_i2s_config(i2s_config_t i2s_config) {
110  out->set_i2s_config(i2s_config);
111  }
112 
115  virtual void set_channels(i2s_channel_t channels) {
116  set_mono_downmix(channels == I2S_CHANNEL_MONO);
117  }
118 
121  virtual void set_bits_per_sample(int bps) { out->set_bits_per_sample(bps); }
122 
123 #if ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 1, 1)
124  virtual esp_err_t i2s_mclk_pin_select(const uint8_t pin) {
125  return out->i2s_mclk_pin_select(pin);
126  }
127 #endif
128 
129 #endif
130 
132  void set_output(BluetoothA2DPOutput &output) { out = &output; }
133 
135  BluetoothA2DPOutput *get_output() { return out; }
136 
137 #ifdef ARDUINO
139  void set_output(Print &output) {
140  static BluetoothA2DPOutputPrint s_out;
141  out = &s_out;
142  out->set_output(output);
143  }
144 #endif
145 
146 #if A2DP_I2S_AUDIOTOOLS
148  void set_output(audio_tools::AudioOutput &output) { out->set_output(output); }
150  void set_output(audio_tools::AudioStream &output) { out->set_output(output); }
151 #endif
152 
154  virtual void start(const char *name, bool auto_reconect);
155 
157  virtual void start(const char *name);
158 
161  virtual void end(bool release_memory = false);
162 
164  virtual esp_a2d_mct_t get_audio_type();
165 
167  virtual void set_avrc_connection_state_callback(void (*callback)(bool)) {
168  this->avrc_connection_state_callback = callback;
169  }
170 
172  virtual void set_avrc_metadata_callback(void (*callback)(uint8_t,
173  const uint8_t *)) {
174  this->avrc_metadata_callback = callback;
175  }
176 
177 #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 0, 0)
181  void (*callback)(esp_avrc_playback_stat_t playback)) {
182  this->avrc_rn_playstatus_callback = callback;
183  }
187  void (*callback)(uint32_t play_pos), uint32_t notif_interval = 10) {
188  this->avrc_rn_play_pos_callback = callback;
189  this->notif_interval_s = std::max(notif_interval, (uint32_t)1);
190  }
195  void (*callback)(uint8_t *id)) {
196  this->avrc_rn_track_change_callback = callback;
197  }
198 #endif
199 
201  virtual void set_sample_rate_callback(void (*callback)(uint16_t rate)) {
202  this->sample_rate_callback = callback;
203  }
204 
207  virtual void set_stream_reader(void (*callBack)(const uint8_t *, uint32_t),
208  bool i2s_output = true);
209 
212  virtual void set_raw_stream_reader(void (*callBack)(const uint8_t *,
213  uint32_t));
214 
216  virtual void set_on_data_received(void (*callBack)());
217 
219  virtual void set_address_validator(
220  bool (*callBack)(esp_bd_addr_t remote_bda)) {
221  address_validator = callBack;
222  }
223 
225  virtual bool is_avrc_connected();
226 
228  virtual void set_volume(uint8_t volume);
229 
231  virtual int get_volume();
232 
235  virtual void set_on_volumechange(void (*callBack)(int));
236 
238  virtual void set_avrc_rn_volumechange(void (*callBack)(int));
239 
242  virtual void set_avrc_rn_volumechange_completed(void (*callBack)(int));
243 
245  virtual void play();
247  virtual void pause();
249  virtual void stop();
251  virtual void next();
253  virtual void previous();
255  virtual void fast_forward();
257  virtual void rewind();
259  virtual void volume_up();
261  virtual void volume_down();
262 
264  virtual void set_mono_downmix(bool enabled) {
265  volume_control()->set_mono_downmix(enabled);
266  }
267 
269  virtual uint16_t sample_rate() { return m_sample_rate; }
270 
272  virtual void activate_pin_code(bool active);
273 
275  virtual void confirm_pin_code();
276 
278  virtual void confirm_pin_code(int code);
279 
281  virtual int pin_code() { return pin_code_int; }
282 
287  virtual void set_avrc_metadata_attribute_mask(int flags) {
288  avrc_metadata_flags = flags;
289  }
290 
292  virtual void set_swap_lr_channels(bool swap) { swap_left_right = swap; }
293 
296  virtual void set_auto_reconnect(bool reconnect,
297  int count = AUTOCONNECT_TRY_NUM) {
298  reconnect_status = reconnect ? AutoReconnect : NoReconnect;
299  try_reconnect_max_count = count;
300  }
301 
303  virtual esp_bd_addr_t *get_current_peer_address() { return &peer_bd_addr; }
304 
306  void set_rssi_active(bool active) { rssi_active = active; }
307 
309  bool update_rssi() {
310  if (!rssi_active) return false;
311  return esp_bt_gap_read_rssi_delta(*get_current_peer_address()) == ESP_OK;
312  }
313 
315  esp_bt_gap_cb_param_t::read_rssi_delta_param get_last_rssi() {
316  return last_rssi_delta;
317  }
318 
321  void (*callback)(esp_bt_gap_cb_param_t::read_rssi_delta_param &rssi)) {
322  rssi_callbak = callback;
323  }
324 
327  void set_reconnect_delay(int delay) { reconnect_delay = delay; }
328 
330  void set_spp_active(bool flag) { spp_active = flag; }
331 
333  void set_output_active(bool flag) { is_i2s_active = flag; }
334 
336  bool is_output_active() { return is_i2s_active; }
337 
338 #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 0, 0)
342  return esp_avrc_rn_evt_bit_mask_operation(ESP_AVRC_BIT_MASK_OP_TEST,
343  &s_avrc_peer_rn_cap, cmd);
344  }
346  bool is_avrc_peer_rn_cap_available() { return s_avrc_peer_rn_cap.bits != 0; }
347 
349  virtual const char *get_peer_name() { return get_connected_source_name(); }
350 
351 #endif
352 
353  protected:
354  BluetoothA2DPOutputDefault out_default;
355  BluetoothA2DPOutput *out = &out_default;
356 
357  volatile bool is_i2s_active = false;
358  // activate output via BluetoothA2DPOutput
359  bool is_output = true;
360  uint16_t m_sample_rate = 44100; // set default rate
361  uint32_t m_pkt_cnt = 0;
362  // esp_a2d_audio_state_t m_audio_state = ESP_A2D_AUDIO_STATE_STOPPED;
363  esp_a2d_mct_t audio_type;
364  char pin_code_str[20] = {0};
365  int connection_rety_count = 0;
366  bool spp_active = false;
367  esp_spp_mode_t esp_spp_mode = ESP_SPP_MODE_CB;
368  _lock_t s_volume_lock;
369  uint8_t s_volume = 0;
370  bool s_volume_notify;
371  int pin_code_int = 0;
372  PinCodeRequest pin_code_request = Undefined;
373  bool is_pin_code_active = false;
374  bool avrc_connection_state = false;
375  int avrc_metadata_flags =
376  ESP_AVRC_MD_ATTR_TITLE | ESP_AVRC_MD_ATTR_ARTIST |
377  ESP_AVRC_MD_ATTR_ALBUM | ESP_AVRC_MD_ATTR_TRACK_NUM |
378  ESP_AVRC_MD_ATTR_NUM_TRACKS | ESP_AVRC_MD_ATTR_GENRE;
379  void (*bt_volumechange)(int) = nullptr;
380  void (*bt_dis_connected)() = nullptr;
381  void (*bt_connected)() = nullptr;
382  void (*data_received)() = nullptr;
383  void (*stream_reader)(const uint8_t *, uint32_t) = nullptr;
384  void (*raw_stream_reader)(const uint8_t *, uint32_t) = nullptr;
385  void (*avrc_connection_state_callback)(bool connected) = nullptr;
386  void (*avrc_metadata_callback)(uint8_t, const uint8_t *) = nullptr;
387 #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 0, 0)
388  void (*avrc_rn_playstatus_callback)(esp_avrc_playback_stat_t) = nullptr;
389  void (*avrc_rn_track_change_callback)(uint8_t *) = nullptr;
390  void (*avrc_rn_play_pos_callback)(uint32_t) = nullptr;
391  uint32_t notif_interval_s = 10;
392 #endif
393  void (*avrc_rn_volchg_complete_callback)(int) = nullptr;
394  bool (*address_validator)(esp_bd_addr_t remote_bda) = nullptr;
395  void (*sample_rate_callback)(uint16_t rate) = nullptr;
396  bool swap_left_right = false;
397  int try_reconnect_max_count = AUTOCONNECT_TRY_NUM;
398 
399  // RSSI support
400  esp_bt_gap_cb_param_t::read_rssi_delta_param last_rssi_delta;
401  bool rssi_active = false;
402  void (*rssi_callbak)(esp_bt_gap_cb_param_t::read_rssi_delta_param &rssi) =
403  nullptr;
404  int reconnect_delay = 1000;
405 
406 #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 0, 0)
407  esp_avrc_rn_evt_cap_mask_t s_avrc_peer_rn_cap = {0};
408  char remote_name[ESP_BT_GAP_MAX_BDNAME_LEN + 1];
409 #endif
410  void app_gap_callback(esp_bt_gap_cb_event_t event,
411  esp_bt_gap_cb_param_t *param) override;
412  void app_rc_ct_callback(esp_avrc_ct_cb_event_t event,
413  esp_avrc_ct_cb_param_t *param) override;
414  void app_a2d_callback(esp_a2d_cb_event_t event,
415  esp_a2d_cb_param_t *param) override;
416  void av_hdl_stack_evt(uint16_t event, void *p_param) override;
417 
418  virtual int init_bluetooth();
419  virtual bool app_work_dispatch(app_callback_t p_cback, uint16_t event,
420  void *p_params, int param_len);
421  virtual void app_alloc_meta_buffer(esp_avrc_ct_cb_param_t *param);
422  virtual void av_new_track();
423  virtual void av_playback_changed();
424  virtual void av_play_pos_changed();
425  // execute AVRC command
426  virtual void execute_avrc_command(int cmd);
427 
428  virtual const char *last_bda_nvs_name() { return "last_bda"; }
429 
430  virtual bool is_reconnect(esp_a2d_disc_rsn_t type) {
431  bool result = is_autoreconnect_allowed &&
432  (reconnect_status == AutoReconnect ||
433  reconnect_status == IsReconnecting) &&
434  has_last_connection();
435  ESP_LOGI(BT_AV_TAG, "is_reconnect: %s", result ? "true" : "false");
436  return result;
437  }
438 
442  // Callback for music stream
443  virtual void audio_data_callback(const uint8_t *data, uint32_t len);
444  // a2dp event handler
445  virtual void av_hdl_a2d_evt(uint16_t event, void *p_param);
446  // avrc event handler
447  virtual void av_hdl_avrc_evt(uint16_t event, void *p_param);
448 
449  // split up long handlers
450  virtual void handle_connection_state(uint16_t event, void *p_param);
451  virtual void handle_audio_state(uint16_t event, void *p_param);
452  virtual void handle_audio_cfg(uint16_t event, void *p_param);
453  virtual void handle_avrc_connection_state(bool connected);
454 
455 #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 0, 0)
457  virtual const char *get_connected_source_name();
458  virtual void volume_set_by_local_host(uint8_t volume);
459  virtual void volume_set_by_controller(uint8_t volume);
460  virtual void av_notify_evt_handler(uint8_t event_id,
461  esp_avrc_rn_param_t *event_parameter);
462  virtual void app_rc_tg_callback(esp_avrc_tg_cb_event_t event,
463  esp_avrc_tg_cb_param_t *param) override;
464  virtual void av_hdl_avrc_tg_evt(uint16_t event, void *p_param) override;
465 #else
466  virtual void av_notify_evt_handler(uint8_t event_id,
467  uint32_t event_parameter);
468 #endif
469 
470  virtual void init_i2s();
471 
473  virtual size_t write_audio(const uint8_t *data, size_t size) {
474  return i2s_write_data(data, size);
475  }
476 
478  size_t i2s_write_data(const uint8_t *data, size_t item_size);
479 
481  virtual void i2s_task_handler(void *arg) {}
482  virtual void bt_i2s_task_start_up(void) {}
483  virtual void bt_i2s_task_shut_down(void) {}
484 
485  esp_err_t esp_a2d_connect(esp_bd_addr_t peer) override {
486  return esp_a2d_sink_connect(peer);
487  }
488  esp_err_t esp_a2d_disconnect(esp_bd_addr_t remote_bda) override {
489  return esp_a2d_sink_disconnect(remote_bda);
490  }
491 
492  void set_scan_mode_connectable_default() override {
494  }
495 
496  virtual void set_i2s_active(bool active);
497 
498  virtual bool isSource() { return false; }
499 };
void(* app_callback_t)(uint16_t event, void *param)
handler for the dispatched work
Definition: BluetoothA2DPCommon.h:120
Common Bluetooth A2DP functions.
Definition: BluetoothA2DPCommon.h:169
virtual A2DPVolumeControl * volume_control()
provides access to the VolumeControl object
Definition: BluetoothA2DPCommon.h:401
virtual bool reconnect()
Reconnects to the last device.
Definition: BluetoothA2DPCommon.cpp:84
virtual void set_scan_mode_connectable(bool connectable)
Defines if the bluetooth is connectable.
Definition: BluetoothA2DPCommon.cpp:537
Default Output Class providing both the Legacy I2S and the AudioTools I2S functionality.
Definition: BluetoothA2DPOutput.h:203
Abstract Output Class.
Definition: BluetoothA2DPOutput.h:22
virtual void set_output(audio_tools::AudioOutput &output)
Not implemented.
Definition: BluetoothA2DPOutput.h:32
Output Class using Print API:
Definition: BluetoothA2DPOutput.h:126
A2DP Bluethooth Sink - We initialize and start the Bluetooth A2DP Sink. The example https://github....
Definition: BluetoothA2DPSink.h:59
virtual void set_raw_stream_reader(void(*callBack)(const uint8_t *, uint32_t))
Definition: BluetoothA2DPSink.cpp:85
virtual ~BluetoothA2DPSink()
Destructor - stops the playback and releases all resources.
Definition: BluetoothA2DPSink.cpp:60
virtual void set_swap_lr_channels(bool swap)
swaps the left and right channel
Definition: BluetoothA2DPSink.h:292
BluetoothA2DPOutput * get_output()
Provides access to the output class.
Definition: BluetoothA2DPSink.h:135
void set_output(BluetoothA2DPOutput &output)
Defines the output class: by default we use BluetoothA2DPOutputDefault.
Definition: BluetoothA2DPSink.h:132
virtual void activate_pin_code(bool active)
We need to confirm a new seesion by calling confirm_pin_code()
Definition: BluetoothA2DPSink.cpp:1064
virtual void next()
AVRC next.
Definition: BluetoothA2DPSink.cpp:1026
BluetoothA2DPSink()
Default Constructor: output via callback or Legacy I2S.
Definition: BluetoothA2DPSink.cpp:50
virtual void audio_data_callback(const uint8_t *data, uint32_t len)
Definition: BluetoothA2DPSink.cpp:955
virtual const char * get_connected_source_name()
Get the name of the connected source device (obsolete): use get_peer_name()
Definition: BluetoothA2DPSink.cpp:197
friend void ccall_av_hdl_avrc_evt(uint16_t event, void *p_param)
avrc event handler
Definition: BluetoothA2DPSink.cpp:33
virtual void previous()
AVRC previous.
Definition: BluetoothA2DPSink.cpp:1029
virtual int pin_code()
provides the requested pin code (0 = undefined)
Definition: BluetoothA2DPSink.h:281
virtual void stop()
AVRC stop.
Definition: BluetoothA2DPSink.cpp:1024
bool update_rssi()
Requests an update of the rssi delta value.
Definition: BluetoothA2DPSink.h:309
virtual void volume_up()
AVRC increase the volume.
Definition: BluetoothA2DPSink.cpp:1039
virtual void fast_forward()
AVRC fast_forward.
Definition: BluetoothA2DPSink.cpp:1032
void set_rssi_active(bool active)
Activates the rssi reporting.
Definition: BluetoothA2DPSink.h:306
virtual bool is_avrc_connected()
returns true if the avrc service is connected
Definition: BluetoothA2DPSink.cpp:996
virtual void set_stream_reader(void(*callBack)(const uint8_t *, uint32_t), bool i2s_output=true)
Definition: BluetoothA2DPSink.cpp:78
virtual void set_volume(uint8_t volume)
Changes the volume.
Definition: BluetoothA2DPSink.cpp:1047
esp_bt_gap_cb_param_t::read_rssi_delta_param get_last_rssi()
provides the last rssi parameters
Definition: BluetoothA2DPSink.h:315
virtual void end(bool release_memory=false)
Definition: BluetoothA2DPSink.cpp:66
void set_output(audio_tools::AudioOutput &output)
Output AudioOutput using AudioTools library.
Definition: BluetoothA2DPSink.h:148
virtual void confirm_pin_code()
confirms the connection request by returning the receivedn pin code
Definition: BluetoothA2DPSink.cpp:1068
virtual void set_avrc_rn_play_pos_callback(void(*callback)(uint32_t play_pos), uint32_t notif_interval=10)
Definition: BluetoothA2DPSink.h:186
virtual void set_avrc_rn_playstatus_callback(void(*callback)(esp_avrc_playback_stat_t playback))
Definition: BluetoothA2DPSink.h:180
virtual void set_mono_downmix(bool enabled)
mix stereo into single mono signal
Definition: BluetoothA2DPSink.h:264
BluetoothA2DPSink(audio_tools::AudioStream &output)
Output AudioStream using AudioTools library.
Definition: BluetoothA2DPSink.h:84
void set_output(audio_tools::AudioStream &output)
Output AudioStream using AudioTools library.
Definition: BluetoothA2DPSink.h:150
void set_output_active(bool flag)
Activate/Deactivate output e.g. to I2S.
Definition: BluetoothA2DPSink.h:333
bool is_output_active()
Checks if output is active.
Definition: BluetoothA2DPSink.h:336
virtual esp_a2d_mct_t get_audio_type()
Determine the actual audio type.
Definition: BluetoothA2DPSink.cpp:194
BluetoothA2DPSink(Print &output)
Output to Arduino Print.
Definition: BluetoothA2DPSink.h:91
void app_rc_ct_callback(esp_avrc_ct_cb_event_t event, esp_avrc_ct_cb_param_t *param) override
callback function for AVRCP controller
Definition: BluetoothA2DPSink.cpp:371
bool is_avrc_peer_rn_cap_available()
Returns true if the is_avrc_peer_rn_cap() method can be called.
Definition: BluetoothA2DPSink.h:346
virtual void set_avrc_metadata_attribute_mask(int flags)
Definition: BluetoothA2DPSink.h:287
virtual void set_sample_rate_callback(void(*callback)(uint16_t rate))
Defines the method which will be called with the sample rate is updated.
Definition: BluetoothA2DPSink.h:201
virtual uint16_t sample_rate()
Provides the actually set data rate (in samples per second)
Definition: BluetoothA2DPSink.h:269
void set_reconnect_delay(int delay)
Definition: BluetoothA2DPSink.h:327
void set_rssi_callback(void(*callback)(esp_bt_gap_cb_param_t::read_rssi_delta_param &rssi))
Defines the callback that is called when we get an new rssi value.
Definition: BluetoothA2DPSink.h:320
void app_a2d_callback(esp_a2d_cb_event_t event, esp_a2d_cb_param_t *param) override
callback function for A2DP source
Definition: BluetoothA2DPSink.cpp:917
friend void ccall_av_hdl_a2d_evt(uint16_t event, void *p_param)
a2dp event handler
Definition: BluetoothA2DPSink.cpp:40
virtual void set_avrc_rn_volumechange_completed(void(*callBack)(int))
Definition: BluetoothA2DPSink.cpp:103
BluetoothA2DPSink(audio_tools::AudioOutput &output)
Output AudioOutput using AudioTools library.
Definition: BluetoothA2DPSink.h:80
virtual void rewind()
AVRC rewind.
Definition: BluetoothA2DPSink.cpp:1035
virtual size_t write_audio(const uint8_t *data, size_t size)
output audio data e.g. to i2s or to queue
Definition: BluetoothA2DPSink.h:473
virtual void pause()
AVRC pause.
Definition: BluetoothA2DPSink.cpp:1022
virtual void set_avrc_metadata_callback(void(*callback)(uint8_t, const uint8_t *))
Define a callback method which provides the meta data.
Definition: BluetoothA2DPSink.h:172
BluetoothA2DPSink(BluetoothA2DPOutput &out)
Define output scenario class.
Definition: BluetoothA2DPSink.h:74
virtual void play()
Starts to play music using AVRC.
Definition: BluetoothA2DPSink.cpp:1020
size_t i2s_write_data(const uint8_t *data, size_t item_size)
writes the data to i2s
Definition: BluetoothA2DPSink.cpp:1098
void set_spp_active(bool flag)
Activates SSP (Serial protocol)
Definition: BluetoothA2DPSink.h:330
virtual esp_bd_addr_t * get_current_peer_address()
Provides the address of the connected device.
Definition: BluetoothA2DPSink.h:303
friend void ccall_audio_data_callback(const uint8_t *data, uint32_t len)
Callback for music stream.
Definition: BluetoothA2DPSink.cpp:27
friend void ccall_i2s_task_handler(void *arg)
task hander for i2s
Definition: BluetoothA2DPSink.cpp:21
virtual void set_on_volumechange(void(*callBack)(int))
Definition: BluetoothA2DPSink.cpp:95
virtual const char * get_peer_name()
Get the name of the connected source device.
Definition: BluetoothA2DPSink.h:349
virtual int get_volume()
Determines the volume.
Definition: BluetoothA2DPSink.cpp:1059
virtual void set_avrc_rn_volumechange(void(*callBack)(int))
Set the callback that is called when remote changes the volume.
Definition: BluetoothA2DPSink.cpp:99
virtual void set_address_validator(bool(*callBack)(esp_bd_addr_t remote_bda))
Allows you to reject unauthorized addresses.
Definition: BluetoothA2DPSink.h:219
virtual void set_avrc_rn_track_change_callback(void(*callback)(uint8_t *id))
Definition: BluetoothA2DPSink.h:194
virtual void volume_down()
AVRC decrease the volume.
Definition: BluetoothA2DPSink.cpp:1043
virtual void set_avrc_connection_state_callback(void(*callback)(bool))
Define a callback method which provides connection state of AVRC service.
Definition: BluetoothA2DPSink.h:167
bool is_avrc_peer_rn_cap(esp_avrc_rn_event_ids_t cmd)
Definition: BluetoothA2DPSink.h:341
virtual void set_on_data_received(void(*callBack)())
Define callback which is called when we receive data.
Definition: BluetoothA2DPSink.cpp:90
virtual void set_auto_reconnect(bool reconnect, int count=AUTOCONNECT_TRY_NUM)
Definition: BluetoothA2DPSink.h:296
virtual void start(const char *name, bool auto_reconect)
starts the I2S bluetooth sink with the inidicated name
Definition: BluetoothA2DPSink.cpp:108
void set_output(Print &output)
Output to Arduino Print.
Definition: BluetoothA2DPSink.h:139
virtual void i2s_task_handler(void *arg)
dummy functions needed for BluetoothA2DPSinkQueued
Definition: BluetoothA2DPSink.h:481
esp_avrc_rn_event_ids_t
AVRC event notification ids.
Definition: external_lists.h:50
esp_avrc_playback_stat_t
AVRCP current status of playback.
Definition: external_lists.h:72
uint8_t esp_bd_addr_t[ESP_BD_ADDR_LEN]
Bluetooth address.
Definition: external_lists.h:107