2012-07-10 17 views
7

Estoy tratando de ejecutar un código básico de c en Linux [ubuntu] para buscar dispositivo bluetooth, pero me enfrenta un problema.Linux programación de Bluetooth en c

Al usar el comando sudo apt-get install bluez, para instalar la biblioteca blueZ requerida, está diciendo que bluez ya es la versión más nueva.

Pero viene error que no pueda encontrar bluetooth.h y otros archivos en la compilación de código fuente C, con gcc -o simplescan simplescan.c -lbluetooth

¿Hay un paquete de biblioteca completa, o tengo que descargar estos archivos de cabecera ?.

Estoy siguiendo este link

+0

Soy un programador de C++, pero creo que necesita las fuentes. Bluetooth.h es un archivo de encabezado C++. – Stony

+7

Pruebe 'apt-get install libbluetooth-dev'. –

+0

apt-get no funciona, ¿puedo descargar este paquete de https://launchpad.net/ubuntu/lucid/+source/bluez/4.60-0ubuntu8 –

Respuesta

5

Tal vez usted no incluyó la cabecera esencial.

aquí es un ejemplo de código para buscar los dispositivos Bluetooth

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <sys/socket.h> 
#include <bluetooth/bluetooth.h> 
#include <bluetooth/hci.h> 
#include <bluetooth/hci_lib.h> 

int main(int argc, char **argv) 
{ 
    inquiry_info *ii = NULL; 
    int max_rsp, num_rsp; 
    int dev_id, sock, len, flags; 
    int i; 
    char addr[19] = { 0 }; 
    char name[248] = { 0 }; 

    dev_id = hci_get_route(NULL); 
    sock = hci_open_dev(dev_id); 
    if (dev_id < 0 || sock < 0) { 
     perror("opening socket"); 
     exit(1); 
    } 

    len = 8; 
    max_rsp = 255; 
    flags = IREQ_CACHE_FLUSH; 
    ii = (inquiry_info*)malloc(max_rsp * sizeof(inquiry_info)); 

    num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, flags); 
    if(num_rsp < 0) perror("hci_inquiry"); 

    for (i = 0; i < num_rsp; i++) { 
     ba2str(&(ii+i)->bdaddr, addr); 
     memset(name, 0, sizeof(name)); 
     if (hci_read_remote_name(sock, &(ii+i)->bdaddr, sizeof(name), 
      name, 0) < 0) 
     strcpy(name, "[unknown]"); 
     printf("%s %s\n", addr, name); 
    } 

    free(ii); 
    close(sock); 
    return 0; 
} 

compilarlo en Linux, acaba de hacer

gcc -o simplescan simplescan.c -lbluetooth 

EDIT:

Código original se puede encontrar en here

+0

¿Escribiste ese código o lo obtuviste de [somewhere] (https://people.csail.mit.edu/albert/bluez-intro/c404.html) ...? – Daniel

+0

@Daniel Lo obtuve de algún lado, ¿por qué? lol – SamuelNLP

+3

Porque olvidaste mencionarlo en tu respuesta. – Daniel

2

Como sé, no hay paquetes para estos encabezados. Debe descargar los siguientes archivos de encabezado desde Internet.

  1. bluetooth.h
  2. hci.h
  3. hci_lib.h

y crear un directorio llamado "bluetooth" bajo /usr/lib/ en su máquina y copiar las cabeceras anteriores a /usr/lib/bluetooth/. Luego compila tu programa, debería funcionar.

Nota: durante la compilación de enlace con -lbluetooth

1

Es necesario instalar el paquete linux-headers. En Ubuntu o Debian esto se hace haciendo esto:

sudo apt install linux-headers