2016-06-08 7 views
3

Ich möchte einen Bluetooth-Server, der startet und andere Geräte können damit paaren.Herstellung von Bluetooth-Erkennung mit c-code

Ich kann den Code zur Kompilierung bekommen, der Server startet, aber ich kann die Werbung nicht sehen, wenn ich für Bluetooth-Geräte von Android-Handy scanne.

Ich denke, ich muss den erkennbaren Modus einschalten.

Ich habe versucht, nach der Funktion in der hci_lib.h zu suchen, die das Bluetooth erkennbar macht, aber es nicht finden konnte.

Dies ist der Code, den ich bis jetzt habe.

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

int main(int argc, char **argv) 
{ 
struct sockaddr_rc loc_addr = { 0 }, rem_addr = { 0 }; 
char buf[1024] = { 0 }; 
int s, client, bytes_read,dev_id,sock; 
socklen_t opt = sizeof(rem_addr); 

dev_id = hci_get_route(NULL); 
if (dev_id < 0) { 
    perror("No Bluetooth Adapter Available"); 
    exit(1); 
} 

if (hci_devinfo(dev_id, &dev_info) < 0) { 
    perror("Can't get device info"); 
    exit(1); 
} 

sock = hci_open_dev(dev_id); 
if (sock < 0) { 
    perror("HCI device open failed"); 
    free(info); 
    exit(1); 
} 


// allocate socket 
s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM); 

// bind socket to port 1 of the first available 
// local bluetooth adapter 
loc_addr.rc_family = AF_BLUETOOTH; 
loc_addr.rc_bdaddr = *BDADDR_ANY; 
loc_addr.rc_channel = (uint8_t) 1; 
bind(s, (struct sockaddr *)&loc_addr, sizeof(loc_addr)); 

// put socket into listening mode 
listen(s, 1); 

// accept one connection 
client = accept(s, (struct sockaddr *)&rem_addr, &opt); 

ba2str(&rem_addr.rc_bdaddr, buf); 
fprintf(stderr, "accepted connection from %s\n", buf); 
memset(buf, 0, sizeof(buf)); 

// read data from the client 
bytes_read = read(client, buf, sizeof(buf)); 
if(bytes_read > 0) { 
    printf("received [%s]\n", buf); 
} 

// close connection 
close(client); 
close(s); 
return 0; 
} 

Was muss getan werden, um den Bluetooth-Erkennungsmodus einzuschalten?

Antwort

2

Durch die BlueZ Befehlszeile den Befehl Auffindbarkeit zu ermöglichen, durch das hciconfig Werkzeug wird wie folgt erreicht:

hciconfig hciX piscan 

Wo hciX Ist Ihr HCI-Gerät auf dem System installiert, wird es in den meisten Fällen hci0 sein. Sie können den obigen Befehl versuchen und wenn es keinen Fehler zurückgibt, sollten Sie in der Lage sein, Ihre Linux-Maschine durch Ihr Android-Gerät zu sehen, indem Sie eine Anfrage durchführen.

https://github.com/aguedes/bluez/blob/master/tools/hciconfig.c

Und dann Ihr Ausgangspunkt wird die folgende Funktion: - -:

Wenn dies für Sie nicht funktioniert, dann ist der Code, den Sie benötigen, können in der hciconfig Quelle in den unten stehenden Link finden
static void cmd_scan(int ctl, int hdev, char *opt) 
{ 
    struct hci_dev_req dr; 

    dr.dev_id = hdev; 
    dr.dev_opt = SCAN_DISABLED; 
    if (!strcmp(opt, "iscan")) 
     dr.dev_opt = SCAN_INQUIRY; 
    else if (!strcmp(opt, "pscan")) 
     dr.dev_opt = SCAN_PAGE; 
    else if (!strcmp(opt, "piscan")) 
     dr.dev_opt = SCAN_PAGE | SCAN_INQUIRY; 

    if (ioctl(ctl, HCISETSCAN, (unsigned long) &dr) < 0) { 
     fprintf(stderr, "Can't set scan mode on hci%d: %s (%d)\n", 
         hdev, strerror(errno), errno); 
     exit(1); 
    } 
} 

ich hoffe, das hilft

0

Ich glaube, Sie möchten die hci_inquiry() -Funktion. Es initiiert Geräteerkennung auf dem Bluetooth-Adapter.

int hci_inquiry (int adapter_id, int len, int max_rsp, 
    const uint8 t *lap, inquiry_info **devs, long flags); 

hier ein gutes Tutorial auf sie ist: http://people.csail.mit.edu/albert/bluez-intro/c404.html#bzi-choosing

+0

hci_inquiry() Funktion verwendet wird, um andere Geräte zu scannen. Es macht das Bluetooth nicht erkennbar. –

+0

Sie haben Recht, ich entschuldige mich. Die API ist ein bisschen verwirrend. Du scheinst das mit ioctl() machen zu können, aber ich denke, dass es einen besseren Weg geben sollte. Haben Sie das versucht: http://stackoverflow.com/questions/30058715/bluez-hci-api-to-make-the-host-discoverable?rq=1 –

Verwandte Themen