请教一下在BLE中作为slave的设备有没有什么办法能获取当前的连接状态
协议似乎并没有定义HCI层对连接状态的访问,对于master发送的空包的作用也描述得不太清楚。
非常感激有人能指点一下
连接状态在上层的app层里面可以看到peripheralStateNotificationCB 这个函数里
hi WBJ:
感谢您的回复。
看起来是peripheralStateNotificationCB通过修改全局变量gapProfileState管理连接状态。
对于连接状态时,master不断发送给slave的空包应该怎么理解?是master为了维持连接状态的手段吗?
这个空包是在slave的L2CAP层响应的吗?
你的问题应该是指的主从机之间进行的“连接事件”,主从机连接参数有一个叫做连接间隔(ConnInterval),即主从双方每隔一定时间后需要进行一次“握手”,主机发送一个握手请求,从机应答,若超出一定时间(即监督超时Supervision Timeout)没有握手,则判定为蓝牙连接断开(掉线)
Dear Rain Tian:
十分感谢您的回复,确实如你所说,空包间的时间间隔是ConnInterval*1.25ms,主从每隔这个时间进行“握手”。
这里还有一些疑问,握手包对于master来说是APP层定时给出的吗?对于slave来说是哪一层应答的呢?
握手包的发送和应答是协议栈自动完成的,且未应答主机会自动Retry,不需要人为干预
另外,想请教一下:从机的Indication发送出去后,Peripheral在哪里可以知道Central有没有应答?有没有置位某个事件或者产生什么回调还是其他什么?我一直没有找到
在GATT层应该会有回调的