From ad7a2831b205f9c365359e5bd21b395a3086fa63 Mon Sep 17 00:00:00 2001 From: chenjianhua Date: Tue, 19 Dec 2023 11:37:01 +0800 Subject: [PATCH 1/3] feat(bt/bluedroid): Make the max number of bond device to be configurable --- components/bt/host/bluedroid/Kconfig.in | 8 ++++++++ .../common/include/common/bluedroid_user_config.h | 6 ++++++ .../bt/host/bluedroid/common/include/common/bt_target.h | 8 ++------ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/components/bt/host/bluedroid/Kconfig.in b/components/bt/host/bluedroid/Kconfig.in index 4f0fa20b7b..ca4c7f6932 100644 --- a/components/bt/host/bluedroid/Kconfig.in +++ b/components/bt/host/bluedroid/Kconfig.in @@ -1088,6 +1088,14 @@ config BT_SMP_ENABLE depends on BT_BLUEDROID_ENABLED default BT_CLASSIC_ENABLED || BT_BLE_SMP_ENABLE +config BT_SMP_MAX_BONDS + int "BT/BLE maximum bond device count" + depends on BT_SMP_ENABLE + range 1 32 + default 15 + help + The number of security records for peer devices. + config BT_BLE_ACT_SCAN_REP_ADV_SCAN bool "Report adv data and scan response individually when BLE active scan" depends on BT_BLUEDROID_ENABLED && BT_BLE_ENABLED diff --git a/components/bt/host/bluedroid/common/include/common/bluedroid_user_config.h b/components/bt/host/bluedroid/common/include/common/bluedroid_user_config.h index 7fc6c8df63..e557ffcdde 100644 --- a/components/bt/host/bluedroid/common/include/common/bluedroid_user_config.h +++ b/components/bt/host/bluedroid/common/include/common/bluedroid_user_config.h @@ -210,6 +210,12 @@ #define UC_BT_SMP_SLAVE_CON_PARAMS_UPD_ENABLE FALSE #endif +#ifdef CONFIG_BT_SMP_MAX_BONDS +#define UC_BT_SMP_MAX_BONDS CONFIG_BT_SMP_MAX_BONDS +#else +#define UC_BT_SMP_MAX_BONDS 8 +#endif + //Device Nane Maximum Length #ifdef CONFIG_BT_MAX_DEVICE_NAME_LEN #define UC_MAX_LOC_BD_NAME_LEN CONFIG_BT_MAX_DEVICE_NAME_LEN diff --git a/components/bt/host/bluedroid/common/include/common/bt_target.h b/components/bt/host/bluedroid/common/include/common/bt_target.h index bb47f9a643..c1d73b10f7 100644 --- a/components/bt/host/bluedroid/common/include/common/bt_target.h +++ b/components/bt/host/bluedroid/common/include/common/bt_target.h @@ -886,13 +886,9 @@ #define BTM_DEFAULT_SCO_MODE 2 #endif -/* The number of security records for peer devices. 100 AS Default*/ +/* The number of security records for peer devices. 15 AS Default*/ #ifndef BTM_SEC_MAX_DEVICE_RECORDS -#if SMP_INCLUDED == TRUE -#define BTM_SEC_MAX_DEVICE_RECORDS 15 // 100 -#else -#define BTM_SEC_MAX_DEVICE_RECORDS 8 -#endif /* SMP_INCLUDED == TRUE */ +#define BTM_SEC_MAX_DEVICE_RECORDS UC_BT_SMP_MAX_BONDS #endif /* The number of security records for services. 32 AS Default*/ From cf1008a06417cd6b65a7ef06a2314c3cb1ca8c8a Mon Sep 17 00:00:00 2001 From: chenjianhua Date: Wed, 6 Dec 2023 15:26:42 +0800 Subject: [PATCH 2/3] fix(bt/example): Fixed UART HCI when flow control is off on ESP32C3 --- .../controller_hci_uart_esp32c3_and_esp32s3/main/main.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/examples/bluetooth/hci/controller_hci_uart_esp32c3_and_esp32s3/main/main.c b/examples/bluetooth/hci/controller_hci_uart_esp32c3_and_esp32s3/main/main.c index 7c1f2b3423..adce67652c 100644 --- a/examples/bluetooth/hci/controller_hci_uart_esp32c3_and_esp32s3/main/main.c +++ b/examples/bluetooth/hci/controller_hci_uart_esp32c3_and_esp32s3/main/main.c @@ -29,12 +29,6 @@ static const char *tag = "UHCI"; #define GPIO_OUTPUT_PIN_SEL ((1ULL< Date: Tue, 16 Jan 2024 10:48:48 +0800 Subject: [PATCH 3/3] feat(bt/bluedroid): Support get status of bluedroid host --- .../bt/host/bluedroid/bta/gatt/bta_gattc_co.c | 4 + .../host/bluedroid/bta/gatt/bta_gattc_main.c | 13 ++++ .../host/bluedroid/bta/gatt/bta_gatts_main.c | 13 ++++ .../bt/host/bluedroid/btc/core/btc_main.c | 76 ++++++++++++++++++- .../host/bluedroid/btc/include/btc/btc_main.h | 14 +++- .../bt/host/bluedroid/stack/btm/btm_ble.c | 23 ++++++ .../bt/host/bluedroid/stack/btm/btm_main.c | 33 ++++++++ .../bt/host/bluedroid/stack/gatt/gatt_main.c | 16 ++++ 8 files changed, 190 insertions(+), 2 deletions(-) diff --git a/components/bt/host/bluedroid/bta/gatt/bta_gattc_co.c b/components/bt/host/bluedroid/bta/gatt/bta_gattc_co.c index 3d5394fb1e..8ec3a55dff 100644 --- a/components/bt/host/bluedroid/bta/gatt/bta_gattc_co.c +++ b/components/bt/host/bluedroid/bta/gatt/bta_gattc_co.c @@ -510,6 +510,10 @@ UINT8 bta_gattc_co_find_hash_in_cache(hash_key_t hash_key) UINT8 bta_gattc_co_get_addr_num(void) { + if (cache_env == NULL) { + return 0; + } + return cache_env->num_addr; } diff --git a/components/bt/host/bluedroid/bta/gatt/bta_gattc_main.c b/components/bt/host/bluedroid/bta/gatt/bta_gattc_main.c index 1b7cde80d0..0cc55995a5 100644 --- a/components/bt/host/bluedroid/bta/gatt/bta_gattc_main.c +++ b/components/bt/host/bluedroid/bta/gatt/bta_gattc_main.c @@ -534,4 +534,17 @@ void bta_gattc_deinit(void) FREE_AND_RESET(bta_gattc_cb_ptr); #endif /* #if BTA_DYNAMIC_MEMORY */ } + +uint8_t bta_gattc_cl_rcb_active_count(void) +{ + uint8_t count = 0; + + for (uint8_t i = 0; i < BTA_GATTC_CL_MAX; i ++) { + if (bta_gattc_cb.cl_rcb[i].in_use) { + count++; + } + } + + return count; +} #endif /* GATTC_INCLUDED == TRUE && BLE_INCLUDED == TRUE */ diff --git a/components/bt/host/bluedroid/bta/gatt/bta_gatts_main.c b/components/bt/host/bluedroid/bta/gatt/bta_gatts_main.c index 299851491c..fe83d151bb 100644 --- a/components/bt/host/bluedroid/bta/gatt/bta_gatts_main.c +++ b/components/bt/host/bluedroid/bta/gatt/bta_gatts_main.c @@ -152,4 +152,17 @@ void bta_gatts_deinit(void) #endif /* #if BTA_DYNAMIC_MEMORY */ } +uint8_t bta_gatts_srvc_active_count(void) +{ + uint8_t count = 0; + + for (uint8_t i = 0; i < BTA_GATTS_MAX_SRVC_NUM; i ++) { + if (bta_gatts_cb.srvc_cb[i].in_use) { + count++; + } + } + + return count; +} + #endif /* GATTS_INCLUDED */ diff --git a/components/bt/host/bluedroid/btc/core/btc_main.c b/components/bt/host/bluedroid/btc/core/btc_main.c index 02e4bbc1e7..0b9b016de2 100644 --- a/components/bt/host/bluedroid/btc/core/btc_main.c +++ b/components/bt/host/bluedroid/btc/core/btc_main.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -116,3 +116,77 @@ void btc_main_call_handler(btc_msg_t *msg) break; } } + +uint32_t btc_get_ble_status(void) +{ + uint32_t status = BTC_BLE_STATUS_IDLE; + + #if (BLE_INCLUDED == TRUE) + // Number of active advertising + extern uint8_t btm_ble_adv_active_count(void); + if (btm_ble_adv_active_count()) { + status |= BIT(BTC_BLE_STATUS_ADV); + } + + // Number of active scanning + extern uint8_t btm_ble_scan_active_count(void); + if (btm_ble_scan_active_count()) { + status |= BIT(BTC_BLE_STATUS_SCAN); + } + + // Number of active GATT tcb + extern uint8_t gatt_tcb_active_count(void); + if (gatt_tcb_active_count()) { + status |= BIT(BTC_BLE_STATUS_CONN); + } + + #if (SMP_INCLUDED == TRUE) + // Number of saved bonded devices + if (btc_storage_get_num_ble_bond_devices()) { + status |= BIT(BTC_BLE_STATUS_BOND); + } + #endif + #endif + + // Number of recorded devices + extern uint8_t btdm_sec_dev_active_count(void); + if (btdm_sec_dev_active_count()) { + status |= BIT(BTC_BLE_STATUS_DEV); + } + + // Number of active ACL connection + extern uint8_t btm_acl_active_count(void); + if (btm_acl_active_count()) { + status |= BIT(BTC_BLE_STATUS_CONN); + } + + // Number of active L2C plcb + extern uint8_t l2cu_plcb_active_count(void); + if (l2cu_plcb_active_count()) { + status |= BIT(BTC_BLE_STATUS_CONN); + } + + #if (GATTC_INCLUDED == TRUE) + // Number of registered GATTC APP + extern uint8_t bta_gattc_cl_rcb_active_count(void); + if (bta_gattc_cl_rcb_active_count()) { + status |= BIT(BTC_BLE_STATUS_GATTC_APP); + } + + // Number of saved GATTC cache + extern UINT8 bta_gattc_co_get_addr_num(void); + if (bta_gattc_co_get_addr_num()) { + status |= BIT(BTC_BLE_STATUS_GATTC_CACHE); + } + #endif + + #if (GATTS_INCLUDED == TRUE) + // Number of registered GATTS service + extern uint8_t bta_gatts_srvc_active_count(void); + if (bta_gatts_srvc_active_count()) { + status |= BIT(BTC_BLE_STATUS_GATTS_SRVC); + } + #endif + + return status; +} diff --git a/components/bt/host/bluedroid/btc/include/btc/btc_main.h b/components/bt/host/bluedroid/btc/include/btc/btc_main.h index 38be7ab7d8..935dc77e10 100644 --- a/components/bt/host/bluedroid/btc/include/btc/btc_main.h +++ b/components/bt/host/bluedroid/btc/include/btc/btc_main.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -28,6 +28,18 @@ typedef enum { BTC_MAIN_FUTURE_NUM, } btc_main_future_type_t; +#define BTC_BLE_STATUS_IDLE 0 +typedef enum { + BTC_BLE_STATUS_ADV = 0, // Advertising exist + BTC_BLE_STATUS_SCAN, // Scanning exist + BTC_BLE_STATUS_CONN, // Connection exist + BTC_BLE_STATUS_DEV, // Device record exist + BTC_BLE_STATUS_BOND, // Bond info exist + BTC_BLE_STATUS_GATTC_CACHE, // GATTC cache exist + BTC_BLE_STATUS_GATTC_APP, // GATTC application exist + BTC_BLE_STATUS_GATTS_SRVC, // GATTS service exist +} tBTC_BLE_STATUS; + future_t **btc_main_get_future_p(btc_main_future_type_t type); #if 0 diff --git a/components/bt/host/bluedroid/stack/btm/btm_ble.c b/components/bt/host/bluedroid/stack/btm/btm_ble.c index 69e5404a2e..afa46b8a7e 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_ble.c +++ b/components/bt/host/bluedroid/stack/btm/btm_ble.c @@ -2907,5 +2907,28 @@ BOOLEAN btm_get_current_conn_params(BD_ADDR bda, UINT16 *interval, UINT16 *laten return FALSE; } +uint8_t btm_ble_adv_active_count(void) +{ + uint8_t count = 0; + tBTM_BLE_INQ_CB *p_cb = &btm_cb.ble_ctr_cb.inq_var; + + if (p_cb->state & BTM_BLE_ADVERTISING) { + count++; + } + + return count; +} + +uint8_t btm_ble_scan_active_count(void) +{ + uint8_t count = 0; + tBTM_BLE_INQ_CB *p_cb = &btm_cb.ble_ctr_cb.inq_var; + + if (p_cb->state & BTM_BLE_SCANNING) { + count++; + } + + return count; +} #endif /* BLE_INCLUDED */ diff --git a/components/bt/host/bluedroid/stack/btm/btm_main.c b/components/bt/host/bluedroid/stack/btm/btm_main.c index 5ddfa85a99..05ef1837fa 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_main.c +++ b/components/bt/host/bluedroid/stack/btm/btm_main.c @@ -117,3 +117,36 @@ void btm_free(void) btm_ble_sem_free(); #endif } + +uint8_t btm_acl_active_count(void) +{ + list_node_t *p_node = NULL; + tACL_CONN *p_acl_conn = NULL; + uint8_t count = 0; + + for (p_node = list_begin(btm_cb.p_acl_db_list); p_node; p_node = list_next(p_node)) { + p_acl_conn = list_node(p_node); + if (p_acl_conn && p_acl_conn->in_use) { + count++; + } + } + + return count; +} + +uint8_t btdm_sec_dev_active_count(void) +{ + tBTM_SEC_DEV_REC *p_dev_rec = NULL; + list_node_t *p_node = NULL; + uint8_t count = 0; + + /* First look for the non-paired devices for the oldest entry */ + for (p_node = list_begin(btm_cb.p_sec_dev_rec_list); p_node; p_node = list_next(p_node)) { + p_dev_rec = list_node(p_node); + if (p_dev_rec && (p_dev_rec->sec_flags & BTM_SEC_IN_USE)) { + count++; + } + } + + return count; +} diff --git a/components/bt/host/bluedroid/stack/gatt/gatt_main.c b/components/bt/host/bluedroid/stack/gatt/gatt_main.c index dfce09a67f..d76aefe95b 100644 --- a/components/bt/host/bluedroid/stack/gatt/gatt_main.c +++ b/components/bt/host/bluedroid/stack/gatt/gatt_main.c @@ -1231,4 +1231,20 @@ void gatt_set_local_mtu(uint16_t mtu) gatt_default.local_mtu = mtu; } +uint8_t gatt_tcb_active_count(void) +{ + tGATT_TCB *p_tcb = NULL; + list_node_t *p_node = NULL; + uint8_t count = 0; + + for(p_node = list_begin(gatt_cb.p_tcb_list); p_node; p_node = list_next(p_node)) { + p_tcb = list_node(p_node); + if (p_tcb && p_tcb->in_use && (p_tcb->ch_state != GATT_CH_CLOSE)) { + count++; + } + } + + return count; +} + #endif /* BLE_INCLUDED */