为了读取原始的RSSI值,我们使用了一个名为Hcidump的实用程序,它监视蓝牙HCI数据。使用hcidump命令,我们可以在收到查询响应消息时读取原始RSSI值。要获得每个响应数据包的RSSI值,我们首先将查询模式设置为使用RSSI.In查询。要读取原始的RSSI值,我们运行hcidump工具,然后使用适当的HCI函数开始定期查询。
我不知道如何使用hcidump来仅获取RSSI原始数据,或者如何启动定期查询。我看到了所有的作品,但我不能。
我创建了hcidump --raw来获取原始数据,并尝试解析这些数据以获得rssi,但我不知道哪个十六进制是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值。
发布于 2017-05-08 13:36:16
您可以尝试使用sudo hcidump [-a],这将获得附近所有蓝牙的名称和RSSI值,devices.you可以检查您可以使用here做什么。
发布于 2016-07-28 05:01:21
我们可以通过检查hcidump工具背后的源代码来解决这个问题。它是官方的Linux蓝牙协议栈BlueZ的一部分。您可以下载BlueZ源代码here,以进行后续操作。如果您打开源代码并进入lib/文件夹,您可以找到hci.h,其中包含BlueZ函数的结构定义。否则,您可以查看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字节的大小是有保证的。
https://stackoverflow.com/questions/37073114
复制相似问题