Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用hcidump获取RSSI_Linux_Bluetooth_Rssi_Hci - Fatal编程技术网

Linux 使用hcidump获取RSSI

Linux 使用hcidump获取RSSI,linux,bluetooth,rssi,hci,Linux,Bluetooth,Rssi,Hci,为了读取原始RSSI值,我们使用了一个名为Hcidump的实用程序,它监视蓝牙HCI数据。使用hcidump命令,我们可以在收到查询响应消息时读取原始RSSI值。为了获得每个响应数据包的RSSI值,我们首先将查询模式设置为使用RSSI进行查询。为了读取原始RSSI值,我们运行hcidump工具,然后使用适当的 HCI功能启动定期查询 我不知道如何使用hcidump仅获取RSSI原始数据,也不知道如何开始定期查询。我看到了所有的选项,但我不能 我使用hcidump--raw来获取原始数据,并尝试解

为了读取原始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值。

我们可以通过检查
hcidump
工具背后的源代码来解决这个问题。它是官方Linux蓝牙协议栈的一部分。您可以下载BlueZ源代码,以便后续操作。如果打开源代码并进入
lib/
文件夹,您可以找到
hci.h
,其中包含BlueZ的hci函数的结构定义。否则,您可以查看Linux系统的头文件。路径应该类似于:
/usr/include/bluetooth/hci.h
。在这个头文件中,您将找到BlueZ的HCI功能的所有结构定义。具体来说,您可以使用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

一个有趣的注意事项是,
\uuuu attribute\uuuu((packed))
是一个编译器预处理器,指示它不填充结构,因此保证了14字节的大小。

您可以尝试使用
sudo hcidump[-a]
这将为您获取附近所有蓝牙设备的名称和RSSI值。您可以查看如何使用hcidump