fix(ble_audio): Miscellaneous fixes for ISO & LE Audio (stage 2)

This commit is contained in:
Liu Linyan
2026-08-04 14:07:10 +08:00
committed by Linyan Liu
parent 6d980d673f
commit af9ae1c0aa
113 changed files with 4547 additions and 2104 deletions
@@ -6,11 +6,14 @@
* SPDX-License-Identifier: Apache-2.0
*/
#include <errno.h>
#include "esp_ble_audio_bap_api.h"
#if CONFIG_BT_BAP_UNICAST_SERVER
esp_err_t esp_ble_audio_bap_unicast_server_register(const esp_ble_audio_bap_unicast_server_register_param_t *param)
{
esp_err_t ret = ESP_OK;
int err;
if (param == NULL ||
@@ -20,20 +23,26 @@ esp_err_t esp_ble_audio_bap_unicast_server_register(const esp_ble_audio_bap_unic
return ESP_ERR_INVALID_ARG;
}
err = bt_bap_unicast_server_register_safe(param);
bt_le_host_lock();
err = bt_bap_unicast_server_register(param);
if (err) {
return ESP_FAIL;
ret = ESP_FAIL;
goto end;
}
#if BLE_AUDIO_SVC_DEFERRED_ADD
err = bt_le_ascs_init();
if (err) {
bt_bap_unicast_server_unregister_safe();
return ESP_FAIL;
bt_bap_unicast_server_unregister();
ret = ESP_FAIL;
goto end;
}
#endif /* BLE_AUDIO_SVC_DEFERRED_ADD */
return ESP_OK;
end:
bt_le_host_unlock();
return ret;
}
esp_err_t esp_ble_audio_bap_unicast_server_unregister(void)
@@ -150,6 +159,8 @@ esp_err_t esp_ble_audio_bap_unicast_group_reconfig(esp_ble_audio_bap_unicast_gro
int err;
if (unicast_group == NULL || param == NULL ||
param->params == NULL ||
param->params_count == 0 ||
param->params_count > CONFIG_BT_BAP_UNICAST_CLIENT_GROUP_STREAM_COUNT) {
return ESP_ERR_INVALID_ARG;
}
@@ -727,22 +738,29 @@ esp_err_t esp_ble_audio_bap_broadcast_sink_delete(esp_ble_audio_bap_broadcast_si
#if CONFIG_BT_BAP_SCAN_DELEGATOR
esp_err_t esp_ble_audio_bap_scan_delegator_register(esp_ble_audio_bap_scan_delegator_cb_t *cb)
{
esp_err_t ret = ESP_OK;
int err;
err = bt_bap_scan_delegator_register_safe(cb);
bt_le_host_lock();
err = bt_bap_scan_delegator_register(cb);
if (err) {
return ESP_FAIL;
ret = ESP_FAIL;
goto end;
}
#if BLE_AUDIO_SVC_DEFERRED_ADD
err = bt_le_bass_init();
if (err) {
bt_bap_scan_delegator_unregister_safe();
return ESP_FAIL;
bt_bap_scan_delegator_unregister();
ret = ESP_FAIL;
goto end;
}
#endif /* BLE_AUDIO_SVC_DEFERRED_ADD */
return ESP_OK;
end:
bt_le_host_unlock();
return ret;
}
esp_err_t esp_ble_audio_bap_scan_delegator_unregister(void)
@@ -798,7 +816,8 @@ esp_err_t esp_ble_audio_bap_scan_delegator_add_src(const esp_ble_audio_bap_scan_
param->sid > BT_GAP_SID_MAX ||
param->pa_state > ESP_BLE_AUDIO_BAP_PA_STATE_NO_PAST ||
param->encrypt_state > ESP_BLE_AUDIO_BAP_BIG_ENC_STATE_BAD_CODE ||
param->num_subgroups > CONFIG_BT_BAP_BASS_MAX_SUBGROUPS) {
param->num_subgroups > CONFIG_BT_BAP_BASS_MAX_SUBGROUPS ||
(param->num_subgroups > 0 && param->subgroups == NULL)) {
return ESP_ERR_INVALID_ARG;
}
@@ -818,7 +837,8 @@ esp_err_t esp_ble_audio_bap_scan_delegator_mod_src(const esp_ble_audio_bap_scan_
if (param == NULL ||
param->broadcast_id > ESP_BLE_AUDIO_BROADCAST_ID_MAX ||
param->num_subgroups > CONFIG_BT_BAP_BASS_MAX_SUBGROUPS) {
param->num_subgroups > CONFIG_BT_BAP_BASS_MAX_SUBGROUPS ||
(param->num_subgroups > 0 && param->subgroups == NULL)) {
return ESP_ERR_INVALID_ARG;
}
@@ -959,7 +979,8 @@ esp_err_t esp_ble_audio_bap_broadcast_assistant_add_src(uint16_t conn_handle,
param->broadcast_id > ESP_BLE_AUDIO_BROADCAST_ID_MAX ||
param->addr.type > BT_ADDR_LE_RANDOM ||
param->adv_sid > BT_GAP_SID_MAX ||
param->num_subgroups > CONFIG_BT_BAP_BASS_MAX_SUBGROUPS) {
param->num_subgroups > CONFIG_BT_BAP_BASS_MAX_SUBGROUPS ||
(param->num_subgroups > 0 && param->subgroups == NULL)) {
return ESP_ERR_INVALID_ARG;
}
@@ -989,7 +1010,8 @@ esp_err_t esp_ble_audio_bap_broadcast_assistant_mod_src(uint16_t conn_handle,
int err;
if (param == NULL ||
param->num_subgroups > CONFIG_BT_BAP_BASS_MAX_SUBGROUPS) {
param->num_subgroups > CONFIG_BT_BAP_BASS_MAX_SUBGROUPS ||
(param->num_subgroups > 0 && param->subgroups == NULL)) {
return ESP_ERR_INVALID_ARG;
}
@@ -1288,7 +1310,7 @@ esp_err_t esp_ble_audio_bap_base_foreach_subgroup(const esp_ble_audio_bap_base_t
}
err = bt_bap_base_foreach_subgroup(base, func, user_data);
if (err) {
if (err && err != -ECANCELED) {
return ESP_FAIL;
}
@@ -1411,7 +1433,7 @@ esp_err_t esp_ble_audio_bap_base_subgroup_foreach_bis(const esp_ble_audio_bap_ba
}
err = bt_bap_base_subgroup_foreach_bis(subgroup, func, user_data);
if (err) {
if (err && err != -ECANCELED) {
return ESP_FAIL;
}
@@ -128,7 +128,10 @@ esp_err_t esp_ble_audio_cap_unicast_group_create(const esp_ble_audio_cap_unicast
{
int err;
if (param == NULL || unicast_group == NULL) {
if (param == NULL || unicast_group == NULL ||
param->params == NULL ||
param->params_count == 0 ||
param->params_count > CONFIG_BT_BAP_UNICAST_CLIENT_GROUP_STREAM_COUNT) {
return ESP_ERR_INVALID_ARG;
}
@@ -145,7 +148,10 @@ esp_err_t esp_ble_audio_cap_unicast_group_reconfig(esp_ble_audio_cap_unicast_gro
{
int err;
if (unicast_group == NULL || param == NULL) {
if (unicast_group == NULL || param == NULL ||
param->params == NULL ||
param->params_count == 0 ||
param->params_count > CONFIG_BT_BAP_UNICAST_CLIENT_GROUP_STREAM_COUNT) {
return ESP_ERR_INVALID_ARG;
}
@@ -255,7 +261,7 @@ esp_err_t esp_ble_audio_cap_initiator_unicast_audio_start(const esp_ble_audio_ca
int err;
if (param == NULL || param->count == 0 || param->stream_params == NULL ||
param->count > CONFIG_BT_BAP_UNICAST_CLIENT_GROUP_STREAM_COUNT) {
param->count > (2 * CONFIG_BT_BAP_UNICAST_CLIENT_GROUP_STREAM_COUNT)) {
return ESP_ERR_INVALID_ARG;
}
@@ -272,7 +278,7 @@ esp_err_t esp_ble_audio_cap_initiator_unicast_audio_update(const esp_ble_audio_c
int err;
if (param == NULL || param->count == 0 || param->stream_params == NULL ||
param->count > CONFIG_BT_BAP_UNICAST_CLIENT_GROUP_STREAM_COUNT) {
param->count > (2 * CONFIG_BT_BAP_UNICAST_CLIENT_GROUP_STREAM_COUNT)) {
return ESP_ERR_INVALID_ARG;
}
@@ -289,7 +295,7 @@ esp_err_t esp_ble_audio_cap_initiator_unicast_audio_stop(const esp_ble_audio_cap
int err;
if (param == NULL || param->count == 0 || param->streams == NULL ||
param->count > CONFIG_BT_BAP_UNICAST_CLIENT_GROUP_STREAM_COUNT) {
param->count > (2 * CONFIG_BT_BAP_UNICAST_CLIENT_GROUP_STREAM_COUNT)) {
return ESP_ERR_INVALID_ARG;
}
@@ -299,7 +299,7 @@ esp_err_t esp_ble_audio_codec_cfg_set_val(esp_ble_audio_codec_cfg_t *codec_cfg,
if (codec_cfg == NULL || codec_cfg->data == NULL ||
data == NULL ||
data_len == 0 || data_len > UINT8_MAX) {
data_len == 0 || data_len > UINT8_MAX - 1) {
return ESP_ERR_INVALID_ARG;
}
@@ -357,7 +357,7 @@ esp_err_t esp_ble_audio_codec_cfg_meta_set_val(esp_ble_audio_codec_cfg_t *codec_
if (codec_cfg == NULL || codec_cfg->meta == NULL ||
data == NULL ||
data_len == 0 || data_len > UINT8_MAX) {
data_len == 0 || data_len > UINT8_MAX - 1) {
return ESP_ERR_INVALID_ARG;
}
@@ -490,7 +490,7 @@ esp_err_t esp_ble_audio_codec_cfg_meta_set_program_info(esp_ble_audio_codec_cfg_
if (codec_cfg == NULL || codec_cfg->meta == NULL ||
program_info == NULL ||
program_info_len == 0 || program_info_len > UINT8_MAX) {
program_info_len == 0 || program_info_len > UINT8_MAX - 1) {
return ESP_ERR_INVALID_ARG;
}
@@ -565,7 +565,7 @@ esp_err_t esp_ble_audio_codec_cfg_meta_set_ccid_list(esp_ble_audio_codec_cfg_t *
if (codec_cfg == NULL || codec_cfg->meta == NULL ||
ccid_list == NULL ||
ccid_list_len == 0 || ccid_list_len > UINT8_MAX) {
ccid_list_len == 0 || ccid_list_len > UINT8_MAX - 1) {
return ESP_ERR_INVALID_ARG;
}
@@ -643,7 +643,7 @@ esp_err_t esp_ble_audio_codec_cfg_meta_set_program_info_uri(esp_ble_audio_codec_
if (codec_cfg == NULL || codec_cfg->meta == NULL ||
program_info_uri == NULL ||
program_info_uri_len == 0 || program_info_uri_len > UINT8_MAX) {
program_info_uri_len == 0 || program_info_uri_len > UINT8_MAX - 1) {
return ESP_ERR_INVALID_ARG;
}
@@ -795,7 +795,7 @@ esp_err_t esp_ble_audio_codec_cfg_meta_set_broadcast_name(esp_ble_audio_codec_cf
if (codec_cfg == NULL || codec_cfg->meta == NULL ||
broadcast_name == NULL ||
broadcast_name_len == 0 || broadcast_name_len > UINT8_MAX) {
broadcast_name_len == 0 || broadcast_name_len > UINT8_MAX - 1) {
return ESP_ERR_INVALID_ARG;
}
@@ -836,7 +836,7 @@ esp_err_t esp_ble_audio_codec_cfg_meta_set_extended(esp_ble_audio_codec_cfg_t *c
if (codec_cfg == NULL || codec_cfg->meta == NULL ||
extended_meta == NULL ||
extended_meta_len == 0 || extended_meta_len > UINT8_MAX) {
extended_meta_len == 0 || extended_meta_len > UINT8_MAX - 1) {
return ESP_ERR_INVALID_ARG;
}
@@ -877,7 +877,7 @@ esp_err_t esp_ble_audio_codec_cfg_meta_set_vendor(esp_ble_audio_codec_cfg_t *cod
if (codec_cfg == NULL || codec_cfg->meta == NULL ||
vendor_meta == NULL ||
vendor_meta_len == 0 || vendor_meta_len > UINT8_MAX) {
vendor_meta_len == 0 || vendor_meta_len > UINT8_MAX - 1) {
return ESP_ERR_INVALID_ARG;
}
@@ -918,7 +918,7 @@ esp_err_t esp_ble_audio_codec_cap_set_val(esp_ble_audio_codec_cap_t *codec_cap,
if (codec_cap == NULL || codec_cap->data == NULL ||
data == NULL ||
data_len == 0 || data_len > UINT8_MAX) {
data_len == 0 || data_len > UINT8_MAX - 1) {
return ESP_ERR_INVALID_ARG;
}
@@ -1181,7 +1181,7 @@ esp_err_t esp_ble_audio_codec_cap_meta_set_val(esp_ble_audio_codec_cap_t *codec_
if (codec_cap == NULL || codec_cap->meta == NULL ||
data == NULL ||
data_len == 0 || data_len > UINT8_MAX) {
data_len == 0 || data_len > UINT8_MAX - 1) {
return ESP_ERR_INVALID_ARG;
}
@@ -1313,7 +1313,7 @@ esp_err_t esp_ble_audio_codec_cap_meta_set_program_info(esp_ble_audio_codec_cap_
if (codec_cap == NULL || codec_cap->meta == NULL ||
program_info == NULL ||
program_info_len == 0 || program_info_len > UINT8_MAX) {
program_info_len == 0 || program_info_len > UINT8_MAX - 1) {
return ESP_ERR_INVALID_ARG;
}
@@ -1388,7 +1388,7 @@ esp_err_t esp_ble_audio_codec_cap_meta_set_ccid_list(esp_ble_audio_codec_cap_t *
if (codec_cap == NULL || codec_cap->meta == NULL ||
ccid_list == NULL ||
ccid_list_len == 0 || ccid_list_len > UINT8_MAX) {
ccid_list_len == 0 || ccid_list_len > UINT8_MAX - 1) {
return ESP_ERR_INVALID_ARG;
}
@@ -1466,7 +1466,7 @@ esp_err_t esp_ble_audio_codec_cap_meta_set_program_info_uri(esp_ble_audio_codec_
if (codec_cap == NULL || codec_cap->meta == NULL ||
program_info_uri == NULL ||
program_info_uri_len == 0 || program_info_uri_len > UINT8_MAX) {
program_info_uri_len == 0 || program_info_uri_len > UINT8_MAX - 1) {
return ESP_ERR_INVALID_ARG;
}
@@ -1618,7 +1618,7 @@ esp_err_t esp_ble_audio_codec_cap_meta_set_broadcast_name(esp_ble_audio_codec_ca
if (codec_cap == NULL || codec_cap->meta == NULL ||
broadcast_name == NULL ||
broadcast_name_len == 0 || broadcast_name_len > UINT8_MAX) {
broadcast_name_len == 0 || broadcast_name_len > UINT8_MAX - 1) {
return ESP_ERR_INVALID_ARG;
}
@@ -1659,7 +1659,7 @@ esp_err_t esp_ble_audio_codec_cap_meta_set_extended(esp_ble_audio_codec_cap_t *c
if (codec_cap == NULL || codec_cap->meta == NULL ||
extended_meta == NULL ||
extended_meta_len == 0 || extended_meta_len > UINT8_MAX) {
extended_meta_len == 0 || extended_meta_len > UINT8_MAX - 1) {
return ESP_ERR_INVALID_ARG;
}
@@ -1700,7 +1700,7 @@ esp_err_t esp_ble_audio_codec_cap_meta_set_vendor(esp_ble_audio_codec_cap_t *cod
if (codec_cap == NULL || codec_cap->meta == NULL ||
vendor_meta == NULL ||
vendor_meta_len == 0 || vendor_meta_len > UINT8_MAX) {
vendor_meta_len == 0 || vendor_meta_len > UINT8_MAX - 1) {
return ESP_ERR_INVALID_ARG;
}
@@ -65,7 +65,7 @@ esp_err_t esp_ble_audio_gattc_disc_start(uint16_t conn_handle)
return ESP_OK;
}
void esp_ble_audio_gap_app_post_event(uint8_t type, void *param)
void esp_ble_audio_gap_app_post_event(uint16_t type, void *param)
{
bt_le_gap_app_post_event(type, param);
}
@@ -276,7 +276,7 @@ esp_err_t esp_ble_audio_csip_set_coordinator_lock(const esp_ble_audio_csip_set_c
{
int err;
if (members == NULL || count > CONFIG_BT_MAX_CONN || set_info == NULL) {
if (members == NULL || count == 0 || count > CONFIG_BT_MAX_CONN || set_info == NULL) {
return ESP_ERR_INVALID_ARG;
}
@@ -294,7 +294,7 @@ esp_err_t esp_ble_audio_csip_set_coordinator_release(const esp_ble_audio_csip_se
{
int err;
if (members == NULL || count > CONFIG_BT_MAX_CONN || set_info == NULL) {
if (members == NULL || count == 0 || count > CONFIG_BT_MAX_CONN || set_info == NULL) {
return ESP_ERR_INVALID_ARG;
}
@@ -94,27 +94,30 @@ static bool valid_gmap_features(esp_ble_audio_gmap_role_t role,
if ((role & ESP_BLE_AUDIO_GMAP_ROLE_UGG) != 0) {
esp_ble_audio_gmap_ugg_feat_t ugg_feat = features.ugg_feat;
/* UGG TX (multiplex / 96kbps source) configures peer Sink ASEs → ASE_SNK.
* UGG RX (multisink) configures peer Source ASEs → ASE_SRC.
* (BT_AUDIO_TX/RX: client ASE_SNK = TX, ASE_SRC = RX.) */
if ((ugg_feat & ESP_BLE_AUDIO_GMAP_UGG_FEAT_MULTIPLEX) != 0 &&
CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SRC_COUNT == 0) {
CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SNK_COUNT == 0) {
/* Cannot support ESP_BLE_AUDIO_GMAP_UGG_FEAT_MULTIPLEX with
* CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SRC_COUNT == 0.
* CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SNK_COUNT == 0.
*/
return false;
}
if ((ugg_feat & ESP_BLE_AUDIO_GMAP_UGG_FEAT_96KBPS_SOURCE) != 0 &&
CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SRC_COUNT == 0) {
CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SNK_COUNT == 0) {
/* Cannot support ESP_BLE_AUDIO_GMAP_UGG_FEAT_96KBPS_SOURCE with
* CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SRC_COUNT == 0.
* CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SNK_COUNT == 0.
*/
return false;
}
if ((ugg_feat & ESP_BLE_AUDIO_GMAP_UGG_FEAT_MULTISINK) != 0 &&
(CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SNK_COUNT < 2 ||
(CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SRC_COUNT < 2 ||
CONFIG_BT_BAP_UNICAST_CLIENT_GROUP_STREAM_COUNT < 2)) {
/* Cannot support ESP_BLE_AUDIO_GMAP_UGG_FEAT_MULTISINK with
* CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SNK_COUNT or
* CONFIG_BT_BAP_UNICAST_CLIENT_ASE_SRC_COUNT or
* CONFIG_BT_BAP_UNICAST_CLIENT_GROUP_STREAM_COUNT < 2.
*/
return false;
@@ -144,28 +144,35 @@ esp_err_t esp_ble_audio_has_client_preset_prev(esp_ble_audio_has_t *has, bool sy
#if CONFIG_BT_HAS
esp_err_t esp_ble_audio_has_register(const esp_ble_audio_has_features_param_t *features)
{
esp_err_t ret = ESP_OK;
int err;
if (features == NULL) {
return ESP_ERR_INVALID_ARG;
}
err = bt_has_register_safe(features);
bt_le_host_lock();
err = bt_has_register(features);
if (err) {
return ESP_FAIL;
ret = ESP_FAIL;
goto end;
}
#if BLE_AUDIO_SVC_DEFERRED_ADD
err = bt_le_has_init();
if (err) {
/* TODO: rollback register_safe once lib exposes an unregister API;
/* TODO: rollback register once lib exposes an unregister API;
* retry will hit -EALREADY. Only reachable on GATT alloc failure.
*/
return ESP_FAIL;
ret = ESP_FAIL;
goto end;
}
#endif /* BLE_AUDIO_SVC_DEFERRED_ADD */
return ESP_OK;
end:
bt_le_host_unlock();
return ret;
}
esp_err_t esp_ble_audio_has_preset_register(const esp_ble_audio_has_preset_register_param_t *param)
@@ -288,7 +288,8 @@ esp_err_t esp_ble_audio_media_proxy_ctrl_set_next_track_id(esp_ble_audio_media_p
{
int err;
if (player == NULL || ESP_BLE_AUDIO_MCS_VALID_OBJ_ID(id) == false) {
if (player == NULL || (IS_ENABLED(CONFIG_BT_MCTL_LOCAL_PLAYER_LOCAL_CONTROL) &&
ESP_BLE_AUDIO_MCS_VALID_OBJ_ID(id) == false)) {
return ESP_ERR_INVALID_ARG;
}
@@ -415,12 +416,19 @@ esp_err_t esp_ble_audio_media_proxy_ctrl_get_media_state(esp_ble_audio_media_pla
return ESP_OK;
}
#define MCS_VALID_OP(opcode) \
(IN_RANGE((opcode), ESP_BLE_AUDIO_MCS_OPC_PLAY, ESP_BLE_AUDIO_MCS_OPC_STOP) || \
(opcode == ESP_BLE_AUDIO_MCS_OPC_MOVE_RELATIVE) || \
IN_RANGE((opcode), ESP_BLE_AUDIO_MCS_OPC_PREV_SEGMENT, ESP_BLE_AUDIO_MCS_OPC_GOTO_SEGMENT) || \
IN_RANGE((opcode), ESP_BLE_AUDIO_MCS_OPC_PREV_TRACK, ESP_BLE_AUDIO_MCS_OPC_GOTO_TRACK) || \
IN_RANGE((opcode), ESP_BLE_AUDIO_MCS_OPC_PREV_GROUP, ESP_BLE_AUDIO_MCS_OPC_GOTO_GROUP))
esp_err_t esp_ble_audio_media_proxy_ctrl_send_command(esp_ble_audio_media_player_t *player,
const esp_ble_audio_mpl_cmd_t *command)
{
int err;
if (player == NULL || command == NULL) {
if (player == NULL || command == NULL || MCS_VALID_OP(command->opcode) == false) {
return ESP_ERR_INVALID_ARG;
}
@@ -453,7 +461,9 @@ esp_err_t esp_ble_audio_media_proxy_ctrl_send_search(esp_ble_audio_media_player_
{
int err;
if (player == NULL || search == NULL) {
if (player == NULL || search == NULL ||
IN_RANGE(search->len, ESP_BLE_AUDIO_SEARCH_LEN_MIN,
ESP_BLE_AUDIO_SEARCH_LEN_MAX) == false) {
return ESP_ERR_INVALID_ARG;
}
@@ -561,24 +571,31 @@ esp_err_t esp_ble_audio_media_proxy_pl_register(esp_ble_audio_media_proxy_pl_cal
esp_err_t esp_ble_audio_media_proxy_pl_init(void)
{
esp_err_t ret = ESP_OK;
int err;
err = bt_media_proxy_pl_init_safe();
bt_le_host_lock();
err = bt_media_proxy_pl_init();
if (err) {
return ESP_FAIL;
ret = ESP_FAIL;
goto end;
}
#if CONFIG_BT_MCS && BLE_AUDIO_SVC_DEFERRED_ADD
err = bt_le_media_proxy_pl_init();
if (err) {
/* TODO: rollback pl_init_safe once lib exposes an undo API;
/* TODO: rollback pl_init once lib exposes an undo API;
* retry will hit -EALREADY. Only reachable on GATT alloc failure.
*/
return ESP_FAIL;
ret = ESP_FAIL;
goto end;
}
#endif /* CONFIG_BT_MCS && BLE_AUDIO_SVC_DEFERRED_ADD */
return ESP_OK;
end:
bt_le_host_unlock();
return ret;
}
esp_err_t esp_ble_audio_media_proxy_pl_set_player_name(char *name)
@@ -10,6 +10,7 @@
#if CONFIG_BT_MICP_MIC_DEV
esp_err_t esp_ble_audio_micp_mic_dev_register(esp_ble_audio_micp_mic_dev_register_param_t *param)
{
esp_err_t ret = ESP_OK;
int err;
if (param == NULL ||
@@ -17,22 +18,28 @@ esp_err_t esp_ble_audio_micp_mic_dev_register(esp_ble_audio_micp_mic_dev_registe
return ESP_ERR_INVALID_ARG;
}
err = bt_micp_mic_dev_register_safe(param);
bt_le_host_lock();
err = bt_micp_mic_dev_register(param);
if (err) {
return ESP_FAIL;
ret = ESP_FAIL;
goto end;
}
#if BLE_AUDIO_SVC_DEFERRED_ADD
err = bt_le_micp_mic_dev_init();
if (err) {
/* TODO: rollback register_safe once lib exposes an unregister API;
/* TODO: rollback register once lib exposes an unregister API;
* retry will hit -EALREADY. Only reachable on GATT alloc failure.
*/
return ESP_FAIL;
ret = ESP_FAIL;
goto end;
}
#endif /* BLE_AUDIO_SVC_DEFERRED_ADD */
return ESP_OK;
end:
bt_le_host_unlock();
return ret;
}
esp_err_t esp_ble_audio_micp_mic_dev_included_get(esp_ble_audio_micp_included_t *included)
@@ -16,7 +16,7 @@ esp_err_t esp_ble_audio_pbp_get_announcement(const uint8_t meta[], size_t meta_l
int err;
if (pba_data_buf == NULL ||
pba_data_buf->size < (meta_len + ESP_BLE_AUDIO_PBP_MIN_PBA_SIZE)) {
net_buf_simple_tailroom(pba_data_buf) < (meta_len + ESP_BLE_AUDIO_PBP_MIN_PBA_SIZE)) {
return ESP_ERR_INVALID_ARG;
}
@@ -337,27 +337,34 @@ static bool valid_register_param(const esp_ble_audio_tbs_register_param_t *param
esp_err_t esp_ble_audio_tbs_register_bearer(const esp_ble_audio_tbs_register_param_t *param,
uint8_t *bearer_index)
{
int ret;
esp_err_t ret = ESP_OK;
int err;
if (param == NULL || valid_register_param(param) == false || bearer_index == NULL) {
return ESP_ERR_INVALID_ARG;
}
ret = bt_tbs_register_bearer_safe(param);
if (ret < 0) {
return ESP_FAIL;
bt_le_host_lock();
err = bt_tbs_register_bearer(param);
if (err < 0) {
ret = ESP_FAIL;
goto end;
}
*bearer_index = ret;
*bearer_index = err;
#if BLE_AUDIO_SVC_DEFERRED_ADD
if (param->gtbs ? bt_le_gtbs_init() : bt_le_tbs_init()) {
bt_tbs_unregister_bearer_safe(*bearer_index);
return ESP_FAIL;
bt_tbs_unregister_bearer(*bearer_index);
ret = ESP_FAIL;
goto end;
}
#endif /* BLE_AUDIO_SVC_DEFERRED_ADD */
return ESP_OK;
end:
bt_le_host_unlock();
return ret;
}
esp_err_t esp_ble_audio_tbs_unregister_bearer(uint8_t bearer_index)
@@ -11,24 +11,31 @@
#if CONFIG_BT_TMAP
esp_err_t esp_ble_audio_tmap_register(esp_ble_audio_tmap_role_t role)
{
esp_err_t ret = ESP_OK;
int err;
err = bt_tmap_register_safe(role);
bt_le_host_lock();
err = bt_tmap_register(role);
if (err) {
return ESP_FAIL;
ret = ESP_FAIL;
goto end;
}
#if BLE_AUDIO_SVC_DEFERRED_ADD
err = bt_le_tmas_init();
if (err) {
/* TODO: rollback register_safe once lib exposes an unregister API;
/* TODO: rollback register once lib exposes an unregister API;
* retry will hit -EALREADY. Only reachable on GATT alloc failure.
*/
return ESP_FAIL;
ret = ESP_FAIL;
goto end;
}
#endif /* BLE_AUDIO_SVC_DEFERRED_ADD */
return ESP_OK;
end:
bt_le_host_unlock();
return ret;
}
esp_err_t esp_ble_audio_tmap_discover(uint16_t conn_handle,
@@ -38,6 +45,10 @@ esp_err_t esp_ble_audio_tmap_discover(uint16_t conn_handle,
void *conn;
int err;
if (tmap_cb == NULL) {
return ESP_ERR_INVALID_ARG;
}
bt_le_host_lock();
conn = bt_le_acl_conn_find(conn_handle);
@@ -26,6 +26,7 @@ esp_err_t esp_ble_audio_vcp_vol_rend_included_get(esp_ble_audio_vcp_included_t *
esp_err_t esp_ble_audio_vcp_vol_rend_register(esp_ble_audio_vcp_vol_rend_register_param_t *param)
{
esp_err_t ret = ESP_OK;
int err;
if (param == NULL) {
@@ -44,22 +45,28 @@ esp_err_t esp_ble_audio_vcp_vol_rend_register(esp_ble_audio_vcp_vol_rend_registe
return ESP_ERR_INVALID_ARG;
}
err = bt_vcp_vol_rend_register_safe(param);
bt_le_host_lock();
err = bt_vcp_vol_rend_register(param);
if (err) {
return ESP_FAIL;
ret = ESP_FAIL;
goto end;
}
#if BLE_AUDIO_SVC_DEFERRED_ADD
err = bt_le_vcp_vol_rend_init();
if (err) {
/* TODO: rollback register_safe once lib exposes an unregister API;
/* TODO: rollback register once lib exposes an unregister API;
* retry will hit -EALREADY. Only reachable on GATT alloc failure.
*/
return ESP_FAIL;
ret = ESP_FAIL;
goto end;
}
#endif /* BLE_AUDIO_SVC_DEFERRED_ADD */
return ESP_OK;
end:
bt_le_host_unlock();
return ret;
}
esp_err_t esp_ble_audio_vcp_vol_rend_set_step(uint8_t volume_step)
@@ -126,7 +126,7 @@ typedef struct {
* @param type Event type.
* @param param Event parameters.
*/
void esp_ble_audio_gap_app_post_event(uint8_t type, void *param);
void esp_ble_audio_gap_app_post_event(uint16_t type, void *param);
#if !CONFIG_BT_BLUEDROID_ENABLED
/**