【问题标题】:BlueZ,Bluetooth Management API: Read Controller Information Command, bluetooth_version, human-readableBlueZ,蓝牙管理API:读取控制器信息命令,bluetooth_version,人类可读
【发布时间】:2020-05-10 15:39:35
【问题描述】:

BlueZ 蓝牙管理 API 的读取控制器信息命令返回的 bluetooth_version 映射到什么人类可读的版本号?

例如我的控制器返回 0x08。这是蓝牙 4.1 还是 5.2 还是 1.1 还是...?

我在mgmt-api.txt 文件中找不到任何信息。在谷歌上搜索“蓝牙版本二进制到字符串”也没有任何帮助。此外,spec 没有出现“0x08”或“蓝牙版本”的任何内容。在那里搜索版本毫无意义,因为每个页眉都包含该单词...

新见解

btmon 好像知道...

@MGMT 事件:命令比较.. (0x0001) plen 283 {0x0003} [hci0]

11:04:18.712443 读取控制器信息 (0x0004) plen 280

    Status: Success (0x00)
    Address: 00:25:CA:2A:08:38 (OUI 00-25-CA)
    Version: Bluetooth 4.2 (0x08)

【问题讨论】:

    标签: bluetooth bluetooth-lowenergy bluez


    【解决方案1】:

    我还在monitor/packet.c中找到了一个映射:

    void packet_print_version(const char *label, uint8_t version,
                    const char *sublabel, uint16_t subversion)
    {
        const char *str;
    
        switch (version) {
        case 0x00:
            str = "Bluetooth 1.0b";
            break;
        case 0x01:
            str = "Bluetooth 1.1";
            break;
        case 0x02:
            str = "Bluetooth 1.2";
            break;
        case 0x03:
            str = "Bluetooth 2.0";
            break;
        case 0x04:
            str = "Bluetooth 2.1";
            break;
        case 0x05:
            str = "Bluetooth 3.0";
            break;
        case 0x06:
            str = "Bluetooth 4.0";
            break;
        case 0x07:
            str = "Bluetooth 4.1";
            break;
        case 0x08:
            str = "Bluetooth 4.2";
            break;
        case 0x09:
            str = "Bluetooth 5.0";
            break;
        case 0x0a:
            str = "Bluetooth 5.1";
            break;
        default:
            str = "Reserved";
            break;
        }
    
        if (sublabel)
            print_field("%s: %s (0x%2.2x) - %s %d (0x%4.4x)",
                        label, str, version,
                        sublabel, subversion, subversion);
        else
            print_field("%s: %s (0x%2.2x)", label, str, version);
    }
    

    【讨论】:

      【解决方案2】:

      我不知道是否以及在哪里记录了蓝牙版本映射。

      但是可以在 bluez lib/hci.c 源文件中找到这样的映射:

      /* Version mapping */
      static hci_map ver_map[] = {
          { "1.0b",   0x00 },
          { "1.1",    0x01 },
          { "1.2",    0x02 },
          { "2.0",    0x03 },
          { "2.1",    0x04 },
          { "3.0",    0x05 },
          { "4.0",    0x06 },
          { "4.1",    0x07 },
          { "4.2",    0x08 },
          { "5.0",    0x09 },
          { "5.1",    0x0a },
          { NULL }
      };
      

      【讨论】:

        猜你喜欢
        • 2022-01-04
        • 2018-07-30
        • 2012-07-17
        • 2017-05-18
        • 2018-06-24
        • 1970-01-01
        • 1970-01-01
        • 2016-01-17
        • 2016-04-09
        相关资源
        最近更新 更多