2015-11-02 80 views
3

我有一個Linux C應用程序,它需要與BLE設備建立多個連接。該應用程序使用從gatttool剝離的庫。 BLE設備的廣告費率非常低,因此需要很長時間才能建立連接。因此,我需要能夠同時發出多個gatt_connect請求。使用BlueZ同時建立多個BLE連接

gatt_connect使用標準套接字/連接來建立到設備的L2CAP連接。雖然此方法允許您擁有多個活動連接,但它只允許您一次建立一個連接。使用HCI接口,您可以同時建立多個接口(即hcitool lecc --whitelist),但是我無法想出一個方法使它與gattool庫L2CAP套接字/連接一起工作。

任何人都可以提出一種方法來集成gattool L2CAP套接字/連接與hci接口(hci_open_dev/hci_le_create_conn)處理使用的「hcitool lecc --whitelist」,或一種方法來同時建立多個連接?

+1

爲什麼不使用DBUS接口的任何原因?這是支持的接口,並且很容易同時建立多個連接(一旦你通過DBUS學習曲線)。 – kaylum

+0

不幸的是,我必須在標準的ubuntu 14.04.03 LTS(bluez 4.101)和Intel Edison(bluez 5.x)上運行代碼。 Ubuntu的bluez版本是4.101,據我的理解,它不能正確支持藍色的dbus(或者至少不支持5.x的相同方式)。我也明白,關貿總協定仍然是試驗性和經常變化的。 –

+0

@mw。 :我也在嘗試類似的東西。我想知道你的項目的狀態。 – abhiarora

回答

4

我認爲白名單方法是一次處理建立多個連接的唯一方法。 HCI一次只能處理建立一個連接(如果我沒有記錯的話),在連接建立之前你沒有任何連接句柄。

L2CAP套接字是利用HCI方法的內核抽象。如果您嘗試在一個掛起時啓動另一個連接,則認爲出現錯誤。

我懷疑即使DBUS方法提及只是對HCI方法的抽象,它仍然是按順序進行連接的過程。

即使您使用了白名單方法,但我不確定實際上會有多快,因爲問題是連接間隔和廣告時間間隔。白名單的工作原理是偵聽廣告數據包並建立連接。我也從來沒有使用過白名單方法,但你可能必須使用HCI套接字,並且自己通過那個套接字處理多個不同的設備。

大多數硬件將允許您在掃描時建立連接,因此您可以在等待當前連接建立時收集新的廣告數據包。當一個連接完成建立後,你可以移動到下一個。只要連接可以相對快速建立,使用白名單就沒有任何好處。 (實際的底層實現可能以任何方式相同)

+1

作爲參考,我最終做的是編寫一個使用hci_le_rm_white_list和hci_le_add_white_list管理白名單條目的連接例程。我想在建立連接時調用le_create_conn(白名單),然後使用此連接建立L2CAP套接字。如果我需要添加更多連接請求,我使用hci_le_create_conn_cancel將當前連接請求添加到白名單中,然後使用le_create_conn繼續。 –

相關問題