如何在RxAndroidBle中获得更大的MTU?
我试图用RxAndroidBle(1.4.1)实现了自定义BLE外设和Android通讯库之间建立数据传输。我使用默认的MTU(23字节),以便Android在当时只传输20个字节。该沟通与23的MTU一起工作,但我们真的希望更快的沟通。如何在RxAndroidBle中获得更大的MTU?
我们的设备支持DLE和通信开始要求的158个字节的更大的MTU,并与几乎所有的手机得到它。完成之后,设备开始发送最多155个字节的数据。正因为如此,设备 - >移动通信是相当快,它工作正常。然而,在Android侧,RxAndroidBle的getMtu()调用总是返回23(即使库和测试应用程序已经使用minsdk = 21构建,在Android 7.1.1上运行)。我试图建立连接后,调用添加到RxBleConnection.requestMtu(512),但导致没有回调和getMtu()仍然返回23
我只是狠狠地调用setMaxBatchSize试了一下(155 )上createNewLongWriteBuilder,看会发生什么。结果是更快的沟通没有任何问题! (我在设备日志上确认当时我们确实获得了> 20个字节)。但是,为避免设备不支持大型MTU时出现不愉快的意外,我真的希望该库使用实际的MTU值,而不是“大猜测”。
那么,什么是RxAndroidBle获取当前MTU的实际方法是什么?有没有阻止它工作的bug?
您所描述的行为实际上是为1.4.1
RxAndroidBle
版中的错误。仅当中央通过RxBleConnection.requestMtu(int)
启动MTU协商时,才会更新由RxBleConnection.getMtu()
检索到的MTU值。
有一个释放1.4.2
当周开始的谈判具有这一问题,以便固定MTU值也被更新。
看来,'RxBleConnection.getMtu()'返回只有当MTU是由中央(安卓)要求或者根本没有改变应有的价值。看起来像库中的一个bug。 –
当然看起来这样。我试图反编译RxAndroidBle并读取代码,并找不到任何代码,如果requestMtu没有被调用,它将更新RxBleConnectionImpl.currentMtu。 令我惊讶的是requestMtu(512)也没有帮助。也许没有变化,因为连接已经有设备可以支持的最大值(158)... – user1987093
追加用于跟踪:https://github.com/Polidea/RxAndroidBle/issues/293 –