add volume for BT sink

At this point, I don't understand how to send requests for Play/Pause,
from the ESP32, to the BT controller
This commit is contained in:
philippe44
2020-01-02 18:29:19 -08:00
parent 1a6ab4f7d9
commit dbd2e21cca

View File

@@ -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)
}
}