mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-09 13:07:03 +03:00
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:
@@ -25,7 +25,7 @@
|
|||||||
#include "nvs_utilities.h"
|
#include "nvs_utilities.h"
|
||||||
#include "freertos/FreeRTOS.h"
|
#include "freertos/FreeRTOS.h"
|
||||||
#include "freertos/task.h"
|
#include "freertos/task.h"
|
||||||
|
#include "audio_controls.h"
|
||||||
#include "sys/lock.h"
|
#include "sys/lock.h"
|
||||||
|
|
||||||
// AVRCP used transaction label
|
// 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);
|
static void bt_av_hdl_avrc_ct_evt(uint16_t event, void *p_param);
|
||||||
/* avrc TG event handler */
|
/* avrc TG event handler */
|
||||||
static void bt_av_hdl_avrc_tg_evt(uint16_t event, void *p_param);
|
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 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"};
|
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 uint8_t s_volume = 0;
|
||||||
static bool s_volume_notify;
|
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 */
|
/* callback for A2DP sink */
|
||||||
void bt_app_a2d_cb(esp_a2d_cb_event_t event, esp_a2d_cb_param_t *param)
|
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) {
|
if (a2d->conn_stat.state == ESP_A2D_CONNECTION_STATE_DISCONNECTED) {
|
||||||
esp_bt_gap_set_scan_mode(ESP_BT_CONNECTABLE, ESP_BT_GENERAL_DISCOVERABLE);
|
esp_bt_gap_set_scan_mode(ESP_BT_CONNECTABLE, ESP_BT_GENERAL_DISCOVERABLE);
|
||||||
(*bt_app_a2d_cmd_cb)(BT_SINK_DISCONNECTED);
|
(*bt_app_a2d_cmd_cb)(BT_SINK_DISCONNECTED);
|
||||||
|
actrls_unset();
|
||||||
} else if (a2d->conn_stat.state == ESP_A2D_CONNECTION_STATE_CONNECTED){
|
} 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);
|
esp_bt_gap_set_scan_mode(ESP_BT_NON_CONNECTABLE, ESP_BT_NON_DISCOVERABLE);
|
||||||
(*bt_app_a2d_cmd_cb)(BT_SINK_CONNECTED);
|
(*bt_app_a2d_cmd_cb)(BT_SINK_CONNECTED);
|
||||||
|
actrls_set(controls);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -519,3 +545,6 @@ static void bt_av_hdl_stack_evt(uint16_t event, void *p_param)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user