1. 목적

ㄱ. BlueZ의 simplescan 예제를 테스트 한다.

ㄴ. gcc를 통해 blueZ를 포함하여 컴파일 하는 법을 배워본다.


2. 본론

ㄱ. mit 대학의 bluetooth 관련 강의의blueZ 예제를 참고한다.

  1.     
  2. #include <stdio.h>  
  3. #include <stdlib.h>  
  4. #include <unistd.h>  
  5. #include <sys/socket.h>  
  6. #include <bluetooth/bluetooth.h>  
  7. #include <bluetooth/hci.h>  
  8. #include <bluetooth/hci_lib.h>  
  9.   
  10. int main(int argc, char **argv)  
  11. {  
  12.   inquiry_info *ii = NULL;  
  13.   int max_rsp, num_rsp;  
  14.   int dev_id, sock, len, flags;  
  15.   int i;  
  16.   char addr[19] = { 0 };  
  17.   char name[248] = { 0 };  
  18.   
  19.   dev_id = hci_get_route(NULL);  
  20.   sock = hci_open_dev( dev_id );  
  21.   if (dev_id < 0 || sock < 0) {  
  22.        perror("opening socket");  
  23.        exit(1);  
  24.   }  
  25.   
  26.   
  27.   len  = 8;  
  28.   max_rsp = 255;  
  29.   flags = IREQ_CACHE_FLUSH;  
  30.   ii = (inquiry_info*)malloc(max_rsp * sizeof(inquiry_info));  
  31.     
  32.   num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, flags);  
  33.   if( num_rsp < 0 ) perror("hci_inquiry");  
  34.   
  35.   for (i = 0; i < num_rsp; i++) {  
  36.        ba2str(&(ii+i)->bdaddr, addr);  
  37.        memset(name, 0, sizeof(name));  
  38.        if (hci_read_remote_name(sock, &(ii+i)->bdaddr, sizeof(name),   
  39.            name, 0) < 0)  
  40.        strcpy(name, "[unknown]");  
  41.        printf("%s  %s\n", addr, name);  
  42.   }  
  43.   
  44.   free( ii );  
  45.   close( sock );  
  46.   return 0;  
  47. }   

ㄴ. ㄱ의 소스는 simplescan.c의 소스이다. 컴파일은 다음의 명령어를 통해 하게 된다.

gcc -o scantest simplescan.c -lbluetooth

ㄷ.  컴파일 후 생성되는 scantest 파일일 실행하게 되면 다음과 같은 결과를 볼 수 있다.



3. 결론

ㄱ. BlueZ를 통한 simplescan.c 예제를 실습해보았다.

ㄴ. 블루투스 기기들이 검색되는 것을 볼 수 있다.

Posted by 시크한공돌이
,