Código
#include <stdio.h> #include <stdlib.h> #include <bluetooth/bluetooth.h> #include <bluetooth/hci.h> #include <bluetooth/hci_lib.h> int main () { inquiry_info *ii = NULL; //Almacena la lista de dispositivos detectados durante el inquiry int max_rsp, num_rsp; //No de respuestas/dispositivos detectados int dev_id; //Identificador del adaptador Bluetooth local int socket; //Socket HCI; int len, i; char MAC_dev[20]; //Direccion MAC del dispositivo detectado char nombre_dev[248]; //Nombre del dispositivo detectado //Obtenemos el identificador del adaptador local Bluetooth dev_id = hci_get_route(NULL); if (dev_id < 0) { printf("Error. Dispositivo Bluetooth local no disponible.\n"); exit(1); } //Abrimos un socket local HCI socket = hci_open_dev(dev_id); if (socket < 0) { printf("Error. Fallo al intentar abrir socket HCI.\n"); exit(1); } //Inicializamos algunas variables len = 8; //El tiempo de inquiry es de 1.28x8=10.24 secs/dispositivo max_rsp = 255; //Se pueden detectar a lo sumo 255 dispositivos //Creamos la lista de dispositivos detectados con hci_inquiry ii = (inquiry_info*)malloc(max_rsp * sizeof(inquiry_info)); printf("Detectando dispositivos...\n\n"); //hci_inquiry lleva a cabo un descubrimiento de dispositivos //Bluetooth y devuelve una lista de dispositivos detectados en //inquiry_info ii para ser almacenados. // //La bandera IREQ_CACHE_FLUSH permite que la caché sea limpiada //antes de buscar nuevos dispositivos, ya que podrian aparecer //dispositivos anteriormente detectados pero ahora fuera de rango. num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, IREQ_CACHE_FLUSH); if(num_rsp < 0) printf("Error. Fallo al intentar hci_inquiry.\n"); //Para cada una de las respuestas obtenidas durante el inquiry //obtenemos el nombre del dispositivo for(i=0; i<num_rsp; i++) { ba2str(&(ii+i)->bdaddr, MAC_dev); memset(nombre_dev, 0, sizeof(nombre_dev)); if(hci_read_remote_name(socket,&(ii+i)->bdaddr,sizeof(nombre_dev), nombre_dev, 0) < 0) { strcpy(nombre_dev, "[Desconocido]"); } printf("Dispositivo (%d) encontrado:\n\tMAC: %s\t\tNombre: %s\n\n",i+1, MAC_dev, nombre_dev); } free(ii); close(socket); return(0); }