[英]How to time a BLE GATT exchange with Android Bluetooth APIs?
我正在编写一个通过GATT服务与自定义设备BLE通信的Android应用程序。 所述设备提供用于读取和写入数据的具有两个特征的服务。 当一些数据写入WRITE特性时,BLE设备将通过有线UART接口将其发送到其他设备。 然后,其他设备将通过相同的UART接口响应BLE设备。 收到消息后,BLE设备将在其服务的READ特性上发送新数据可用的通知,以便我的Android应用程序可以检索它。
我想做的是测量从我的Android应用程序发送请求到收到新数据可用通知的时间。
我已经使用了long
的“秒表”。 我将其设置为System.currentTimeMillis();
当我写入数据并将其值与对System.currentTimeMillis();
另一个调用进行比较时System.currentTimeMillis();
在收到通知后,给出如下信息:
long stopwatch = System.currentTimeMillis();
// ...
// ...
long elapsed = System.currentTimeMillis() - stopwatch;
我设置了2个秒表来比较2个测量时间。
第一秒表复位当我打电话gatt.writeCharacteristic(myCharacteristic)
并且当第二个被复位BluetoothGattCallback.onCharacteristicWrite()
被调用。
我已经通过READ特性注册了用于通知的应用程序,因此在调用BluetoothGattCallback.onCharacteristicChanged()
时我停止了两个秒表。
问题是,这些测量之间我平均有100毫秒! 我认为很多。 调用gatt.writeCharacteristic(myCharacteristic)
的平均开始时间为gatt.writeCharacteristic(myCharacteristic)
毫秒。调用BluetoothGattCallback.onCharacteristicWrite()
平均开始时间为40毫秒。
因此,我想知道如何安排这种交流时间的正确方法,以及何时应该重置秒表以获取最准确的时间测量。
好吧,如果您使用默认的连接间隔50毫秒,这一点都不奇怪。 假设在下一个连接事件(将来可能会发生最多50毫秒)发出写操作,并且结果可用并在50毫秒后的下一个连接事件通知,则得到100毫秒。 您可以发出连接参数更新请求以获得更快的连接间隔。
如果要降低开销,为什么不通知数据可用然后再读取,而不是直接将数据嵌入到通知有效负载中呢?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.