You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

蓝牙Flags字段含义解析及BlueZ btmon工具输出中Flag代码解读

我来帮你拆解这些蓝牙Flags的含义,刚好我也经常用BlueZ的btmon工具调试BLE设备,分两部分给你讲清楚——首先要区分你看到的两种不同的Flags字段:

一、MGMT Event层的Flags(直接跟在RSSI后的那行)

这些是BlueZ自身MGMT接口定义的设备发现标志,对应BlueZ源码里的mgmt.h头文件,你提到的两个值含义如下:

  • 0x00000004Not Connectable,意思是这个BLE设备只对外广播数据,不接受任何连接请求,常见于蓝牙信标(Beacon)这类设备。
  • 0x00000000:无特殊标志,说明设备是可连接的,且没有其他发现相关的限制属性。
二、BLE广告数据中的Flags(Data子项里的Flags)

这类Flags是蓝牙核心规范官方定义的,对应蓝牙核心规范Vol 3, Part C, Section 11.1.3,每个bit位代表设备的不同能力(从bit0开始计数):

Bit位含义
0LE Limited Discoverable Mode(有限可发现模式)
1LE General Discoverable Mode(通用可发现模式)
2BR/EDR Not Supported(不支持经典蓝牙)
3Simultaneous LE and BR/EDR (Controller)(控制器同时支持BLE和经典蓝牙)
4Simultaneous LE and BR/EDR (Host)(主机同时支持BLE和经典蓝牙)

你遇到的两个值拆解后是:

  • 0x1a:转换成二进制是11010,对应bit1(0x02)、bit3(0x08)、bit4(0x10),也就是btmon已经帮你解析的:
    • LE General Discoverable Mode
    • Simultaneous LE and BR/EDR (Controller)
    • Simultaneous LE and BR/EDR (Host)
      这类设备同时支持BLE和经典蓝牙,且处于通用可发现状态。
  • 0x06:二进制是110,对应bit1(0x02)和bit2(0x04),也就是:
    • LE General Discoverable Mode
    • BR/EDR Not Supported
      这类设备只支持BLE,不兼容经典蓝牙。
实用解读技巧
  1. 先区分Flags所属的层级:MGMT层的Flags在@ MGMT Event: Device Found条目下,紧跟在RSSI之后;广告数据的Flags在Data length下面的子列表里。
  2. 对于MGMT层的Flags:如果遇到btmon没标注的数值,可以查BlueZ的mgmt.h(树莓派上可以用apt source bluez下载源码查看,里面定义了MGMT_DEV_FLAG_*系列宏)。
  3. 对于广告数据的Flags:把十六进制值转成二进制,对照上面的bit位表逐一匹配即可,btmon通常会帮你解析大部分常见组合,如果遇到未解析的,自己拆bit就行。

内容的提问来源于stack exchange,提问作者dl1

火山引擎 最新活动