在gapbondmgr.c文件中GAPBondMgr_SetParameter函数中GAPBOND_ERASE_SINGLEBOND的入参应该是
/**
* Erase a single bonded device (Write-only)
*
* @note In case @ref GAPBOND_ERASE_BOND_IN_CONN is disabled,
* The erase won't happen until there are no active connections.
* In case @ref GAPBOND_ERASE_BOND_IN_CONN is enabled,
* the bond erase can happen also when if there are active connections.
*
* size: uint8_t[B_ADDR_LEN]
*
* range: A one-byte address type followed by a 6 byte address
*/
#define GAPBOND_ERASE_SINGLEBOND 0x410
GAPBondMgr_SetParameter内部实现如下:可知长度和内容应该是1字节的MAC类型+6字节MAC
注意GAPBondMgr_FindAddr中MAC类型只有如下两种:
操作如下:
1、首先成功配对绑定手机,
2、断开后再次连接,在GAP_LINK_ESTABLISHED_EVENT中记录手机MAC和MAC类型
case GAP_LINK_ESTABLISHED_EVENT:
{
gapEstLinkReqEvent_t *pPkt = (gapEstLinkReqEvent_t *)pMsg;
memset(gMobleMac, 0x00, B_ADDR_LEN);
memcpy(gMobleMac, pPkt->devAddr, B_ADDR_LEN);
gMacType = pPkt->devAddrType;
我在这个地方打印gMacType,的值时0x02, 但是在上面find addr中MAC类型只有两种,对不上
3、触发GAPBOND_ERASE_SINGLEBOND调用
我的调用方式如下:
uint8_t mac[B_ADDR_LEN + 1] = {0};
uint8_t Tmpmac[B_ADDR_LEN] = {0};
uint8_t u8Flag = TRUE;
mac[0] = gMacType;
//这里是设置允许连接时删除
bStatus_t tResult = GAPBondMgr_SetParameter(GAPBOND_ERASE_BOND_IN_CONN, sizeof(uint8_t), &u8Flag);
uart_print("bong1: %d", tResult);
//正序查找手机MAC
memcpy(mac+1, gMobleMac, B_ADDR_LEN);
tResult = GAPBondMgr_SetParameter(GAPBOND_ERASE_SINGLEBOND, B_ADDR_LEN + sizeof(uint8_t), mac);
uart_print("1: %02X-%02X-%02X-%02X-%02X-%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
uart_print("erase1: %d", tResult);
//这里是因为我怕记录的MAC大小端问题,这里转了下MAC
for (int i = 0; i < B_ADDR_LEN; i++)
{
Tmpmac[i] = gMobleMac[B_ADDR_LEN-1-i];
}
memcpy(mac+1, Tmpmac, B_ADDR_LEN);
tResult = GAPBondMgr_SetParameter(GAPBOND_ERASE_SINGLEBOND, B_ADDR_LEN + sizeof(uint8_t), mac);
uart_print("2: %02X-%02X-%02X-%02X-%02X-%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
uart_print("erase2: %d", tResult);
两次tResult结果都是0x34(#define bleGAPNotFound 0x34 //!< No handle / buffer found)
我还试了下将存储MAC类型的mac[0]赋值为0x00(PEER_ADDRTYPE_PUBLIC_OR_PUBLIC_ID)和0x01(PEER_ADDRTYPE_RANDOM_OR_RANDOM_ID)结果依旧是0x34。
而且GAPBondMgr_SetParameter里面不能debug,应该是TI编译成库且去除了符号表