diff --git a/components/bt/controller/esp32h4/btdm_broker.c b/components/bt/controller/esp32h4/btdm_broker.c index fc20b71c0c2..822f7cf3969 100644 --- a/components/bt/controller/esp32h4/btdm_broker.c +++ b/components/bt/controller/esp32h4/btdm_broker.c @@ -8,6 +8,7 @@ #include #include +#include #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; } diff --git a/components/bt/controller/esp32s31/btdm_broker.c b/components/bt/controller/esp32s31/btdm_broker.c index 28a4ebf860e..a2c532b4db5 100644 --- a/components/bt/controller/esp32s31/btdm_broker.c +++ b/components/bt/controller/esp32s31/btdm_broker.c @@ -8,6 +8,7 @@ #include #include +#include #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; } diff --git a/components/bt/controller/lib_esp32h4/esp32h4-bt-lib b/components/bt/controller/lib_esp32h4/esp32h4-bt-lib index 104362b2a72..00b5a98c1b6 160000 --- a/components/bt/controller/lib_esp32h4/esp32h4-bt-lib +++ b/components/bt/controller/lib_esp32h4/esp32h4-bt-lib @@ -1 +1 @@ -Subproject commit 104362b2a72b83db9b5389608f1d530ed59277bd +Subproject commit 00b5a98c1b6d82d0eab1a9231fed1e495a391893 diff --git a/components/bt/controller/lib_esp32s31/esp32s31-bt-lib b/components/bt/controller/lib_esp32s31/esp32s31-bt-lib index fadd016c07b..20e84f6ebe5 160000 --- a/components/bt/controller/lib_esp32s31/esp32s31-bt-lib +++ b/components/bt/controller/lib_esp32s31/esp32s31-bt-lib @@ -1 +1 @@ -Subproject commit fadd016c07bdacdd18499c8577cc13227b31c526 +Subproject commit 20e84f6ebe5f278a9d72f8a2676206e0c40d26be diff --git a/components/bt/include/common/btdm_le.h b/components/bt/include/common/btdm_le.h index 9ef9cdee90f..0938502cfd1 100644 --- a/components/bt/include/common/btdm_le.h +++ b/components/bt/include/common/btdm_le.h @@ -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); diff --git a/components/bt/porting_btdm/controller/ble/src/ble.c b/components/bt/porting_btdm/controller/ble/src/ble.c index d378211d092..5d222efefb4 100644 --- a/components/bt/porting_btdm/controller/ble/src/ble.c +++ b/components/bt/porting_btdm/controller/ble/src/ble.c @@ -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: