当前位置: 首页 > news >正文

【android bluetooth 协议分析 01】【HCI 层介绍 6】【WriteLeHostSupport命令介绍】

HCI 指令 HCI_Write_LE_Host_Support 是 Bluetooth Host 向 Controller 发送的一条指令,用于启用或禁用主机对 Bluetooth Low Energy(LE)的支持能力。该指令属于 HCI(Host Controller Interface)命令集合中,规范位置为 Core Spec v5.x,Vol 2, Part E, Section 7.3.79

7	2025-04-24 15:55:53.351405	host	controller	HCI_CMD	6	Sent Write LE Host SupportedBluetooth HCI Command - Write LE Host SupportedCommand Opcode: Write LE Host Supported (0x0c6d)0000 11.. .... .... = Opcode Group Field: Host Controller & Baseband Commands (0x03).... ..00 0110 1101 = Opcode Command Field: Write LE Host Supported (0x06d)Parameter Total Length: 2LE Supported Host: true (0x01)Simultaneous LE Host: false (0x00)[Response in frame: 8][Command-Response Delta: 0.521ms]

1. 简要理解

HCI_Write_LE_Host_Support 指令的目的是:

告诉 Controller(控制器)主机是否支持 LE(Low Energy)功能。

LE 是 Bluetooth 4.0 引入的一种低功耗通信机制,开启这个支持标志后,控制器会在其特性(Feature Mask)中标记主机支持 LE。


2. 指令定义(HCI_Write_LE_Host_Support)

在这里插入图片描述

1. Command Parameters(命令参数)

  1. LE_Supported_Host(1 Octet)

    • 用于设置主机是否支持 LE。
    • 取值参考 [Core Spec Vol 2, Part C, Section 3.2] 中的定义。
    • 常用值:
      • 0x00:不支持
      • 0x01:支持
  2. Unused(1 Octet)

    • 历史遗留字段,当前控制器会忽略这个字段。
    • 任意值都可以写入。

2. Return Parameters(返回参数)

字段长度描述
Status1 Octet结果状态码
  • 0x00:表示指令执行成功。

  • 0x01 ~ 0xFF:指令执行失败,错误码参考 [Vol 1] Part F(错误码定义)。


3. 事件通知

  • 该命令完成后,Controller 会发送 HCI_Command_Complete 事件,向 Host 报告执行结果。
  • Host 应监听该事件以判断设置是否成功。

3. 应用场景(为什么需要设置它?)

在有些系统中(尤其是支持双模 Bluetooth 的设备),LE 支持并不是默认启用的。这条指令允许主机在启动时显式启用对 LE 的支持,从而使 Controller 更新自己的 Feature Mask,使得后续的 LE 操作(如 LE Advertising、LE Scanning、LE Connection)被允许。

例如:

  • 手机或车载主机首次启动 Bluetooth 时,可以通过该指令通知控制器它支持 BLE 功能。
  • 蓝牙堆栈初始化流程中,某些芯片厂商可能要求 Host 显式调用该命令,否则控制器不会开启 LE 支持。

4. 与其他指令的关系

  • HCI_Read_Local_Supported_Features:用于读取 Controller 当前支持的 Feature。

  • HCI_Read_LE_Host_Support:读取当前主机是否启用了 LE 支持。

  • HCI_Write_LE_Host_Support:用于设置是否启用主机对 LE 的支持(本文所述)。

  • HCI_Write_LE_Host_Support 的设置只影响 Controller 的 LMP features 表现,不直接影响 Host 逻辑。


5. aosp示例

如果你正在调试蓝牙协议栈初始化流程,这条指令通常会在堆栈初始化阶段调用,比如 Android 蓝牙堆栈中设置主机 LE 支持标志,以确保后续 LE 操作生效。是否调用成功可通过 HCI_Command_Complete 事件回调判断。

  static constexpr uint64_t kDefaultEventMask = 0x3dbfffffffffffff;static constexpr uint64_t kDefaultLeEventMask = 0x000000004d02fe7f;// system/gd/hci/controller.ccstruct Controller::impl {void Start(hci::HciLayer* hci) {
...le_set_event_mask(kDefaultLeEventMask);set_event_mask(kDefaultEventMask);write_le_host_support(Enable::ENABLED, Enable::DISABLED);...
}/*
enable:表示是否启用 LE Supported Host 功能(主机是否支持 BLE)。deprecated_host_bit:表示是否启用一个已废弃的功能位 Simultaneous LE and BR/EDR Host support。*/void write_le_host_support(Enable enable, Enable deprecated_host_bit) {if (deprecated_host_bit == Enable::ENABLED) {// 如果设置了 deprecated_host_bit, 打印一个警告// Since Bluetooth Core Spec 4.1, this bit should be 0LOG_WARN("Setting deprecated Simultaneous LE BR/EDR Host bit");}std::unique_ptr<WriteLeHostSupportBuilder> packet = WriteLeHostSupportBuilder::Create(enable, deprecated_host_bit);hci_->EnqueueCommand(std::move(packet),module_.GetHandler()->BindOnceOn(this, &Controller::impl::check_status<WriteLeHostSupportCompleteView>));}
  • 在初始化 Controller 模块时, 在 Controller::impl::Start 函数中就会调用 write_le_host_support 函数去设置

1. deprecated_host_bit 是什么?

deprecated_host_bitHCI_Write_LE_Host_Support 命令中的第二个参数,对应协议定义中的:

Simultaneous LE and BR/EDR to Same Device Capable (Host)

这个位早期用于标识主机是否支持同时对同一个设备进行 BLE 和传统蓝牙的连接。
但是:

  • 从 Bluetooth Core Spec 4.1 起,这个位就被弃用了。
  • 控制器在处理这个位时会 忽略它的值
  • 现在大多数 Host 都设置为 0x00(即 DISABLED)。

相关文章:

  • JVM如何处理多线程内存抢占问题
  • 王者荣耀游戏测试场景题
  • 上位机知识篇---流式Web服务器模式的实现
  • 为什么需要加密机服务?
  • 大模型deepseek如何助力数据安全管理
  • 使用国内源加速Qt在线安装
  • C++笔试题(金山科技新未来训练营):
  • 基于CNN的猫狗识别(自定义CNN模型)
  • SpringBoot快速上手
  • Spring AI 从入门到精通
  • 07、基础入门-SpringBoot-自动配置特性
  • Python Logging 模块完全指南
  • 基于OpenCV的实时文档扫描与矫正技术
  • mvc-ioc实现
  • NB-IoT技术深度解析:部署模式与节能机制全指南
  • 计算机系统的层次结构
  • 算法刷题Day9 5.18:leetcode定长滑动窗口3道题,结束定长滑动窗口,用时1h
  • 【android bluetooth 协议分析 01】【HCI 层介绍 5】【SetEventMask命令介绍】
  • 2025年- H29-Lc137- 19.删除链表的倒数第N个节点(快慢指针)---java版
  • STC89C52单片机模拟洗衣机源代码程序 C语言程序 按键设置洗衣模式和洗衣时间 洗衣完成后语音报警提示
  • 国际博物馆日|航海博物馆:穿梭于海洋神话与造船工艺间
  • 广州医药集团有限公司原党委书记、董事长李楚源被“双开”
  • 俄乌直接谈判结束
  • 曾犯强奸罪教师出狱后办教培机构?柳州鱼峰区教育局回应
  • 外企聊营商|威能集团:公平环境增“暖”意
  • 中央宣传部、全国妇联联合发布2025年“最美家庭”