2012-07-10 4 views
7

Sto cercando di eseguire un codice di base di c in linux [ubuntu] per cercare dispositivi bluetooth, ma sto affrontando qualche problema.programmazione Bluetooth in c

Utilizzando il comando sudo apt-get install bluez, per installare la libreria blueZ richiesta si dice che bluez è già la versione più recente.

Ma errore viene che non è in grado di trovare bluetooth.h e altri file nella compilazione del codice sorgente C, con gcc -o simplescan simplescan.c -lbluetooth

c'è un pacchetto libreria completa, o devo scaricare questi file di intestazione ?.

Sto seguendo questa link

+0

I'am bot un programmatore C++ ma penso che tu abbia bisogno delle fonti. Bluetooth.h è un file di intestazione C++. – Stony

+7

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

+0

apt-get non funziona, posso scaricare questo pacchetto da https://launchpad.net/ubuntu/lucid/+source/bluez/4.60-0ubuntu8 –

risposta

5

Forse non ha incluso l'intestazione essenziale.

Ecco un esempio di codice per eseguire la scansione dei dispositivi 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; 
} 

per compilarlo su Linux, basta fare

gcc -o simplescan simplescan.c -lbluetooth 

EDIT:

Codice originale può essere trovato in here

+0

Hai scritto tu stesso quel codice o l'hai ricevuto da [qualche parte] (https://people.csail.mit.edu/albert/bluez-intro/c404.html) ...? – Daniel

+0

@Daniel L'ho preso da qualche parte, perché? lol – SamuelNLP

+3

Perché hai dimenticato di menzionarlo nella tua risposta. – Daniel

2

Per quanto ne so non ci sono pacchetti per queste intestazioni. Devi scaricare i seguenti file di intestazione da internet.

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

e creare una directory chiamata "bluetooth" sotto /usr/lib/ nella vostra macchina host e copiare le intestazioni di cui sopra per /usr/lib/bluetooth/. Quindi compila il tuo programma, dovrebbe funzionare.

Nota: durante la compilazione di legame con -lbluetooth

1

È necessario installare il pacchetto linux-headers. Su Ubuntu o Debian questo è fatto in questo modo:

sudo apt install linux-headers