为了读取原始RSSI值,我们使用一个名为Hcidump的实用程序来监视蓝牙HCI数据。使用hcidump命令,我们可以在收到查询响应消息时读取原始RSSI值。为了获得每个响应数据包的RSSI值,我们首先将查询模式设置为使用RSSI查询。为了读取原始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值。
答案 0 :(得分:2)
您可以尝试使用sudo hcidump [-a]
这将获得所有附近蓝牙设备的名称和RSSI值。您可以查看使用hcidump here可以执行的操作。
答案 1 :(得分: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个字节的大小。