我正在尝试使用蓝牙低能量通知在2个Android设备之间每30毫秒发送10个字节的数据。目标是实现低延迟通信,对低能耗没有兴趣。
您可以在Delay graph(Y field = delta time between packets)中查看结果。通信正在进行的前10秒就足够了。 (数据包之间的间隔最大为30-40ms)。然而,在第10秒之后,间隔要么极高,要么极低。
这可能是由于非严格的连接间隔参数而发生的。您可以查看hci_events的样本,该样本清楚地显示减速是由hci_events引起的。
我试图配置连接的参数,从master调用函数
requestConnectionPriority
然而,它并没有改变结果图上的任何内容。我还使用wireshark检查数据包,发现主服务器甚至没有发送配置连接间隔的请求。我还尝试了
的另一个配置请求requestMtu
具有完全相同的结果,没有从主服务器发送更新数据包。
因此,从这些观察中可以看到两个问题。
请注意,在requestConnectionPriority
的{{1}}中建立连接后,系统会立即调用onConnectionStateChange
。
具有从属(服务器)角色的设备正在运行(Android 5.1.1)且主(客户端)正在运行(Android 6.0.1)。
非常感谢!
重要更新:提及设备之间启动连接的方式至关重要。
BluetoothGattCallback
,其中设备为device.connectGatt
。地址是硬编码字符串,即外围设备的公共mac地址。您可以查看logcat logs和hci logs。答案 0 :(得分:1)
为了确保低能耗,在第10秒有超时吗?如果是,我该如何禁用它?
没有
调用requestConnectionPriority是否有些错误,从android 6.0.1中带有中心(master)的角色?你能给我一个关于如何被正确调用的简单例子吗?
我不知道有关requestConnectionPriority的任何错误。但是你可以尝试在onServicesDiscovered回调之后执行该方法。在GATT服务发现期间,Android会暂时将连接间隔更改为7.5毫秒,因此如果您不等到服务发现完成,可能会感到困惑。
关于requestMtu,请确保在没有其他GATT操作未决的情况下执行该方法(否则它不会起作用)。
另外一个提示是使用空气嗅探器,而不仅仅是查看hci日志。