windows蓝牙驱动开发-蓝牙传输总线驱动程序

IHV 需要实现传输总线驱动程序,以支持通常集成到芯片系统 (SoC) 系统中的多功能控制器蓝牙功能。蓝牙串行 HCI 总线驱动程序示例可以帮助 IHV 加快其传输总线驱动程序的开发。 此示例演示了如何处理来自其上层的 IOCTL (IO Control) 请求,以及如何将 HCI 数据包传递到其下层的串行控制器驱动程序。 但是,除使用自己的 IO 传输(WDK 示例中为 UART)以外的带外控件通常用于支持空闲和唤醒控件;这种机制是必需的,用于优化能耗。 本节及其子主题中的信息提供用于处理电源控件的准则和示例代码,来补充总线示例驱动程序。

本文中的信息适用于:Windows 8.1

作为短程无线无线电,蓝牙通常是在芯片系统 (SoC) 系统上集成的多功能控制器中的一种功能。 早期版本的 Windows(最高为 Windows 7)提供了一个蓝牙内置类驱动程序,用于将 USB 用作唯一传输选项。 Windows 8 引入了蓝牙可扩展传输 IOCTL。 Windows 8.1 将继续支持 USB 传输和可扩展传输模型。 可扩展性模型 DDI 在 Windows 中保持不变,使系统集成商能够灵活地为 SoC 平台选择合适的传输,例如 UART(通用异步接收器/发送器)。 此外,更简单和低功率控制器(例如 GPIO)可用作处理电源控制的“边带”机制(例如启用蓝牙无线电和睡眠/唤醒信号)。

本节及其子主题中的信息提供了此类总线驱动程序的电源控制处理指南和示例代码,并说明了与蓝牙核心驱动程序的交互。 这些控件包括:空闲功能、唤醒的布防和撤防、空闲和唤醒信号,以及设备电源状态更改。 驱动程序开发人员可以采用蓝牙串行 HCI 总线驱动程序示例来简化开发工作,以支持基于备用(非 USB)传输的蓝牙。

尽管使用不同的传输来支持蓝牙,但蓝牙 DDI 对于蓝牙配置文件驱动程序保持不变。 这意味着,蓝牙配置文件驱动程序和应用程序仍然与正在实现的传输或电源控制处理无关。

示例系统的下图描绘了使用 UART 作为传输方式支持多功能控制器的驱动程序堆栈。

用于支持蓝牙函数的设备堆栈由两个层组成:

  • 用于支持多功能外围设备(或图中所谓的“组合”芯片,以支持蓝牙和 FM)的串行总线驱动程序层。
  • 蓝牙核心驱动程序层,该层基于串行总线驱动程序创建的子 PDO 加载以支持蓝牙函数。

下表汇总了蓝牙核心驱动程序支持的设备和系统电源状态。 下面使用“睡眠”状态来描述一种功耗非常低的状态,在这种状态下,蓝牙无线电的内部设置和配置是持久性的。 

需要通过蓝牙核心驱动程序重新初始化,因为蓝牙芯片已断电。

SoC 系统支持的系统状态指南:

  • 所有 SoC 都需要 S0(开)和 S5(关闭)支持
  • 基于 x86 的 SoC 需要 S4(休眠)
  • 支持连接待机的系统不支持 S3
活动 (S0/D0)

这是客户端应用程序主动使用蓝牙功能时的状态。

低占空比/睡眠 (S0/D2)

这是系统处于有效运行(在 S0 中)但驱动程序处于 D2 状态的最常见状态 - 控制器被限制为低功耗状态。 在此状态下,控制器可以快速恢复到活动状态 (D0),而不会影响最终用户体验。

可以使用蓝牙键盘来演示此状态的示例。 如果在几秒钟内未按下任何键,则蓝牙核心层会限制为 D2 以通知并允许控制器进入空闲状态,同时在嗅探模式下保持连接以减少能耗。 按下某个键后,无线电将收到唤醒通知,并触发唤醒事件,使蓝牙核心驱动程序恢复为 D0,然后读取传入数据。

另一个示例是处于没有任何关联的初始状态 - 蓝牙核心堆栈可以进入 D2 以通知并允许蓝牙无线电限制为睡眠状态。 当用户打算与远程蓝牙设备关联时,无线电的能耗得到优化,而持久性非易失性设置可以快速恢复。

处于此状态的常见和关键场景:

  1. 没有任何关联(即没有与蓝牙设备配对)
  2. 有关联,已连接,但处于空闲状态
  3. 有关联但已断开连接

此状态也会成为 AOAC(始终打开且始终连接)系统中的主要状态。

系统在运行,但设备已关闭 (S0/D3)

目前,仅在无线电处于“关闭”模式时,无线电管理才支持此状态。 该状态将产生更长的延迟,以便将蓝牙控制器恢复到其活动状态,在此状态下,进程包括但不限于设备级别的初始化和配置,以及蓝牙核心驱动程序的主机和设备初始化。

系统可远程唤醒 (Sx/D2)

Windows 8.1 对此 Sx 的支持保持不变,此特定状态用于启用从 HID 设备唤醒系统。 处于 D2 状态时,蓝牙芯片仍有电,因此其内部易失性设置和配置保持永久。 此功能是可选的。

系统关闭 (Sx/D3)

系统已关闭,假定蓝牙无线电处于关闭状态或处于低功耗状态。 在某些 Sx 状态(除了关闭)下,驱动程序堆栈仍在内存中(即仍保持加载)。

​无线电管理

今后,无线电管理 (RM) 将符合蓝牙 4.0 无线电标准。 蓝牙堆栈将发送一个 HCI_RESET 命令,无线电预计会通过将无线电置于无传输模式并将设备置于 D3 电源状态来响应该命令。 然后,该堆栈将意外移除所有子 devnode,并有效地将无线电置于“飞行”模式。 串行总线驱动程序将在无线电处于关闭状态时保持加载状态,因此它可以从堆栈接收重新开启无线电的请求。 内置堆栈将处理 devnode 的重新枚举。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值