2016-05-06 82 views
1

爲了讀取原始RSSI值,我們使用了一個名爲Hcidump的實用程序來監視藍牙HCI數據。使用hcidump命令,我們可以在收到查詢響應消息時讀取原始RSSI值。爲了獲得每個響應數據包的RSSI值,我們首先將查詢模式設置爲使用RSSI查詢。爲了讀取原始RSSI值,我們運行hcidump工具,然後使用相應的HCI函數開始定期查詢。使用hcidump獲取RSSI

我不知道如何使用hcidump僅包含RSSI原始數據或者如何啓動定期查詢。我看到所有的觀點,但我無能爲力。

我讓hcidump --raw獲取原始數據,並試圖解析這個數據來獲取rssi,但我不知道這個是什麼hex是rssi信息。

這是我獲得

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 

現在我需要知道這是RSSI值。

回答

0

我們可以通過檢查hcidump工具背後的源代碼來了解這一點。它是官方Linux藍牙協議棧BlueZ的一部分。您可以下載BlueZ源代碼here,以跟進。如果打開源代碼並進入lib/文件夾,您可以找到hci.h,它具有用於BlueZ的HCI功能的結構定義。否則,您可以查看您的Linux系統的頭文件。路徑應該是這樣的:/usr/include/bluetooth/hci.h。在這個頭文件中,你會發現BlueZ的HCI功能的所有結構定義。具體而言,您可以找到inquiry_info_with_rssi的結構定義。頭文件長達幾千行,因此您可以更好地搜索頭文件,而不是試圖查看頭文件。從下面的結構和#define可以看到結構大小是14個字節。 rssi值是結構的最後一個成員,只有1個字節,所以它應該是你計算的第14個字節。

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 

一個有趣的注意的是,__attribute__ ((packed))是一個編譯預處理器引導其不墊結構,所以14個字節的大小存在保證。

2

你可以嘗試使用sudo hcidump [-a]這會給你所有附近的藍牙設備的名稱和RSSI值。你可以看看你可以用hcidump here做什麼。