Bluez执行蓝牙查询时hci_inquiry接口的lap参数应如何设置?
关于hci_inquiry接口lap参数的解答
LAP是蓝牙地址的24位低地址部分(Lower Address Part),蓝牙查询扫描的核心逻辑是:被扫描设备只会应答和自身配置的查询接入码匹配的LAP请求,以下是你提出问题的具体解答:
- 硬编码字节的含义
你看到的0x33 0x8B 0x9E按小端规则拼接后得到24位值0x9E8B33,这是蓝牙核心规范定义的通用查询接入码(GIAC, General Inquiry Access Code),是行业公共标准值,所有默认设置为「可被发现」的蓝牙设备都会响应该LAP的查询请求。 - 传NULL的影响
传NULL等价于使用默认的GIAC值,这是该接口的设计默认行为,会扫描周围所有普通可发现的蓝牙设备,也是绝大多数场景下的正确用法。 - 传随机字节的效果
如果你传入蓝牙规范定义之外的随机LAP值,正常情况下只有专门配置了响应该特定LAP的专用蓝牙设备才会应答你的查询,普通可发现设备不会返回任何结果。你实测没有观察到差异,大概率是你使用的蓝牙控制器、驱动没有严格实现该规范逻辑,直接忽略了传入的LAP参数,默认按GIAC执行扫描。
另外规范里还有一个特殊的有限查询接入码LIAC(值为0x9E8B00),只有设置为「有限可发现」的设备会响应这个LAP,一般用于低功耗、短时可发现的场景。 - 推荐传入值
绝大多数普通扫描场景直接传NULL即可,无需额外配置。如果你有特殊的专用设备扫描需求,再传入对应约定的自定义LAP值即可。 - 是否需要传入本地设备的LAP
完全不需要。本地设备的LAP是自身蓝牙地址的一部分,和查询周边设备没有关联,普通蓝牙设备也不会响应其他设备的私有LAP查询请求,传入没有任何实际意义。
内容的提问来源于stack exchange,提问作者hciinq
相关产品推荐
相关产品推荐

