2017-11-25 360 views
0

我試圖發送10個字節的數據,每30miliseconds之間使用藍牙低enegry通知的2個Android設備之間。目標是實現低延遲通信,並且對低能量沒有興趣。Android ble,requestConnectionPriority不起作用

您可以在Delay graph(Y field = delta time between packets)中查看結果。前10秒的溝通正在進行得足夠好。 (數據包之間的間隔最大爲30-40ms)。然而,在10秒後,間隔要麼極高,要麼極低。

這可能是由於非嚴格的連接間隔參數而發生的。您可以檢查一個hci_events的樣本,清楚地顯示減速是由hci_events引起的。

我試圖配置連接的參數,從主調用函數

requestConnectionPriority 

但是,它並沒有改變結果圖什麼。我還使用wireshark檢查數據包,並發現主站甚至沒有發送配置連接間隔的請求。我也嘗試了另一個配置請求

requestMtu 

具有完全相同的結果,沒有更新數據包從主站發送。

所以,有兩個問題顯示出這個意見。

  • 爲了確保低能耗,在第10秒鐘有一個超時時間?如果是這樣,我該如何禁用它?
  • 調用requestConnectionPriority有什麼不對嗎,從android 6.0.1起中央(master)的角色?你能給我一個關於如何正確調用的簡單例子嗎?

注意requestConnectionPriority被稱爲之後的連接是建立在BluetoothGattCallbackonConnectionStateChange

具有從機(服務器)角色的設備正在運行(Android 5.1.1)並且主機(客戶機)正在運行(Android 6.0.1)。

非常感謝!

重要更新:這是至關重要提的連接正在發起設備之間的方式。

  • 中央設備調用device.connectGatt,其中設備是BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address)。地址是硬編碼字符串,外圍設備的公共mac地址。您可以檢查logcat logshci logs
  • 我也曾嘗試用合法的方式(周邊廣告並連接到掃描隨機地址)連接,但我得到一個錯誤「發起直接連接失敗,拓撲限制」。你可以檢查logcat logshci logs

回答

0

爲了確保低能耗,在第10秒有一個超時時間嗎?如果是這樣,我該如何禁用它?

沒有

是有些事情錯了電話requestConnectionPriority,從中央(主)的作用了Android 6.0.1?你能給我一個關於如何正確調用的簡單例子嗎?

我不知道有關requestConnectionPriority的任何錯誤。但是你可以嘗試在onServicesDiscovered回調之後執行該方法。在GATT服務發現期間,Android暫時將連接間隔更改爲7.5毫秒,因此如果您不等到服務發現完成,則可能會感到困惑。

關於requestMtu,請確保在沒有其他GATT操作掛起的情況下執行該方法(否則它將不起作用)。

另外一個技巧是使用空氣嗅探器,而不僅僅是看hci日誌。

+0

謝謝Emil的及時回覆。我測試了你的建議,但並沒有導致不同的行爲。也許問題是我發起連接的方式。我會在接下來的幾分鐘內更新這個問題。 –

+0

我希望看到您的HCI日誌。 logcat日誌告訴連接參數更新失敗,這似乎不太好。 「拓撲」限制意味着您的藍牙芯片不支持在其他事情發生的同時啓動連接(可能是可連接的廣告或從屬連接?)。你有什麼Android設備? – Emil

+0

我剛剛更新了添加hci日誌的問題。具體來說,對於中心我們基於這個[示例](https://github.com/googlesamples/android-BluetoothLeGatt)和外設這個[示例](https://github.com/androidthings/sample-bluetooth-le -gattserver),它以三星S7作爲外設和索尼M5作爲核心。我們的問題出現在我們用作中央[Orbbec Pessec設備](https://orbbec3d.com/product-persee/)時,它具有API 21(M5的更高統計數據)和藍牙4.0與COD COMPUTER。謝謝你,請原諒我的延遲,但我沒有啓用通知。 –