Merge branch 'bugfix/btdm_fix_multi_open_evt_and_clear_blufi_prepare_write_len_v3.1' into 'release/v3.1'

component/bt: fix multi open evt and clear blufi prepare write len(backport v3.1)

See merge request espressif/esp-idf!7327
This commit is contained in:
Jiang Jiang Jian 2020-01-16 11:48:10 +08:00
commit 3c573510a5
4 changed files with 30 additions and 0 deletions

View file

@ -745,6 +745,8 @@ void bta_gattc_conncback(tBTA_GATTC_RCB *p_rcb, tBTA_GATTC_DATA *p_data)
void bta_gattc_disconncback(tBTA_GATTC_RCB *p_rcb, tBTA_GATTC_DATA *p_data) void bta_gattc_disconncback(tBTA_GATTC_RCB *p_rcb, tBTA_GATTC_DATA *p_data)
{ {
if (p_rcb) { if (p_rcb) {
// Clear up the notification registration information by BD_ADDR
bta_gattc_clear_notif_registration_by_bda(p_rcb, p_data->int_conn.remote_bda);
bta_gattc_send_disconnect_cback(p_rcb, bta_gattc_send_disconnect_cback(p_rcb,
p_data->int_conn.reason, p_data->int_conn.reason,
p_data->int_conn.remote_bda, p_data->int_conn.remote_bda,

View file

@ -596,6 +596,30 @@ void bta_gattc_clear_notif_registration(tBTA_GATTC_SERV *p_srcb, UINT16 conn_id,
return; return;
} }
/*******************************************************************************
**
** Function bta_gattc_clear_notif_registration_by_bda
**
** Description Clear up the notification registration information by BD_ADDR.
**
**
** Returns None.
**
*******************************************************************************/
void bta_gattc_clear_notif_registration_by_bda(tBTA_GATTC_RCB *p_clrcb, BD_ADDR remote_bda)
{
if(p_clrcb == NULL) {
return;
}
for (uint8_t i = 0 ; i < BTA_GATTC_NOTIF_REG_MAX; i ++) {
if (p_clrcb->notif_reg[i].in_use &&
!bdcmp(p_clrcb->notif_reg[i].remote_bda, remote_bda))
{
memset(&p_clrcb->notif_reg[i], 0, sizeof(tBTA_GATTC_NOTIF_REG));
}
}
}
/******************************************************************************* /*******************************************************************************
** **
** Function bta_gattc_mark_bg_conn ** Function bta_gattc_mark_bg_conn

View file

@ -491,6 +491,7 @@ extern BOOLEAN bta_gattc_mark_bg_conn (tBTA_GATTC_IF client_if, BD_ADDR_PTR rem
extern BOOLEAN bta_gattc_check_bg_conn (tBTA_GATTC_IF client_if, BD_ADDR remote_bda, UINT8 role); extern BOOLEAN bta_gattc_check_bg_conn (tBTA_GATTC_IF client_if, BD_ADDR remote_bda, UINT8 role);
extern UINT8 bta_gattc_num_reg_app(void); extern UINT8 bta_gattc_num_reg_app(void);
extern void bta_gattc_clear_notif_registration(tBTA_GATTC_SERV *p_srcb, UINT16 conn_id, UINT16 start_handle, UINT16 end_handle); extern void bta_gattc_clear_notif_registration(tBTA_GATTC_SERV *p_srcb, UINT16 conn_id, UINT16 start_handle, UINT16 end_handle);
extern void bta_gattc_clear_notif_registration_by_bda(tBTA_GATTC_RCB *p_clrcb, BD_ADDR remote_bda);
extern tBTA_GATTC_SERV * bta_gattc_find_srvr_cache(BD_ADDR bda); extern tBTA_GATTC_SERV * bta_gattc_find_srvr_cache(BD_ADDR bda);
/* discovery functions */ /* discovery functions */

View file

@ -147,6 +147,7 @@ static void blufi_profile_cb(tBTA_GATTS_EVT event, tBTA_GATTS *p_data)
if (blufi_env.prepare_buf == NULL) { if (blufi_env.prepare_buf == NULL) {
blufi_env.prepare_buf = osi_malloc(BLUFI_PREPAIR_BUF_MAX_SIZE); blufi_env.prepare_buf = osi_malloc(BLUFI_PREPAIR_BUF_MAX_SIZE);
blufi_env.prepare_len = 0;
if (blufi_env.prepare_buf == NULL) { if (blufi_env.prepare_buf == NULL) {
BLUFI_TRACE_ERROR("Blufi prep no mem\n"); BLUFI_TRACE_ERROR("Blufi prep no mem\n");
status = GATT_NO_RESOURCES; status = GATT_NO_RESOURCES;
@ -174,6 +175,7 @@ static void blufi_profile_cb(tBTA_GATTS_EVT event, tBTA_GATTS *p_data)
if (blufi_env.prepare_buf) { if (blufi_env.prepare_buf) {
osi_free(blufi_env.prepare_buf); osi_free(blufi_env.prepare_buf);
blufi_env.prepare_buf = NULL; blufi_env.prepare_buf = NULL;
blufi_env.prepare_len = 0;
} }
BLUFI_TRACE_ERROR("write data error , error code 0x%x\n", status); BLUFI_TRACE_ERROR("write data error , error code 0x%x\n", status);
return; return;
@ -209,6 +211,7 @@ static void blufi_profile_cb(tBTA_GATTS_EVT event, tBTA_GATTS *p_data)
if (blufi_env.prepare_buf) { if (blufi_env.prepare_buf) {
osi_free(blufi_env.prepare_buf); osi_free(blufi_env.prepare_buf);
blufi_env.prepare_buf = NULL; blufi_env.prepare_buf = NULL;
blufi_env.prepare_len = 0;
} }
break; break;