0

我正在尝试在自定义 BLE 外围设备和使用 RxAndroidBle (1.4.1) 实现的 Android 通信库之间创建数据传输。我让它与默认的 MTU(23 字节)一起使用,因此 Android 当时只传输 20 字节。通信使用 23 的 MTU,但我们真的想要更快的通信。

我们的设备支持 DLE,并在通信开始时请求更大的 158 字节 MTU,几乎所有手机都能获得它。完成后,设备开始发送最多 155 个字节的数据。因此,设备-> 移动通信速度相当快,而且运行良好。然而,在 Android 端,RxAndroidBle 的 getMtu() 调用总是返回 23(即使库和测试应用程序是使用 minsdk = 21 构建的,在 Android 7.1.1 上运行)。我尝试在建立连接后添加对RxBleConnection.requestMtu(512)的调用,但这导致没有回调并且getMtu()仍然返回 23。

我只是在createNewLongWriteBuilder上粗暴地调用setMaxBatchSize(155)并看看会发生什么。结果是更快的沟通,没有任何问题!(我在设备日志中确认我们当时确实获得了 >20 字节)但是,如果设备不支持大 MTU,为了避免令人不快的意外,我真的希望库使用实际的 MTU 值,而不是“大猜测”。

那么,在 RxAndroidBle 中获取当前 MTU 的实际方法是什么?是否有阻止它工作的错误或什么?

4

1 回答 1

0

您描述的行为实际上是RxAndroidBleversion的错误1.4.1RxBleConnection.getMtu()仅当中心通过 开始 MTU 协商时,才会更新由 检索到的 MTU 值RxBleConnection.requestMtu(int)

有一个版本1.4.2修复了这个问题,所以当外围设备开始协商时,MTU 值也会更新。

于 2017-10-25T11:21:48.007 回答