feat(bt/bluedroid): Support get status of bluedroid host

This commit is contained in:
chenjianhua 2024-01-16 10:48:48 +08:00
parent c6405bda6a
commit a3f5382eaa
8 changed files with 190 additions and 2 deletions

View File

@ -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;
}

View File

@ -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 */

View File

@ -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 */

View File

@ -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;
}

View File

@ -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

View File

@ -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 */

View File

@ -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;
}

View File

@ -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 */