2015-08-29 108 views
5

我正在爲C/C++編寫一個用於藍牙低功耗設備的庫。到目前爲止,我一直使用Bluez公開的D-Bus接口,並且能夠發現,連接和與設備進行通信。Bluez自動重新連接設備

但是,當由於鏈路故障或超出範圍而導致設備斷開連接時,重新連接到該設備並非微不足道。理想情況下,我希望能夠爲所有斷開連接的設備創建待定連接,但Bluez似乎不支持該連接。 Bluez似乎只支持一次同時連接呼叫,它在15-20秒後超時。

因此,解決方案將是偵聽廣告包,並在檢測到已知設備時進行連接。 #bluez上的優秀人士告訴我,這已經實現了,而實現它的方法是使用GattManager1 RegisterProfile方法註冊一個實現GattProfile1的對象。嘗試這樣做沒有結果,設備在鏈接失敗後保持斷開狀態。它的記錄也很差,所以很有可能我錯過了一些東西。

我的問題是:這是正確的解決方案嗎?它會提供無縫和快速重新連接嗎?如果是,可能會出現什麼問題?

回答

2

如果您希望重新連接到單個藍牙設備,您可以通過接收org.freedesktop.DBus.Properties.PropertiesChanged來監視連接狀態,並在需要時調用org.bluez.Device1.Connect重新連接。由於這會超時,因此您可以將Connect()置於循環內,只有在org.bluez.Device1.Connected屬性爲true時纔會退出。

原始作者是否設法通過實現GattProfile1來爲多個設備做到這一點?