2013-03-20 133 views
0

我想要做的是: 我有一個數據庫與某些藍牙設備(BD_ADDR)。我想發現是否有任何設備在範圍內,如果是,請告訴它做些什麼。 一種方法是始終運行發現,創建發現的設備列表並將其與數據庫進行比較。如果找到數據庫中存在的設備,我會打開它的連接並告訴它執行某些操作。 問題是這個過程很慢並且要可靠地找到所有設備,查詢長度必須很大,並且必須始終重複該過程。快速發現藍牙設備

我的想法是隻發現我的藍牙一次,將其與我的設備配對,並從那時起,每當設備進入範圍,與它建立連接,而不是通過漫長的發現,但以某種方式使用我已經使用的信息有這個設備。

換句話說,是否有可能使用我已經瞭解的有關設備的信息(與之前已經配對或僅與之有聯繫)開始與它進行通信而無需首先發現它?

謝謝 donescamilloATgmail.com

回答

0

什麼庫您使用的藍牙和你打算什麼樣的插座與溝通?在大多數情況下,如果你知道它的BD_ADDR,你應該能夠創建一個到設備的套接字連接。例如,在的BlueZ,你只需要編寫以下到通道1創建一個RFCOMM連接到已知的服務器:

struct sockaddr_rc addr = { 0 }; 
int s, status; 

// destination address 
char dest[18] = "00:17:EC:35:96:FF"; 

// allocate a socket 
s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM); 

// set the connection parameters (who to connect to) 
addr.rc_family = AF_BLUETOOTH; 
addr.rc_channel = 1; 
str2ba(dest, &addr.rc_bdaddr); 

// connect to server 
status = connect(s, (struct sockaddr *)&addr, sizeof(addr)); 

希望這有助於。

+0

我在Windows上使用BTstack。 不確定它是否實現套接字通信。 只是爲了確認 - 如果我有一個設備的BD_ADDRESS,我不需要任何其他信息(如clockOffset等)爲了連接到它(不管怎麼樣,我會發現如何)。 是這樣嗎? 謝謝, donescamilloATgmail.com – user1523271 2013-03-20 15:01:57

+0

是的,沒錯。除了連接到設備的BD_ADDR之外,您並不需要知道其他任何信息。您需要確保設備支持您嘗試使用的套接字通信。 RFCOMM可以說是最常用的套接字,所以如果BTStack沒有實現它,我會感到驚訝。 – Zaphod 2013-03-20 23:59:20