diff --git a/components/bt/bluedroid/api/include/api/esp_gap_bt_api.h b/components/bt/bluedroid/api/include/api/esp_gap_bt_api.h index 1156f10da..627cb0418 100644 --- a/components/bt/bluedroid/api/include/api/esp_gap_bt_api.h +++ b/components/bt/bluedroid/api/include/api/esp_gap_bt_api.h @@ -174,6 +174,7 @@ typedef enum { ESP_BT_GAP_KEY_NOTIF_EVT, /*!< Simple Pairing Passkey Notification */ ESP_BT_GAP_KEY_REQ_EVT, /*!< Simple Pairing Passkey request */ ESP_BT_GAP_READ_RSSI_DELTA_EVT, /*!< read rssi event */ + ESP_BT_GAP_REMOVE_BOND_DEV_COMPLETE_EVT, /*!< remove bond device complete event */ ESP_BT_GAP_EVT_MAX, } esp_bt_gap_cb_event_t; @@ -271,6 +272,14 @@ typedef union { struct key_req_param { esp_bd_addr_t bda; /*!< remote bluetooth device address*/ } key_req; /*!< passkey request parameter struct */ + + /** + * @brief ESP_BT_GAP_REMOVE_BOND_DEV_COMPLETE_EVT + */ + struct bt_remove_bond_dev_cmpl_evt_param { + esp_bd_addr_t bda; /*!< remote bluetooth device address*/ + esp_bt_status_t status; /*!< Indicate the remove bond device operation success status */ + }remove_bond_dev_cmpl; /*!< Event parameter of ESP_BT_GAP_REMOVE_BOND_DEV_COMPLETE_EVT */ } esp_bt_gap_cb_param_t; /** diff --git a/components/bt/bluedroid/bta/include/bta/bta_api.h b/components/bt/bluedroid/bta/include/bta/bta_api.h index 0e1dfdc4a..903d1a100 100644 --- a/components/bt/bluedroid/bta/include/bta/bta_api.h +++ b/components/bt/bluedroid/bta/include/bta/bta_api.h @@ -926,7 +926,7 @@ typedef union { tBTA_DM_PIN_REQ pin_req; /* PIN request. */ tBTA_DM_AUTH_CMPL auth_cmpl; /* Authentication complete indication. */ tBTA_DM_AUTHORIZE authorize; /* Authorization request. */ - tBTA_DM_LINK_UP link_up; /* ACL connection down event */ + tBTA_DM_LINK_UP link_up; /* ACL connection up event */ tBTA_DM_LINK_DOWN link_down; /* ACL connection down event */ tBTA_DM_BUSY_LEVEL busy_level; /* System busy level */ tBTA_DM_SP_CFM_REQ cfm_req; /* user confirm request */ @@ -2296,8 +2296,8 @@ extern void BTA_DmBleSetScanRspRaw (UINT8 *p_raw_scan_rsp, UINT32 raw_scan_rsp_l ** Returns None ** *******************************************************************************/ -extern void BTA_DmUpdateDuplicateExceptionalList(UINT8 subcode, UINT32 type, - BD_ADDR device_info, +extern void BTA_DmUpdateDuplicateExceptionalList(UINT8 subcode, UINT32 type, + BD_ADDR device_info, tBTA_UPDATE_DUPLICATE_EXCEPTIONAL_LIST_CMPL_CBACK p_update_duplicate_exceptional_list_cback); /******************************************************************************* diff --git a/components/bt/bluedroid/btc/core/btc_dm.c b/components/bt/bluedroid/btc/core/btc_dm.c index 3af8c8c18..84a0dd1a9 100644 --- a/components/bt/bluedroid/btc/core/btc_dm.c +++ b/components/bt/bluedroid/btc/core/btc_dm.c @@ -506,6 +506,37 @@ static void btc_dm_sp_key_req_evt(tBTA_DM_SP_KEY_REQ *p_key_req) } #endif /// BT_SSP_INCLUDED == TRUE +#if (SMP_INCLUDED == TRUE) +static void btc_dm_dev_unpaired_evt(tBTA_DM_LINK_DOWN *p_link_down) +{ + esp_bt_gap_cb_param_t param; + BTC_TRACE_DEBUG("%s",__func__); + memcpy(param.remove_bond_dev_cmpl.bda, p_link_down->bd_addr, ESP_BD_ADDR_LEN); + btm_set_bond_type_dev(p_link_down->bd_addr, BOND_TYPE_UNKNOWN); + if (p_link_down->status == HCI_SUCCESS) { + //remove the bonded key in the config and nvs flash. + param.remove_bond_dev_cmpl.status = btc_storage_remove_bonded_device((bt_bdaddr_t *)param.remove_bond_dev_cmpl.bda); + } else { + param.remove_bond_dev_cmpl.status = ESP_BT_STATUS_FAIL; + } + +#if (BTC_GAP_BT_INCLUDED == TRUE) + bt_status_t ret; + btc_msg_t msg; + msg.sig = BTC_SIG_API_CB; + msg.pid = BTC_PID_GAP_BT; + msg.act = BTC_GAP_BT_REMOVE_BOND_DEV_COMPLETE_EVT; + + ret = btc_transfer_context(&msg, ¶m, + sizeof(esp_bt_gap_cb_param_t), NULL); + + if (ret != BT_STATUS_SUCCESS) { + BTC_TRACE_ERROR("%s btc_transfer_context failed\n", __func__); + } +#endif /// BTC_GAP_BT_INCLUDED == TRUE +} +#endif /* #if (SMP_INCLUDED == TRUE) */ + tBTA_SERVICE_MASK btc_get_enabled_services_mask(void) { return btc_enabled_services; @@ -644,14 +675,7 @@ void btc_dm_sec_cb_handler(btc_msg_t *msg) case BTA_DM_DEV_UNPAIRED_EVT: { #if (SMP_INCLUDED == TRUE) - bt_bdaddr_t bd_addr; - BTC_TRACE_DEBUG("BTA_DM_DEV_UNPAIRED_EVT"); - memcpy(bd_addr.address, p_data->link_down.bd_addr, sizeof(BD_ADDR)); - btm_set_bond_type_dev(p_data->link_down.bd_addr, BOND_TYPE_UNKNOWN); - if (p_data->link_down.status == HCI_SUCCESS) { - //remove the bonded key in the config and nvs flash. - btc_storage_remove_bonded_device(&bd_addr); - } + btc_dm_dev_unpaired_evt(&p_data->link_down); #endif /* #if (SMP_INCLUDED == TRUE) */ break; } diff --git a/components/bt/bluedroid/btc/profile/std/gap/btc_gap_bt.c b/components/bt/bluedroid/btc/profile/std/gap/btc_gap_bt.c index 0f9789d52..dd6063551 100644 --- a/components/bt/bluedroid/btc/profile/std/gap/btc_gap_bt.c +++ b/components/bt/bluedroid/btc/profile/std/gap/btc_gap_bt.c @@ -852,6 +852,7 @@ void btc_gap_bt_cb_deep_free(btc_msg_t *msg) case BTC_GAP_BT_READ_RSSI_DELTA_EVT: case BTC_GAP_BT_AUTH_CMPL_EVT: case BTC_GAP_BT_PIN_REQ_EVT: + case BTC_GAP_BT_REMOVE_BOND_DEV_COMPLETE_EVT: #if (BT_SSP_INCLUDED == TRUE) case BTC_GAP_BT_CFM_REQ_EVT: case BTC_GAP_BT_KEY_NOTIF_EVT: @@ -905,6 +906,10 @@ void btc_gap_bt_cb_handler(btc_msg_t *msg) break; } #endif ///BT_SSP_INCLUDED == TRUE + case BTC_GAP_BT_REMOVE_BOND_DEV_COMPLETE_EVT:{ + btc_gap_bt_cb_to_app(ESP_BT_GAP_REMOVE_BOND_DEV_COMPLETE_EVT,(esp_bt_gap_cb_param_t *)msg->arg); + break; + } default: BTC_TRACE_ERROR("%s: Unhandled event (%d)!\n", __FUNCTION__, msg->act); break; diff --git a/components/bt/bluedroid/btc/profile/std/include/btc_gap_bt.h b/components/bt/bluedroid/btc/profile/std/include/btc_gap_bt.h index 847b93819..dd37aa717 100644 --- a/components/bt/bluedroid/btc/profile/std/include/btc_gap_bt.h +++ b/components/bt/bluedroid/btc/profile/std/include/btc_gap_bt.h @@ -33,6 +33,7 @@ typedef enum { BTC_GAP_BT_KEY_NOTIF_EVT, BTC_GAP_BT_KEY_REQ_EVT, BTC_GAP_BT_READ_RSSI_DELTA_EVT, + BTC_GAP_BT_REMOVE_BOND_DEV_COMPLETE_EVT, }btc_gap_bt_evt_t; typedef enum {