繁体   English   中英

如何使用Android蓝牙API定时BLE GATT交换?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM