2013-01-24 95 views
5

我正計劃在Android設備和使用商用藍牙模塊的自定義傳感器之間使用的通信協議。我將使用SPP配置文件,它被稱爲「向用戶提供簡單可靠的數據流,類似於TCP」。藍牙Android RFCOMM/SPP錯誤處理建議

我對藍牙技術並不是很熟悉,並對設計這樣的協議有一些疑問。

首先,我不清楚我是否必須擔心被傳輸的數據是否被損壞。基礎協議堆棧會保證我從Android提供的InputStream讀取的字節與UART在傳感器端收到的字節相同嗎?我是否必須定義自己的受CRC或其他東西保護的數據包,還是會過度殺傷?

從Android藍牙文檔中我不清楚我的應用程序中發生了什麼,如果信號很弱並且暫時丟失了。我是否一次得到IOException,或者該平臺爲我提供了一些隱藏的錯誤處理和恢復功能,可以讓我看不到這種短暫的中斷?

感謝您的任何建議。

回答

10

您不必擔心SPP上的數據損壞,藍牙提供2級CRC,一個位於基帶,一個位於L2CAP級別, 兩者都具有任何檢測到的損壞的重傳機制 - 因此應用程序將只接收良好的數據包。

關於第二個問題 - 如果基礎藍牙連接斷開,Android連接器無法處理自動恢復 - 通常應用程序需要檢測斷開連接的原因並嘗試重新連接,根據情況連接。 所以如果你想從上次成功接收/發送的點開始繼續數據交換,那麼應用程序應該保持某種順序號和輕協議來實現簡歷。 另一種選擇是簡單地從重新連接時的數據交換開始(所以這取決於你的用例)

+0

非常感謝你,這個答案非常明確,涵蓋了所有我想知道的。 – jabal

+0

不客氣 –