From 0193e34c628aea0812b5f8abde4d47a28ae8fd26 Mon Sep 17 00:00:00 2001 From: zhiweijian Date: Tue, 14 Jan 2020 17:41:45 +0800 Subject: [PATCH] Component/bt: Fix GATTC trigger open event multiple times --- .../bt/bluedroid/bta/gatt/bta_gattc_act.c | 2 ++ .../bt/bluedroid/bta/gatt/bta_gattc_utils.c | 24 +++++++++++++++++++ .../bta/gatt/include/bta_gattc_int.h | 1 + 3 files changed, 27 insertions(+) diff --git a/components/bt/bluedroid/bta/gatt/bta_gattc_act.c b/components/bt/bluedroid/bta/gatt/bta_gattc_act.c index 73fd86ef2..4ae5eba31 100644 --- a/components/bt/bluedroid/bta/gatt/bta_gattc_act.c +++ b/components/bt/bluedroid/bta/gatt/bta_gattc_act.c @@ -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) { 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, p_data->int_conn.reason, p_data->int_conn.remote_bda, diff --git a/components/bt/bluedroid/bta/gatt/bta_gattc_utils.c b/components/bt/bluedroid/bta/gatt/bta_gattc_utils.c index d20245144..c8ea25236 100644 --- a/components/bt/bluedroid/bta/gatt/bta_gattc_utils.c +++ b/components/bt/bluedroid/bta/gatt/bta_gattc_utils.c @@ -596,6 +596,30 @@ void bta_gattc_clear_notif_registration(tBTA_GATTC_SERV *p_srcb, UINT16 conn_id, 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 diff --git a/components/bt/bluedroid/bta/gatt/include/bta_gattc_int.h b/components/bt/bluedroid/bta/gatt/include/bta_gattc_int.h index ad440c2bc..788670767 100644 --- a/components/bt/bluedroid/bta/gatt/include/bta_gattc_int.h +++ b/components/bt/bluedroid/bta/gatt/include/bta_gattc_int.h @@ -498,6 +498,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 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_by_bda(tBTA_GATTC_RCB *p_clrcb, BD_ADDR remote_bda); extern tBTA_GATTC_SERV * bta_gattc_find_srvr_cache(BD_ADDR bda); /* discovery functions */