TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2541或CC2540做为从设备Peripheral,被连接后如何主动断开?

我们要开发一个数据节点,它可以被多个Central设备连接,交换完数据后Central设备会断开连接。考虑到Central设备可能被非预期的其他设备连接,这时Peripheral应该可以拒绝连接并主动与之断开连接,否则其他Central设备将无法正常连接。但是在simpleBLEPeripheral示例中没有这样的代码。请问如何实现?

另外,主机Central主动断开连接后,在simpleBLEPeripheral示例中,需要等一段时间,大约有8秒后才能调用到GAPROLE_WAITING:这里,在LCD上显示"Disconnected"。有没有快速的方法知道连接已被断开?

Yan:

Hi baoxuan,

BLE的 peripheral目前不能同时被多个central设备连接.

另外, BLE的连接都是由central主动发起的, 因此central不会被非预期地连接.

关于8秒才掉到GAPROLE_WAITING, 建议先用smartRF sniffer 抓包看一下, 确认一下central那边发出断开连接请求的时间, 或者发出断开请求之后是否还有数据通信.

baoxuan zhong:

回复 Yan:

Yan,你好:

感谢你的回复,可能是我没有表达清楚,我们需要 peripheral可以被不同的central设备连接,但不是同时。也正是不能同时被多个central设备连接的原因,我们需要通信完成后尽快断开,以便其他central设备与之连接。

关于非预期连接,是指不是我们开发的central设备来连接我们 peripheral的情况,也可以称之为“非法设备”,因为蓝牙接口是公开的,任何设备都可能对我们的 peripheral发起连接,如果这个central一直保持这个连接,则其他central设备就无法再与之连接,这是我们不希望发生的。当有发生这个情况时,需要peripheral进行判断,超过连接时间后能够主动与之断开连接。

kai zeng:

回复 baoxuan zhong:

我也想知道这种情况应该怎么做… 看了两周了。

mark_xu:

回复 baoxuan zhong:

从机可以主动断开的,然后可以过滤主机的地址,连接过的主机,则不让再连接,这个功能只能你自己做了,例程里面没有,不过例程里面有怎么获取地址的

zhou zhou3:

回复 baoxuan zhong:

baoxuan,你好

你这个问题我现在也遇到了,请问是怎么解决的,望不吝赐教。

zhou zhou3:

回复 baoxuan zhong:

十分感谢你的回复,论坛好像挺冷清的都没抱什么希望,总之十分感谢

另外,①连接上主机,从机进行判断,如果30s内没有接收到数据,从机就主动断开,这个30S是用osal_start_timerEx这个函数来实现吗,还是说自己写一个delay(假如真这样的话,好像会影响系统的执行效率)。②要实现有主机出现在从机的一个指定范围内就自动连上,这个有方法吗?

我是新手菜鸟,问题有点多,希望能体谅

zhou zhou3:

回复 zhou zhou3:

假如前辈能看到的话先感谢一番!

①已经解决了,在notification里面判断state然后用一个osal_start_timeEx函数进行定时作为一个事件,在processEvent里面判断事件标志位,执行Terminate函数。

②目前是采取在手机APP上通过判断RSSI值来实现。

Shenzhen Gao:

回复 zhou zhou3:

不好,求解

赞(0)
未经允许不得转载:TI中文支持网 » CC2541或CC2540做为从设备Peripheral,被连接后如何主动断开?
分享到: 更多 (0)