2016-05-06 26 views
1

Um die rohen RSSI-Werte zu lesen, verwenden wir ein Dienstprogramm namens Hcidump, das die Bluetooth-HCI-Daten überwacht. Mithilfe von hcidump-Befehlen können wir die RSSI-Rohwerte lesen, wenn eine Anfrageantwortnachricht empfangen wird. Um RSSI-Werte für jedes Antwortpaket zu erhalten, setzen wir zuerst den Abfragemodus auf Anfrage mit RSSI. Um rohe RSSI-Werte zu lesen, führen wir das hcidump-Werkzeug aus und verwenden dann die geeigneten HCI-Funktionen, um periodische Abfragen zu starten.Erhalten RSSI mit hcidump

Ich weiß nicht, wie man hcidump verwendet, um nur RSSI-Rohdaten zu erhalten oder wie man eine periodische Anfrage beginnt. Ich sehe alle Möglichkeiten, aber ich bin nicht in der Lage.

Ich mache hcidump --raw, um Rohdaten zu erhalten, und versuche, diese Daten zu analysieren, um das rssi zu erhalten, aber ich weiß nicht, welches hex die rssi info ist.

Dies ist, was ich

04 2F FF 01 AC A2 65 92 88 EC 01 00 0C 02 5A 2D 1F D2 08 09 
    4E 65 78 75 73 20 36 17 03 05 11 0A 11 0C 11 0E 11 12 11 15 
    11 16 11 1F 11 2F 11 00 12 32 11 01 05 01 07 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 

Jetzt muss ich wissen, erhalten, die der RSSI-Wert ist.

Antwort

0

Wir können dies herausfinden, indem wir den Quellcode hinter dem hcidump Tool überprüfen. Es ist ein Teil von BlueZ, dem offiziellen Linux Bluetooth Stack. Sie können den BlueZ Quellcode here herunterladen, um mitzukommen. Wenn Sie den Quellcode öffnen und in den Ordner lib/ gehen, finden Sie hci.h, der die Strukturdefinitionen für BlueZs HCI-Funktionen hat. Andernfalls können Sie in den Header-Dateien Ihres Linux-Systems nachsehen. Der Pfad sollte etwa lauten: /usr/include/bluetooth/hci.h. In dieser Header-Datei finden Sie alle Strukturdefinitionen für die HCI-Funktionalität von BlueZ. Konkret finden Sie die Strukturdefinition für inquiry_info_with_rssi. Die Header-Datei ist ein paar tausend Zeilen lang, so dass es besser wäre, die Header-Datei zu durchsuchen, anstatt sie zu durchsuchen. Aus dem Blick auf diese Struktur und die #define unten, können Sie sehen, dass die Strukturgröße 14 Bytes ist. Der rssi-Wert ist das letzte Mitglied der Struktur und nur 1 Byte, also sollte es das 14. Byte sein, das Sie zählen.

typedef struct { 
bdaddr_t bdaddr; 
uint8_t  pscan_rep_mode; 
uint8_t  pscan_period_mode; 
uint8_t  dev_class[3]; 
uint16_t clock_offset; 
int8_t  rssi; 
} __attribute__ ((packed)) inquiry_info_with_rssi; 
#define INQUIRY_INFO_WITH_RSSI_SIZE 14 

Eine interessante Anmerkung ist, dass __attribute__ ((packed)) ist ein Kompilierer-Vorprozessor sie nicht auf die Pad-Struktur, so dass die Größe von 14 Bytes guranteed lenken.

2

können Sie versuchen, mit sudo hcidump [-a] dies wird Ihnen den Namen und RSSI-Wert aller in der Nähe Bluetooth-Geräte erhalten.Sie können überprüfen, was Sie mit hcidump here tun können.