2014-01-14 8 views
16

Ich habe ein Linux-Computer eine BLE Werbung sendet die folgenden Befehle:Gibt es eine Möglichkeit, die BLE-Werbefrequenz in BlueZ zu erhöhen?

sudo hciconfig hci0 up 
sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00 
sudo hciconfig hci0 leadv 3 

Das funktioniert gut, aber der Computer nur sendet seine Bluetooth-Anzeige einmal pro Sekunde. Ich möchte diese Frequenz auf 10 mal pro Sekunde oder mehr erhöhen. Gibt es eine Möglichkeit, die Werbefrequenz in BlueZ zu erhöhen? Oder ist einmal pro Sekunde der Standard und unveränderbar? Ich mache das gerne mit C-APIs, wenn das mit Kommandozeilen-Tools nicht möglich ist.

Antwort

37

Ich denke, ich habe es herausgefunden.

Statt:

sudo hciconfig hci0 up 
sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00 
sudo hciconfig hci0 leadv 3 

dies tun:

sudo hciconfig hci0 up 
sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00 
sudo hcitool -i hci0 cmd 0x08 0x0006 A0 00 A0 00 03 00 00 00 00 00 00 00 00 07 00 
sudo hcitool -i hci0 cmd 0x08 0x000a 01 

Der zweite hcitool Befehl (0x08 0x0006) ist "LE Set Werbung Parameter Die ersten beiden Bytes 00 A0 sind." Min Intervall Die zweiten zwei Bytes A0 00 sind das "maximale Intervall". In diesem Beispiel wird die Zeit zwischen Werbungen auf 100 ms eingestellt. Die Granularität dieser Einstellung beträgt 0,625 ms, sodass das Einstellen des Intervalls auf 01 00 die Werbung auf jeden Wert setzt 0.625ms Wenn Sie es auf A0 00 setzen, wird die Werbung so eingestellt, dass sie alle 0xA0 * 0.62 erreicht 5 ms = 100 ms. Wenn Sie es auf 40 06 setzen, wird die Anzeige so eingestellt, dass sie alle 0x0640 * 0,625ms = 1000ms aufruft. Das fünfte Byte, 03, setzt den Werbemodus auf nicht verbindbar. Bei einer nicht verbindungsfähigen Anzeige können Sie 100ms am schnellsten bewerben, mit einer verknüpfbaren Anzeige (0x00) können Sie viel schneller werben.

Der dritte hcitool Befehl (0x08 0x000a) ist "LE Set Advertise Enable". Es ist notwendig, diesen Befehl mit hcitool anstelle von hciconfig auszugeben, da "hciconfig hci0 leadv 3" automatisch die Werberate auf den langsameren Standardwert von 1280ms setzt.

Ich habe das herausgefunden, indem ich hcidump zur gleichen Zeit ausgeführt habe wie die ursprünglichen Befehle, die Sie in der Frage gepostet haben. Dies zeigt Ihnen eine Reihe roher hcitool-Befehle (nett annotiert für das, was sie tun), die von Bluez ausgeführt werden. Ich habe gerade zufällig von der hcidump-Ausgabe bemerkt, dass "hciconfig hci0 leadv 3" einen langsameren eingestellten Werbeintervallbefehl ausgibt.

Beachten Sie, dass dies alles auf dem IOGear GBU521 basiert, daher funktioniert dies möglicherweise nicht mit anderen Bluetooth LE-Chipsätzen.

+0

Das war unglaublich hilfreich. Haben Sie einen Link zu den Dokumenten, in denen Sie diese gefunden haben? – schodge

+0

Wie werden die Hex-Befehle bestimmt? Können Sie uns bitte auf die Dokumentation verweisen? Vielen Dank. – neowulf33

+0

Ich habe die Hexbefehle bestimmt, "indem ich hcidump zur gleichen Zeit wie die ursprünglichen Befehle ausgeführt habe ... in der Frage geschrieben. Dies zeigt Ihnen eine Reihe von rohen hcitool-Befehlen (nett kommentiert für das, was sie tun)" – davidgyoung