BLE蓝牙配对和绑定的问题
各位大神:
我用CC2541做从机,IOS做主机,配对正常。配对后,删除IOS的绑定信息,再次连接需要重新配对输入密码;但是,如果不删除IOS绑定信息,而删除CC2541的信息或者直接修改密码,再次连接时却不需要密码,,,这个绑定信息是不是在CC2541中也有记录,
请问我该如何做: 1、CC2541删除绑定信息后,再要求配对
2、当只有CC2541擦除绑定信息后,再次要求配对
谢谢各位大神啊 ,,,,急急急急
guifeng,
首先,iOS不会主动要求配对。
2541也会记录绑定信息。
你代码里面 初始化的时候, 把 uint8 pairMode = GAPBOND_PAIRING_MODE_INITIATE 这样试试,看看每次2541擦除信息后再连会不会要求配对。
yan,
我修改了下, uint8 pairMode = GAPBOND_PAIRING_MODE_INITIATE 时,没有配对的过程,直接连接,达不到我需要的效果。
我需要的是任何MASTER连接到这个设备都必须由配对要求,
所以所有配对必须由设备发起。
另外已配对的不需要再配对。如果已经配对过的,设备删除配对绑定信息后,MASTER再次连接仍然需要配对。。。
求解答
谢谢。
guifeng,
设置成 uint8 pairMode = GAPBOND_PAIRING_MODE_INITIATE ,并且删除你这边的上次配对信息,你这边是每次都会发起配对请求的。
但这也需要master那边的配合。有些master设备认为不需要配对,或者配对失败也能继续连接,那你是没有办法控制的。。。
Yan,
你说的很正确,因为master对已经配对过的设备,是不会进行第二次配对的,,因为已经配对过的设备 是忽略了配对码的,而是只识别绑定的地址。
如果设置成 uint8 pairMode = GAPBOND_PAIRING_MODE_INITIATE ,对已经配对的设备,
在调用static void ProcessPairStateCB( uint16 connHandle, uint8 state, uint8 status )会有一个错误信息,就是status ==SMP_PAIRING_FAILED_UNSPECIFIED的情况
现在我在这里面加了一个判断,好像能满足我的要求如下:
if(status ==SMP_PAIRING_FAILED_UNSPECIFIED)
{
linkDBItem_t *pLinkItem = linkDB_Find( connHandle );
if(!pLinkItem||(GAPBondMgr_ResolveAddr(pLinkItem->addrType,pLinkItem->addr,NULL)==GAP_BONDINGS_MAX))
{
GAPRole_TerminateConnection();//
}
}
这样,如果设备端清除绑定信息的话 ,master是无法成功连接的 ,必须master端也清除绑定信息 重新配对
虽然功能基本能实现,但是这样会有什么不良的后果吗?
guifeng,
我觉得这样从逻辑上来看没有什么问题。
这完全是应用层决定的动作,也没有违反spec对安全的要求。
你完全可以这样做:)
Yan,
好的,知道了 ,谢谢,
请问你的代码添加在程序中的哪个位置