2013-03-20 101 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