微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > BLE蓝牙配对和绑定的问题

BLE蓝牙配对和绑定的问题

时间:10-02 整理:3721RD 点击:

各位大神:

               我用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,

好的,知道了 ,谢谢,

请问你的代码添加在程序中的哪个位置

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top