Merge branch 'bugfix/fix_iso_tx_power_update_fail_v6.1' into 'release/v6.1'

feat(iso): Support set ble iso tx power (6.1)

See merge request espressif/esp-idf!52620
This commit is contained in:
Jiang Jiang Jian
2026-09-15 13:57:37 +08:00
6 changed files with 141 additions and 58 deletions
+32 -16
View File
@@ -8,6 +8,7 @@
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include "btdm_user_cfg.h"
#if UC_BT_CTRL_BLE_IS_ENABLE
#include "ble_user_cfg.h"
@@ -103,6 +104,7 @@ extern int brk_sym_pawrBcast_02YCihGkfXcpLt0zh1uM(void *param);
extern int brk_sym_pawrBcast_0PNup0d8oI1288mfULNW(void *param);
extern int brk_sym_pawrBcast_0Wq1DOQE0eOWEGV2grxM(void *param);
extern int brk_sym_pawrBcast_1y9l4P0a3qWUSydU3cDY(void *param);
extern int brk_sym_pawrBcast_3Fe1AkLrn3EG25GkGfL4(void *param);
extern int brk_sym_pawrBcast_7jK56jlcfafMtoQgLg6t(void *param);
extern int brk_sym_pawrBcast_7qGF1F9weQ363Ml7Gj0n(void *param);
extern int brk_sym_pawrBcast_JHmbFJCpV155hIYyDVQ8(void *param);
@@ -114,6 +116,7 @@ extern int brk_sym_pawrBcast_SB1LBCzybPoDd0XYyLM8(void *param);
extern int brk_sym_pawrBcast_WNd7Y6n56cZrTlhBjFRU(void *param);
extern int brk_sym_pawrBcast_eBH7HrPT8y2Fj9382el3(void *param);
extern int brk_sym_pawrBcast_g6t1IjxRbcv5GUq1uXIA(void *param);
extern int brk_sym_pawrBcast_ivWxQ61JhFEBhkuxoZhM(void *param);
extern int brk_sym_pawrBcast_lk2Wpy4u04ukjtC7Ijcb(void *param);
extern int brk_sym_pawrBcast_on08yxBjym4I0iV3tlPo(void *param);
extern int brk_sym_pawrBcast_sSbQFGKMJszbA895ddLO(void *param);
@@ -270,6 +273,12 @@ const void * const _adv_linear_broker_flash[] = BTDM_BROKER_NODE_DEF_FLASH(
[13] = BTDM_BROKER_ENTRY_DEF_FLASH(
brk_sym_pawrBcast_WNd7Y6n56cZrTlhBjFRU,
),
[14] = BTDM_BROKER_ENTRY_DEF_FLASH(
brk_sym_pawrBcast_3Fe1AkLrn3EG25GkGfL4,
),
[15] = BTDM_BROKER_ENTRY_DEF_FLASH(
brk_sym_pawrBcast_ivWxQ61JhFEBhkuxoZhM,
),
#endif /* UC_BLE_CTRL_PAWR_BCAST_SUPPORTED */
);
#endif /* UC_BT_CTRL_BLE_IS_ENABLE */
@@ -735,65 +744,72 @@ int
btdm_broker_init(void)
{
#if UC_BT_CTRL_BLE_IS_ENABLE
if (r_btdm_broker_linear_selfcheck(_adv_linear_broker_flash, false)) {
extern const char *ble_controller_get_compile_version(void);
if (memcmp(ble_controller_get_compile_version(), "4c3f1e9", 7) != 0) {
return -1;
}
#endif /* UC_BT_CTRL_BLE_IS_ENABLE */
#if UC_BT_CTRL_BLE_IS_ENABLE
if (r_btdm_broker_linear_selfcheck(_base_linear_broker_flash, false)) {
if (r_btdm_broker_linear_selfcheck(_adv_linear_broker_flash, false)) {
return -2;
}
#endif /* UC_BT_CTRL_BLE_IS_ENABLE */
if (r_btdm_broker_linear_selfcheck(_btdm_hal_linear_broker_ram, true)) {
#if UC_BT_CTRL_BLE_IS_ENABLE
if (r_btdm_broker_linear_selfcheck(_base_linear_broker_flash, false)) {
return -3;
}
#endif /* UC_BT_CTRL_BLE_IS_ENABLE */
if (r_btdm_broker_linear_selfcheck(_btdm_hci_linear_broker_flash, false)) {
if (r_btdm_broker_linear_selfcheck(_btdm_hal_linear_broker_ram, true)) {
return -4;
}
if (r_btdm_broker_linear_selfcheck(_btdm_sched_linear_broker_flash, false)) {
if (r_btdm_broker_linear_selfcheck(_btdm_hci_linear_broker_flash, false)) {
return -5;
}
if (r_btdm_broker_linear_selfcheck(_btdm_sched_linear_broker_ram, true)) {
if (r_btdm_broker_linear_selfcheck(_btdm_sched_linear_broker_flash, false)) {
return -6;
}
if (r_btdm_broker_linear_selfcheck(_btdm_sleep_linear_broker_flash, false)) {
if (r_btdm_broker_linear_selfcheck(_btdm_sched_linear_broker_ram, true)) {
return -7;
}
if (r_btdm_broker_linear_selfcheck(_btdm_task_linear_broker_flash, false)) {
if (r_btdm_broker_linear_selfcheck(_btdm_sleep_linear_broker_flash, false)) {
return -8;
}
if (r_btdm_broker_linear_selfcheck(_btdm_task_linear_broker_flash, false)) {
return -9;
}
#if UC_BT_CTRL_BLE_IS_ENABLE && UC_BLE_CTRL_CONN_ENABLED
if (r_btdm_broker_linear_selfcheck(_conn_linear_broker_flash, false)) {
return -9;
return -10;
}
#endif /* UC_BT_CTRL_BLE_IS_ENABLE && UC_BLE_CTRL_CONN_ENABLED */
#if UC_BT_CTRL_BLE_IS_ENABLE
if (r_btdm_broker_linear_selfcheck(_nrtIsr_linear_broker_flash, false)) {
return -10;
}
#endif /* UC_BT_CTRL_BLE_IS_ENABLE */
#if UC_BT_CTRL_BLE_IS_ENABLE
if (r_btdm_broker_linear_selfcheck(_perAdv_linear_broker_flash, false)) {
return -11;
}
#endif /* UC_BT_CTRL_BLE_IS_ENABLE */
#if UC_BT_CTRL_BLE_IS_ENABLE
if (r_btdm_broker_linear_selfcheck(_sync_linear_broker_flash, false)) {
if (r_btdm_broker_linear_selfcheck(_perAdv_linear_broker_flash, false)) {
return -12;
}
#endif /* UC_BT_CTRL_BLE_IS_ENABLE */
#if UC_BT_CTRL_BLE_IS_ENABLE
if (r_btdm_broker_linear_selfcheck(_sync_linear_broker_flash, false)) {
return -13;
}
#endif /* UC_BT_CTRL_BLE_IS_ENABLE */
return 0;
}
+34 -18
View File
@@ -8,6 +8,7 @@
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include "btdm_user_cfg.h"
#if UC_BT_CTRL_BLE_IS_ENABLE
#include "ble_user_cfg.h"
@@ -111,6 +112,7 @@ extern int brk_sym_pawrBcast_02YCihGkfXcpLt0zh1uM(void *param);
extern int brk_sym_pawrBcast_0PNup0d8oI1288mfULNW(void *param);
extern int brk_sym_pawrBcast_0Wq1DOQE0eOWEGV2grxM(void *param);
extern int brk_sym_pawrBcast_1y9l4P0a3qWUSydU3cDY(void *param);
extern int brk_sym_pawrBcast_3Fe1AkLrn3EG25GkGfL4(void *param);
extern int brk_sym_pawrBcast_7jK56jlcfafMtoQgLg6t(void *param);
extern int brk_sym_pawrBcast_7qGF1F9weQ363Ml7Gj0n(void *param);
extern int brk_sym_pawrBcast_JHmbFJCpV155hIYyDVQ8(void *param);
@@ -122,6 +124,7 @@ extern int brk_sym_pawrBcast_SB1LBCzybPoDd0XYyLM8(void *param);
extern int brk_sym_pawrBcast_WNd7Y6n56cZrTlhBjFRU(void *param);
extern int brk_sym_pawrBcast_eBH7HrPT8y2Fj9382el3(void *param);
extern int brk_sym_pawrBcast_g6t1IjxRbcv5GUq1uXIA(void *param);
extern int brk_sym_pawrBcast_ivWxQ61JhFEBhkuxoZhM(void *param);
extern int brk_sym_pawrBcast_lk2Wpy4u04ukjtC7Ijcb(void *param);
extern int brk_sym_pawrBcast_on08yxBjym4I0iV3tlPo(void *param);
extern int brk_sym_pawrBcast_sSbQFGKMJszbA895ddLO(void *param);
@@ -291,6 +294,12 @@ const void * const _adv_linear_broker_flash[] = BTDM_BROKER_NODE_DEF_FLASH(
[13] = BTDM_BROKER_ENTRY_DEF_FLASH(
brk_sym_pawrBcast_WNd7Y6n56cZrTlhBjFRU,
),
[14] = BTDM_BROKER_ENTRY_DEF_FLASH(
brk_sym_pawrBcast_3Fe1AkLrn3EG25GkGfL4,
),
[15] = BTDM_BROKER_ENTRY_DEF_FLASH(
brk_sym_pawrBcast_ivWxQ61JhFEBhkuxoZhM,
),
#endif /* UC_BLE_CTRL_PAWR_BCAST_SUPPORTED */
);
#endif /* UC_BT_CTRL_BLE_IS_ENABLE */
@@ -837,73 +846,80 @@ int
btdm_broker_init(void)
{
#if UC_BT_CTRL_BLE_IS_ENABLE
if (r_btdm_broker_linear_selfcheck(_adv_linear_broker_flash, false)) {
extern const char *ble_controller_get_compile_version(void);
if (memcmp(ble_controller_get_compile_version(), "4c3f1e9", 7) != 0) {
return -1;
}
#endif /* UC_BT_CTRL_BLE_IS_ENABLE */
#if UC_BT_CTRL_BLE_IS_ENABLE
if (r_btdm_broker_linear_selfcheck(_base_linear_broker_flash, false)) {
if (r_btdm_broker_linear_selfcheck(_adv_linear_broker_flash, false)) {
return -2;
}
#endif /* UC_BT_CTRL_BLE_IS_ENABLE */
if (r_btdm_broker_linear_selfcheck(_btdm_coex_linear_broker_flash, false)) {
#if UC_BT_CTRL_BLE_IS_ENABLE
if (r_btdm_broker_linear_selfcheck(_base_linear_broker_flash, false)) {
return -3;
}
#endif /* UC_BT_CTRL_BLE_IS_ENABLE */
if (r_btdm_broker_linear_selfcheck(_btdm_hal_linear_broker_ram, true)) {
if (r_btdm_broker_linear_selfcheck(_btdm_coex_linear_broker_flash, false)) {
return -4;
}
if (r_btdm_broker_linear_selfcheck(_btdm_hci_linear_broker_flash, false)) {
if (r_btdm_broker_linear_selfcheck(_btdm_hal_linear_broker_ram, true)) {
return -5;
}
if (r_btdm_broker_linear_selfcheck(_btdm_sched_linear_broker_flash, false)) {
if (r_btdm_broker_linear_selfcheck(_btdm_hci_linear_broker_flash, false)) {
return -6;
}
if (r_btdm_broker_linear_selfcheck(_btdm_sched_linear_broker_ram, true)) {
if (r_btdm_broker_linear_selfcheck(_btdm_sched_linear_broker_flash, false)) {
return -7;
}
if (r_btdm_broker_linear_selfcheck(_btdm_sleep_linear_broker_flash, false)) {
if (r_btdm_broker_linear_selfcheck(_btdm_sched_linear_broker_ram, true)) {
return -8;
}
if (r_btdm_broker_linear_selfcheck(_btdm_sleep_linear_broker_ram, true)) {
if (r_btdm_broker_linear_selfcheck(_btdm_sleep_linear_broker_flash, false)) {
return -9;
}
if (r_btdm_broker_linear_selfcheck(_btdm_task_linear_broker_flash, false)) {
if (r_btdm_broker_linear_selfcheck(_btdm_sleep_linear_broker_ram, true)) {
return -10;
}
if (r_btdm_broker_linear_selfcheck(_btdm_task_linear_broker_flash, false)) {
return -11;
}
#if UC_BT_CTRL_BLE_IS_ENABLE && UC_BLE_CTRL_CONN_ENABLED
if (r_btdm_broker_linear_selfcheck(_conn_linear_broker_flash, false)) {
return -11;
return -12;
}
#endif /* UC_BT_CTRL_BLE_IS_ENABLE && UC_BLE_CTRL_CONN_ENABLED */
#if UC_BT_CTRL_BLE_IS_ENABLE
if (r_btdm_broker_linear_selfcheck(_nrtIsr_linear_broker_flash, false)) {
return -12;
}
#endif /* UC_BT_CTRL_BLE_IS_ENABLE */
#if UC_BT_CTRL_BLE_IS_ENABLE
if (r_btdm_broker_linear_selfcheck(_perAdv_linear_broker_flash, false)) {
return -13;
}
#endif /* UC_BT_CTRL_BLE_IS_ENABLE */
#if UC_BT_CTRL_BLE_IS_ENABLE
if (r_btdm_broker_linear_selfcheck(_sync_linear_broker_flash, false)) {
if (r_btdm_broker_linear_selfcheck(_perAdv_linear_broker_flash, false)) {
return -14;
}
#endif /* UC_BT_CTRL_BLE_IS_ENABLE */
#if UC_BT_CTRL_BLE_IS_ENABLE
if (r_btdm_broker_linear_selfcheck(_sync_linear_broker_flash, false)) {
return -15;
}
#endif /* UC_BT_CTRL_BLE_IS_ENABLE */
return 0;
}
+63 -22
View File
@@ -164,15 +164,36 @@ typedef enum esp_power_level esp_power_level_t;
typedef enum esp_ble_power_type esp_ble_power_type_t;
/**
* @brief The enhanced type of which tx power, could set Advertising/Connection/Default and etc.
* @brief The enhanced type of which TX power, could set Advertising/Connection/Default and etc.
*
* This TX power type is used for the API `esp_ble_tx_power_set_enhanced()` and
* `esp_ble_tx_power_get_enhanced()`.
*
* @note
* 1. The connection / ISO TX power can only be set after the corresponding
* link (ACL / BIS / CIS) is established. After disconnecting or
* terminating the ISO stream, the corresponding TX power will not be affected.
* 2. `ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT` can be used to set the TX power for
* power types that have not been set before, including Advertising, Scan,
* Init, Connection and ISO types (BIG control / BIS / CIS).
* It will not affect the TX power values which have already been set for
* those power types.
* 3. If none of power type is set, the system will use the menuconfig default
* TX power for all power types.
*/
typedef enum {
ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT = 0,
ESP_BLE_ENHANCED_PWR_TYPE_ADV,
ESP_BLE_ENHANCED_PWR_TYPE_SCAN,
ESP_BLE_ENHANCED_PWR_TYPE_INIT,
ESP_BLE_ENHANCED_PWR_TYPE_CONN,
ESP_BLE_ENHANCED_PWR_TYPE_MAX,
ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT = 0, /*!< TX power for states that have not been set before
(including unset ISO types) */
ESP_BLE_ENHANCED_PWR_TYPE_ADV, /*!< TX power for Advertising state */
ESP_BLE_ENHANCED_PWR_TYPE_SCAN, /*!< TX power for Scanning state */
ESP_BLE_ENHANCED_PWR_TYPE_INIT, /*!< TX power for Initiating state */
ESP_BLE_ENHANCED_PWR_TYPE_CONN, /*!< TX power for Connection state */
#if SOC_BLE_ISO_SUPPORTED
ESP_BLE_ENHANCED_PWR_TYPE_BIG_CTRL, /*!< TX power for BIG control subevents */
ESP_BLE_ENHANCED_PWR_TYPE_BIS, /*!< TX power for BIS */
ESP_BLE_ENHANCED_PWR_TYPE_CIS, /*!< TX power for CIS */
#endif // SOC_BLE_ISO_SUPPORTED
ESP_BLE_ENHANCED_PWR_TYPE_MAX, /*!< Reserved */
} esp_ble_enhanced_power_type_t;
#if SOC_BLE_ISO_SUPPORTED
@@ -311,26 +332,46 @@ esp_err_t esp_ble_tx_power_set(esp_ble_power_type_t power_type, esp_power_level_
esp_power_level_t esp_ble_tx_power_get(esp_ble_power_type_t power_type);
/**
* @brief ENHANCED API for Setting BLE TX power
* Connection Tx power should only be set after connection created.
* @param power_type : The enhanced type of which tx power, could set
* Advertising/Connection/Default and etc
* @param handle : The handle of Advertising or Connection and the value 0 for other enhanced power
* types.
* @param power_level: Power level(index) corresponding to absolute value(dbm)
* @return ESP_OK - success, other - failed
* @brief Set BLE TX power for the specified Advertising, Connection or ISO handle
*
* For the TX power type: `ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT`, `ESP_BLE_ENHANCED_PWR_TYPE_SCAN`,
* `ESP_BLE_ENHANCED_PWR_TYPE_INIT`, this API will ignore the input handle number, and set 0
* internally. Setting `ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT` also covers unset ISO power types
* (BIG control / BIS / CIS).
*
* For the TX power type: `ESP_BLE_ENHANCED_PWR_TYPE_ADV`, `ESP_BLE_ENHANCED_PWR_TYPE_CONN`,
* and ISO types `ESP_BLE_ENHANCED_PWR_TYPE_BIG_CTRL` / `ESP_BLE_ENHANCED_PWR_TYPE_BIS` /
* `ESP_BLE_ENHANCED_PWR_TYPE_CIS` (when `SOC_BLE_ISO_SUPPORTED`), this API will set the TX power
* for the target handle.
*
* @note Connection / ISO TX power should only be set after the corresponding link is created.
*
* @param power_type The enhanced type of TX power
* @param handle The handle of Advertising, Connection, BIG, BIS or CIS; use 0 for other
* enhanced power types
* @param power_level Power level (index) corresponding to absolute value (dBm)
* @return ESP_OK - success, other - failed
*/
esp_err_t esp_ble_tx_power_set_enhanced(esp_ble_enhanced_power_type_t power_type, uint16_t handle,
esp_power_level_t power_level);
/**
* @brief ENHANCED API of Getting BLE TX power
* Connection Tx power should only be get after connection created.
* @param power_type : The enhanced type of which tx power, could set
* Advertising/Connection/Default and etc
* @param handle : The handle of Advertising or Connection and the value 0 for other enhanced power
* types.
* @return >= 0 - Power level, < 0 - Invalid
* @brief Get BLE TX power of the specified Advertising, Connection or ISO handle
*
* For the TX power type: `ESP_BLE_ENHANCED_PWR_TYPE_DEFAULT`, `ESP_BLE_ENHANCED_PWR_TYPE_SCAN`,
* `ESP_BLE_ENHANCED_PWR_TYPE_INIT`, this API will ignore the input handle number.
*
* For the TX power type: `ESP_BLE_ENHANCED_PWR_TYPE_ADV`, `ESP_BLE_ENHANCED_PWR_TYPE_CONN`,
* and ISO types `ESP_BLE_ENHANCED_PWR_TYPE_BIG_CTRL` / `ESP_BLE_ENHANCED_PWR_TYPE_BIS` /
* `ESP_BLE_ENHANCED_PWR_TYPE_CIS` (when `SOC_BLE_ISO_SUPPORTED`), this API will return the TX
* power of the target handle.
*
* @note Connection / ISO TX power should only be get after the corresponding link is created.
*
* @param power_type The enhanced type of TX power
* @param handle The handle of Advertising, Connection, BIG, BIS or CIS; use 0 for other
* enhanced power types
* @return >= 0 - Power level, < 0 - Invalid
*/
esp_power_level_t esp_ble_tx_power_get_enhanced(esp_ble_enhanced_power_type_t power_type,
uint16_t handle);
@@ -400,6 +400,11 @@ esp_ble_tx_power_set_enhanced(esp_ble_enhanced_power_type_t power_type, uint16_t
break;
case ESP_BLE_ENHANCED_PWR_TYPE_ADV:
case ESP_BLE_ENHANCED_PWR_TYPE_CONN:
#if SOC_BLE_ISO_SUPPORTED
case ESP_BLE_ENHANCED_PWR_TYPE_BIG_CTRL:
case ESP_BLE_ENHANCED_PWR_TYPE_BIS:
case ESP_BLE_ENHANCED_PWR_TYPE_CIS:
#endif // SOC_BLE_ISO_SUPPORTED
if (r_ble_txpwr_set(power_type, handle, power_level) == 0) {
stat = ESP_OK;
}
@@ -464,6 +469,11 @@ esp_ble_tx_power_get_enhanced(esp_ble_enhanced_power_type_t power_type, uint16_t
break;
case ESP_BLE_ENHANCED_PWR_TYPE_ADV:
case ESP_BLE_ENHANCED_PWR_TYPE_CONN:
#if SOC_BLE_ISO_SUPPORTED
case ESP_BLE_ENHANCED_PWR_TYPE_BIG_CTRL:
case ESP_BLE_ENHANCED_PWR_TYPE_BIS:
case ESP_BLE_ENHANCED_PWR_TYPE_CIS:
#endif // SOC_BLE_ISO_SUPPORTED
tx_level = r_ble_txpwr_get(power_type, handle);
break;
default: