如何在RxAndroidBle中获得更大的MTU?

时间:2017-10-13 14:55:27

标签: android rxandroidble mtu

我正在尝试在使用RxAndroidBle(1.4.1)实现的自定义BLE外设和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的实际方法是什么?是否存在阻止其工作的错误?

1 个答案:

答案 0 :(得分:0)

您所描述的行为实际上是 new Promise<auth.OAuth2>((resolve, reject) => { .. } ) 版本RxAndroidBle的错误。仅当中央通过1.4.1启动MTU协商时,RxBleConnection.getMtu()检索的MTU值才会更新。

有一个版本RxBleConnection.requestMtu(int)已修复此问题,因此当外围设备开始协商时,MTU值也会更新。