【问题标题】:Obtain RSSI with hcidump使用 hcidump 获取 RSSI
【发布时间】:2016-05-06 12:37:58
【问题描述】:

为了读取原始 RSSI 值,我们使用了一个名为 Hcidump 的实用程序,它可以监控蓝牙 HCI 数据。使用 hcidump 命令,我们可以在收到查询响应消息时读取原始 RSSI 值。为了获得每个响应数据包的 RSSI 值,我们首先将查询模式设置为 Inquiry With RSSI。为了读取原始 RSSI 值,我们运行 hcidump 工具,然后使用适当的 用于启动定期查询的 HCI 函数。

我不知道如何使用 hcidump 仅获取 RSSI 原始数据,或者如何开始定期查询。我看到了所有的选项,但我看不到。

我使用 hcidump --raw 获取原始数据,并尝试解析这些数据以获取 rssi,但我不知道 rssi 信息是哪个 hex。

这是我得到的

  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 值。

【问题讨论】:

    标签: linux bluetooth rssi hci


    【解决方案1】:

    您可以尝试使用sudo hcidump [-a],这将为您提供附近所有蓝牙设备的名称和 RSSI 值。您可以查看使用 hcidump here 可以做什么。

    【讨论】:

      【解决方案2】:

      我们可以通过检查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 字节的大小。

      【讨论】:

        猜你喜欢
        • 2012-07-01
        • 2016-12-13
        • 2012-06-01
        • 2011-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-24
        • 2016-04-16
        相关资源
        最近更新 更多