Ich habe ein BLE SoC (QN9021)
mit einem Linux-System (Beagle-Knochen läuft openwrt
) über UART-Schnittstelle verbunden. Ich möchte, dass Linux BLE erkennt, das mit dem System verbunden ist, und Befehle wie gatttool, hcitool
sollten mit meinem BLE funktionieren.Linux identifiziert meine BLE?
Auch ich benutze Bluez
und ich möchte BlueZ Bibliotheken finden und kommuniziert direkt mit meinem BLE
.
Es sieht aus wie Quelldateien in bluez
verwendet socket()
Funktionsaufruf, um mit dem Bluetooth-Adapter zu kommunizieren. Ich habe Abschnitt hcitool.c
Quelldatei geschrieben, die Socket-Aufruf enthält:
/* Open HCI device.
* Returns device descriptor (dd). */
int hci_open_dev(int dev_id)
{
struct sockaddr_hci a;
int dd, err;
/* Check for valid device id */
if (dev_id < 0) {
errno = ENODEV;
return -1;
}
/* Create HCI socket */
dd = socket(AF_BLUETOOTH, SOCK_RAW | SOCK_CLOEXEC, BTPROTO_HCI);
if (dd < 0)
return dd;
/* Bind socket to the HCI device */
memset(&a, 0, sizeof(a));
a.hci_family = AF_BLUETOOTH;
a.hci_dev = dev_id;
if (bind(dd, (struct sockaddr *) &a, sizeof(a)) < 0)
goto failed;
return dd;
failed:
err = errno;
close(dd);
errno = err;
return -1;
}
Wie bereits erwähnt, ich bin Anschluss BLE SoC über UART. Wie kann ich meine BLE als Bluetooth und Funktionsaufruf wie Socket() sollte Deskriptor von meinem BLE öffnen?
Ich habe nicht umfassend gesucht, aber ich denke, Sie müssen ['hciattach'] (http://manpages.ubuntu.com/manpages/trusty/man8/hciattach.8.html) – Hasturkun
kann ich tun es programmatisch? – abhiarora
Sie können, aber unter der Annahme, dass das HCI nirgendwohin geht, ist es die Art von Sache, dass Sie entweder ein Init-Skript oder Ihren Code hciattach ausführen (da es einen Initialisierungscode für bestimmte HCIs hat). Siehe [hciattach source] (http://git.kernel.org/cgit/bluetooth/bluez.git/tree/tools/hciattach.c), wenn Sie an den Details interessiert sind. – Hasturkun