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

+0

그래 맞아. 장치에 연결하기 위해 BD_ADDR 이외의 것을 실제로 알 필요는 없습니다. 그러나 장치가 사용하려는 소켓 통신을 지원하는지 확인해야합니다. RFCOMM은 틀림없이 가장 많이 사용되는 소켓이므로 BTStack이 구현하지 않으면 놀랄 것입니다. – Zaphod

관련 문제