diff --git a/components/driver_bt/bt_app_sink.c b/components/driver_bt/bt_app_sink.c index 7d7771ed..4c820267 100644 --- a/components/driver_bt/bt_app_sink.c +++ b/components/driver_bt/bt_app_sink.c @@ -25,7 +25,7 @@ #include "nvs_utilities.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" - +#include "audio_controls.h" #include "sys/lock.h" // AVRCP used transaction label @@ -60,6 +60,7 @@ static void bt_av_hdl_a2d_evt(uint16_t event, void *p_param); static void bt_av_hdl_avrc_ct_evt(uint16_t event, void *p_param); /* avrc TG event handler */ static void bt_av_hdl_avrc_tg_evt(uint16_t event, void *p_param); +static void volume_set_by_local_host(uint8_t volume); static esp_a2d_audio_state_t s_audio_state = ESP_A2D_AUDIO_STATE_STOPPED; static const char *s_a2d_conn_state_str[] = {"Disconnected", "Connecting", "Connected", "Disconnecting"}; @@ -69,6 +70,29 @@ static _lock_t s_volume_lock; static uint8_t s_volume = 0; static bool s_volume_notify; +static void bt_volume_up(void) { + volume_set_by_local_host(s_volume + 3); + ESP_LOGI(BT_AV_TAG, "BT volume up %u", s_volume); +} + +static void bt_volume_down(void) { + volume_set_by_local_host(s_volume - 3); + ESP_LOGI(BT_AV_TAG, "BT volume down %u", s_volume); +} + +static void bt_toggle(void) { + //btc_a2dp_control_media_ctrl(ESP_A2D_MEDIA_CTL_STOP); + //ESP_LOGI(BT_AV_TAG, "PLAY/PAUSE"); +} + +static actrls_t controls = { + bt_volume_up, bt_volume_down, // volume up, volume down + bt_toggle, NULL, // toggle, play + NULL, NULL, // pause, stop + NULL, NULL, // rew, fwd + NULL, NULL, // prev, next +}; + /* callback for A2DP sink */ void bt_app_a2d_cb(esp_a2d_cb_event_t event, esp_a2d_cb_param_t *param) { @@ -144,9 +168,11 @@ static void bt_av_hdl_a2d_evt(uint16_t event, void *p_param) if (a2d->conn_stat.state == ESP_A2D_CONNECTION_STATE_DISCONNECTED) { esp_bt_gap_set_scan_mode(ESP_BT_CONNECTABLE, ESP_BT_GENERAL_DISCOVERABLE); (*bt_app_a2d_cmd_cb)(BT_SINK_DISCONNECTED); + actrls_unset(); } else if (a2d->conn_stat.state == ESP_A2D_CONNECTION_STATE_CONNECTED){ esp_bt_gap_set_scan_mode(ESP_BT_NON_CONNECTABLE, ESP_BT_NON_DISCOVERABLE); (*bt_app_a2d_cmd_cb)(BT_SINK_CONNECTED); + actrls_set(controls); } break; } @@ -519,3 +545,6 @@ static void bt_av_hdl_stack_evt(uint16_t event, void *p_param) } } + + +