首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Android蓝牙API对BLE GATT交换进行计时?

如何使用Android蓝牙API对BLE GATT交换进行计时?
EN

Stack Overflow用户
提问于 2017-08-08 22:49:57
回答 1查看 327关注 0票数 0

我正在编写一个Android应用程序,通过GATT服务与定制的设备BLE通信。所述设备提供具有读取和写入数据的2个特征的服务。当某些数据写入写入特性时,BLE设备将通过有线UART接口将其发送到其他设备。然后,该另一设备将通过该相同的UART接口响应BLE设备。在接收时,BLE设备将发送一个通知,通知其服务的读取特征中有新数据可用,以便我的Android应用程序可以检索这些数据。

我想做的是测量从我从Android应用程序发送请求到收到新数据可用通知所经过的时间。

我已经实现了一个“秒表”作为long。我在写入数据时将其设置为System.currentTimeMillis();,并在收到通知时将其值与对System.currentTimeMillis();的另一次调用进行比较,给出如下内容:

代码语言:javascript
复制
long stopwatch = System.currentTimeMillis();
// ...

// ...
long elapsed = System.currentTimeMillis() - stopwatch;

我设置了两个秒表来比较两个测量的时间。

第一个秒表在我调用gatt.writeCharacteristic(myCharacteristic)时重置,第二个秒表在BluetoothGattCallback.onCharacteristicWrite()被调用时重置。

我已经为来自读取特征的通知注册了我的应用程序,所以当BluetoothGattCallback.onCharacteristicChanged()被调用时,我停止两个秒表。

问题是,我两次测量之间的平均间隔是100ms!我认为这是相当多的。调用gatt.writeCharacteristic(myCharacteristic)的平均开始时间是140ms,调用BluetoothGattCallback.onCharacteristicWrite()的平均开始时间是40ms。

所以我想知道什么是对这种交换进行计时的适当方式,以及我应该在什么时候重新设置秒表,以便获得最准确的时间测量。

EN

回答 1

Stack Overflow用户

发布于 2017-08-09 05:19:40

如果你使用的默认连接间隔是50ms,这一点也不奇怪。假设write是在下一个连接事件(可能在未来50毫秒内发生)发出的,并且结果可用,并在50毫秒后的下一个连接事件时通知,那么您将获得100毫秒。您可以发起连接参数更新请求,以获得更快的连接间隔。

如果您想获得较低的开销,为什么要通知数据可用,然后读取,而不是直接将数据嵌入到通知负载中?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45571559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档