mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 03:00:34 +03:00
fix(ble_audio): Miscellaneous fixes for ISO & LE Audio (stage 2)
This commit is contained in:
@@ -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
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user