我正在编写一个Android应用程序,通过GATT服务与定制的设备BLE通信。所述设备提供具有读取和写入数据的2个特征的服务。当某些数据写入写入特性时,BLE设备将通过有线UART接口将其发送到其他设备。然后,该另一设备将通过该相同的UART接口响应BLE设备。在接收时,BLE设备将发送一个通知,通知其服务的读取特征中有新数据可用,以便我的Android应用程序可以检索这些数据。
我想做的是测量从我从Android应用程序发送请求到收到新数据可用通知所经过的时间。
我已经实现了一个“秒表”作为long。我在写入数据时将其设置为System.currentTimeMillis();,并在收到通知时将其值与对System.currentTimeMillis();的另一次调用进行比较,给出如下内容:
long stopwatch = System.currentTimeMillis();
// ...
// ...
long elapsed = System.currentTimeMillis() - stopwatch;我设置了两个秒表来比较两个测量的时间。
第一个秒表在我调用gatt.writeCharacteristic(myCharacteristic)时重置,第二个秒表在BluetoothGattCallback.onCharacteristicWrite()被调用时重置。
我已经为来自读取特征的通知注册了我的应用程序,所以当BluetoothGattCallback.onCharacteristicChanged()被调用时,我停止两个秒表。
问题是,我两次测量之间的平均间隔是100ms!我认为这是相当多的。调用gatt.writeCharacteristic(myCharacteristic)的平均开始时间是140ms,调用BluetoothGattCallback.onCharacteristicWrite()的平均开始时间是40ms。
所以我想知道什么是对这种交换进行计时的适当方式,以及我应该在什么时候重新设置秒表,以便获得最准确的时间测量。
发布于 2017-08-09 05:19:40
如果你使用的默认连接间隔是50ms,这一点也不奇怪。假设write是在下一个连接事件(可能在未来50毫秒内发生)发出的,并且结果可用,并在50毫秒后的下一个连接事件时通知,那么您将获得100毫秒。您可以发起连接参数更新请求,以获得更快的连接间隔。
如果您想获得较低的开销,为什么要通知数据可用,然后读取,而不是直接将数据嵌入到通知负载中?
https://stackoverflow.com/questions/45571559
复制相似问题