我正在尝试在自定义 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 的实际方法是什么?是否有阻止它工作的错误或什么?