我们要开发一个数据节点,它可以被多个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:
不好,求解