Mit hcitool zu setzen, ad-Pakete
Es ist eine bekannte blog-post herum auf, wie ein usb-bluetooth 4-dongle, um ein iBeacon. Es läuft darauf hinaus, diese Magische Befehl:
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
Das Problem mit diesem Beispiel ist, dass es so undurchsichtig ist es schwer, es zu benutzen in einem mehr Allgemeinen format. Ich habe in der Lage zu brechen, die es auseinander ein wenig:
sudo hcitool -i hci0 cmd
sendet ein hci-Befehl an das Gerät hci0
0x08 0x0008
ist nur Magie um die ad-Paket, andere stackoverflow-Befehle, die gesagt haben, "es einfach verwenden, Fragen Sie nicht
1e
ist die Länge der GESAMTEN folgenden Datenpakets in bytes
02 01 1a 1a
Sind Fahnen zum einrichten der ad-Paket (details auf Anfrage)
ff 4c 00 ...
ist die "unternehmensspezifischen Daten' kodiert, dass die iBeacon-info
Was ich versucht habe zu tun ist, ersetzen Sie das "f ..." - bytes mit den opcodes für die Einstellung der parameter "NAME" "04 09 41 42 43" (die sollten es so einrichten, ABC) aber das funktioniert nicht.
Ich bin überrascht, dass das hcitool nicht, geben Sie uns einige Beispiele, wie das ad-Paket, denn das wäre sehr nützlich bei der Einstellung alle möglichen anderen Parameter (wie TEMP oder POWER). Hat jemand hatte keine Erfahrung in der Verwendung von hcitool, um Dinge wie NAMEN?
InformationsquelleAutor ScottJenson | 2014-05-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht. Keine dieser Antworten ist korrekt und sauber.
1) BLE haben einen separaten Befehl set. "LE Set Werbung Daten" - Befehl muss verwendet werden (siehe 7.8.7 vol. 2 Teil E).
2) LE Set Werbung Daten ist viel komplexer als das, was oben erklärt. Es gibt mindestens 2 1-Byte-Felder Länge, Paket müssen 32 bytes lang ist, null gepolstert, aber die erste Länge byte muss nicht sein, 0x1e (31) aber die Länge der wesentliche Teil verwendet, die einen oder mehrere Header. Jede Kopfzeile enthält immer noch eine Länge, die man ALS Typ byte (0x09 für die set local-name) und der name.
SET LE LOCAL NAME:
0x0c : Länge der folgenden Gruppe von Headern
0x0b : Länge des headers
0x09 : ANZEIGE-Typ für den vollständigen Namen
rest 0x0a Länge ist der name
InformationsquelleAutor Angelo Dureghello
Späte Antwort, aber jemand könnte das nützlich finden. Ich fand es als ich war auf der Suche rund um für Lösungen, selbst bei der Verwendung von hcitool.
Wenn Sie
hcitool cmd --help
wird es Ihnen sagen, so etwas wie diesescmd <ogf> <ocf> ...
. Es hilft zu schauen, die Bluetooth-Kern-Spezifikation, um herauszufinden, was 0x08 und 0x0008 wäre für OGF und OCF. Speziell Vol. 2, Teil E, 7.8und für die OCF-von 0x0008
Also im Grunde, mit 0x08 0x0008 Sie sagen, Sie sind die Einstellung (in der LE-Controller) die Länge der Daten, die gesendet wird. Wie für den Namen, da die Länge des BLE-Werbung-Paket ist 31 Byte (1E), die Sie benötigen, senden Sie die ganze 31 bytes. Wenn Sie also nur ABC-wie der name, die Einstellung
04 09 41 42 43
ist richtig, aber das ist nur fünf bytes. Für 31 Sie brauchen, um hinzuzufügen00
26-mal. Nur vorsichtig sein, Sie nicht zu viel oder zu wenig.Außerdem war ich nicht den Eindruck, dass BLE ad. - Pakete werden von Festnetz-31 byte-Größe, aber Sie sind zumindest für hcitool. Es funktioniert nicht, wenn Sie speziell die ausgehende Größe etwas kleiner als
1E
.InformationsquelleAutor nomve
Check-out diese Antwort zu einer ähnlichen Frage. Es ist im Grunde beschreibt, wie Sie herunterladen können der Riese Bluetooth Core Spec Dokument, und Lesen Sie in aller Befehle, die es Ihnen bietet. Sie können das hcitool Befehl führen Sie diese Befehle, wenn Sie einfach herausfinden, das richtige format (und herauszufinden, was die Befehle eigentlich tun!)
Großen Nachteil: ich habe nicht versucht, die Einstellung der name selbst, sondern der Blick auf den spec, wie es aussieht, dies ist beschrieben auf Seite 482 der spec in Abschnitt "7.3.11 Schreiben Lokaler Name-Befehl". Nach diesem das Kommando besteht aus:
So, ich würde versuchen, einen Befehl wie diesen:
hcitool -i hci0 cmd 0x08 0x0013 41 42 43
Einen anderen Tipp: Wenn du Befehle wie diesem, versuchen Sie es mit
hcidump &
damit der Befehl im hintergrund ausführt. Dann können Sie experimentellehcitool
Befehle (oder sogarhciconfig
Befehle) und siehe Kommentiertes details über das, was (human readable) - Befehle ausgeführt werden und welche Fehler aufgetreten sind, wenn überhaupt.Unter Verwendung der oben Tipp Sie können auch versuchen, die Ausführung
hciconfig name abc
um die lokalen Namen mit diesem Kommandozeilen-tool, dass Sie während der Ausführung einerhcidump &
im hintergrund. Dies sollte Ihnen zeigen, die richtige hcitool Befehl Werte zu verwenden.Naja, ich glaube nicht, dass der lokale name ist geschickt in die Werbung Paket., damit seine Länge Einschränkung nicht gelten soll.
Die Antwort "Send failed: Operation not permitted" deutet wahrscheinlich darauf hin, dass der Linux-Benutzer verwendet, um den Befehl ausführen, der nicht über die Rechte zum schreiben der BLE-Gerät. Versuchen
sudo hcitool -i hci0 cmd 0x08 0x0013 41 42 43
InformationsquelleAutor davidgyoung
Wäre es angezeigt, müssen Sie zwei Befehle statt. Die iBeacon-Daten sind in der "LE Set Werbung Daten" Daten und wurde bereits an anderer Stelle in diesem post. Um zu sehen, eine BLE friendly name Sie können einen zusätzlichen Befehl "LE Festlegen von Scan-Antwort-Daten", dies erfordert die Empfänger Scannen Sie Ihr Gerät (anstatt passiv zu Lesen, das Werbe-Paket). So können Sie kombinieren Angelo ' s Beispiel mit diese eine um das Gerät als iBeacon und setzen Sie den "friendly name", die der Scan-Antwort-Daten
Dieser arbeitete für mich mit eine Ubuntu-box mit einem BLE-dongle und dann Scannen die für die beacon-Nutzung dieser android BLE scan-app
InformationsquelleAutor Matt Young