2016-05-06 59 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做什么。