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?
hci_inquiry() Funktion verwendet wird, um andere Geräte zu scannen. Es macht das Bluetooth nicht erkennbar. –
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 –