2011-03-29 88 views
3

我有兩個藍牙設備,我試圖做兩個rfcomm連接,每個設備一個連接。使用套接字的藍牙連接rfcomm

我用的bluez RFCOMM插座

addr.rc_family = AF_BLUETOOTH; 
addr.rc_channel = (uint8_t) 1; 
str2ba(dest, &addr.rc_bdaddr); 

// connect to server 
s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM); 

// set disconnect timeout to 2sec 
struct timeval tv; 
tv.tv_sec = 2; 
setsockopt(s, SOL_SOCKET, SO_RCVTIMEO,(struct timeval *)&tv,sizeof(struct timeval)); 

// make connection 
status = connect(s, (struct sockaddr *)&addr, sizeof(addr)); 

我如何選擇一個設備進行連接?

+0

什麼問題?您能否重新提出您的問題 – 2011-03-29 22:14:49

+0

主要問題是,在計算機中插入兩個藍牙適配器後,選擇將用於使用bluez rfcomm插座進行rfcomm連接的加密狗。 – 2011-03-30 16:45:27

回答

0

你不能這樣做,藍牙藍牙協議棧只能在任何時間只在一個軟件狗上工作,例如本地藍牙設備。

爲了能夠擁有藍牙堆棧控制的單個實例2個藍牙本地加密狗將成爲bluez堆棧的重大改變。

+4

這是錯誤的。 Bluez當然支持多個加密狗。 – geocar 2011-05-01 00:24:43

1

我相信bluez最多支持16個軟件狗。

你可能有興趣在此項目中的代碼: http://diy-machine.blogspot.com/

+0

編輯:藍色支持16加密狗http://www.kernel.org/doc/ols/2005/ols2005v1-pages-247-252.pdf – Joe 2011-04-18 21:41:58

1

你要調用bind()之前連接()。

看一看這樣的:

https://github.com/matlo/l2cap_proxy/blob/master/l2cap_con.c#L197

這是L2CAP,但我想這也可能RFCOMM。

+0

爲什麼要綁定是必需的?它有可能調用socket(),然後調用connect()。 – user48956 2011-12-14 20:03:41

+0

連接前綁定是設置源地址的posix慣用法。源地址用於確定輸出接口。因此,通過使用綁定,您可以選擇一個不同的bt適配器來啓動連接。如果您在BLE之前需要超過7個連接的從設備,這非常有用。 – 2016-06-06 21:02:47