我在用simpleBLEcenter例程模拟主设备的设备的时候,如果我连接多个设备,当我断开其中一个连接的时候,不知道BLE是如何区别是那个设备的断开的连接。
在Bluetooth specification中。蓝牙广播的时候其中包含的有自己的设备地址,但是在断开连接的时候并没有包含这些地址信息,并且在维持连接的这些empty pdu里也没有相应的设备地址。所以我不知道怎么去有针对性的把相应的设备信息从内存中清除。
请问Ti的工程师这些东西应该怎么处理?
wang jhon:
回复 Yan:
Hi,Yan
谢谢你的回复,我在做实验的时候也发现这个connection handle会自动增加,通过你的回复才明白其作用。
还有个问题就是,connHandle会自动增加,其是否会自动减少,如果我这边有设备断开连接了,其值是否会自动减少,这是不是也是由底层自动维护的。
我现在做实验发现。当我只有两个从设备连接的时候,如果connhandle = 1的先断开,其是可以再次连接上的,但是如果我先断开connHandle = 0 的,那这个设备就没法从新连接上了。所以我认为是不是底层判断还有一个设备连接,所以再次连接的时候会设置其connHandle为1,但是这个handle已经与前一个设备绑定了,所以就不能连接了。
请问这个时候如何解决?
谢谢!
wang jhon:
回复 Yan:
Yan,
我的代码里面也没有什么特别的地方,就是使用那个DISCOVERY_EVT来间隔扫描,然后把信息添加到设备信息表中,
理论上是不是判断最新的conHandle,然后有新增的设备的时候在这个connHandle上+1,和新设备绑定,而不是从已有的设备信息数+1绑定新设备,
如果是前一种的话,那这个问题就应该是可以解决的了,由于我没有找到程序底层是怎么生成这些connHandle的,所以对这些不太了解。
谢谢!
Yan:
回复 wang jhon:
wang,
connHandle是底层分配的。
在LL层代码中,有个管理连接设备的链表,分配机制就是根据这个链表,会取其中第一个空闲的来分配。这段代码在库中,你们看不到。
就像我之前说的,如果connection handle 0的设备断开了,同时还有connection handle 1 的设备还连着,新连进来的设备,还是会被分配给connection handle 0 。