2017-10-13 29 views
0

我試圖用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?

+0

看來,'RxBleConnection.getMtu()'返回只有當MTU是由中央(安卓)要求或者根本沒有改變應有的價值。看起來像庫中的一個bug。 –

+0

當然看起來這樣。我試圖反編譯RxAndroidBle並讀取代碼,並找不到任何代碼,如果requestMtu沒有被調用,它將更新RxBleConnectionImpl.currentMtu。 令我驚訝的是requestMtu(512)也沒有幫助。也許沒有變化,因爲連接已經有設備可以支持的最大值(158)... – user1987093

+0

追加用於跟蹤:https://github.com/Polidea/RxAndroidBle/issues/293 –

回答

0

您所描述的行爲實際上是爲1.4.1RxAndroidBle版中的錯誤。僅當中央通過RxBleConnection.requestMtu(int)啓動MTU協商時,纔會更新由RxBleConnection.getMtu()檢索到的MTU值。

有一個釋放1.4.2當週開始的談判具有這一問題,以便固定MTU值也被更新。