2012-07-10 3 views
7

J'essaie d'exécuter un code de base de c dans linux [ubuntu] pour rechercher un appareil Bluetooth, mais je suis confronté à un problème.linux Programmation Bluetooth en c

En utilisant la commande sudo apt-get install bluez, pour installer la bibliothèque bluez requise, il dit que bluez est déjà toute nouvelle version.

Mais l'erreur est que pas en mesure de trouver bluetooth.h et d'autres fichiers dans la compilation du code source C, avec gcc -o simplescan simplescan.c -lbluetooth

est-il un package de bibliothèque complète, ou dois-je télécharger ces fichiers d'en-tête ?.

Je suivais ce link

+0

Je suis un programmeur C++, mais je pense que vous avez besoin des sources. Bluetooth.h est un fichier d'en-tête C++. – Stony

+7

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

+0

apt-get ne fonctionne pas, puis-je télécharger ce paquet de https://launchpad.net/ubuntu/lucid/+source/bluez/4.60-0ubuntu8 –

Répondre

5

Peut-être que vous ne l'avez pas inclus l'en-tête essentielle.

est ici un exemple de code pour détecter les périphériques 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; 
} 

pour compiler sur Linux, il suffit de faire

gcc -o simplescan simplescan.c -lbluetooth 

EDIT:

Code d'origine se trouve dans here

+0

Avez-vous écrit que le code vous-même ou avez-vous obtenu de [quelque part] (https://people.csail.mit.edu/albert/bluez-intro/c404.html) ...? – Daniel

+0

@Daniel Je l'ai eu de quelque part, pourquoi? lol – SamuelNLP

+3

Parce que vous avez oublié de le mentionner dans votre réponse. – Daniel

2

Comme pour je sais il n'y a pas de paquets pour ces en-têtes. Vous devez télécharger les fichiers d'en-tête suivants à partir d'Internet.

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

et créez un répertoire appelé "bluetooth" sous /usr/lib/ dans votre machine hôte et copiez-les en-têtes ci-dessus pour /usr/lib/bluetooth/. Ensuite, compilez votre programme, cela devrait fonctionner.

Note: tout lien avec la compilation -lbluetooth

1

Vous devez installer le paquet-headers linux. Sur Ubuntu ou Debian, ceci est fait en faisant ceci:

sudo apt install linux-headers 
Questions connexes