为什么不回连——被removebond的蓝牙HOGP Device
为什么device那边产生了disconnect,master这边就允许其回连;而master这边将device removebond掉,device就不能回连了呢?
今天我们来看看,master在removebondt的过程中到底做了些什么。
前面一篇博客说道,bluedroid中的蓝牙HOGP设备在因省电而disconnect后,master可以允许其快速回连,省去中间发杂的smp(安全管理)、gatt搜索和hid搜索的过程。当时提到过,master这边的host将对端HOGP device加入到了四个全局结构数组中,从而这个device才可以快速回连;而当master主动解除device的配对后,device就不可以回连了。这样看来,master端的host在removebond的过程中必然对这几个全局变量做了些什么。因此,我们就来看看host对这几个变量做了什么。
先是settings中解除配对时,bluedroid对上层的接口——remove_bond,它执行的流程大概是这样的:
==>btif_dm_remove_bond
==>btif_dm_cb_remove_bond
==>bta_dm_remove_device——这一步展开
/*******************************************************************************
**
** Function bta_dm_remove_device
**
** Description Removes device, Disconnects ACL link if required.
****
*******************************************************************************/
void bta_dm_remove_device (tBTA_DM_MSG *p_data)
{
tBTA_DM_API_REMOVE_DEVICE *p_dev = &p_data->remove_dev;
int i;
tBTA_DM_SEC sec_event;
#if (BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE)
/* need to remove all pending background connection bef