以下是驱动程序开发人员在开发总线驱动程序以支持蓝牙功能时可能会遇到的一些常见问题和方案。
我的串行总线驱动程序遇到了一些错误。 它意味着什么?
代码 10-49:设备管理器生成的错误代码。
代码 51:当串行总线驱动程序具有相关的控制器驱动程序(如 ACPI 表中定义)时,系统将加载串行总线驱动程序,但直到该驱动程序的所有相关驱动程序均已成功启动后,才会开始执行此操作。 当控制器驱动程序不存在或未成功加载时,将触发代码 51 错误。
代码 52 = 未签名的驱动程序。
为什么我的串行总线驱动程序没有从蓝牙核心堆栈获取任何 IOCTL?
串行总线驱动程序可能已启用空闲功能,但未实现本节及其子主题中讨论的电源控制处理机制。 在这种情况下,蓝牙 HID 设备(鼠标或键盘)将无法唤醒堆栈(从 D2 到 D0)。 建议在实现基本蓝牙功能和电源控制处理机制之前关闭此空闲功能。
是否有蓝牙 Windows 徽标测试?
Windows HCK(硬件认证工具包)包含一组特定于蓝牙的测试,必须通过这些测试才能获得认证。 蓝牙驱动程序开发人员应在开发期间运行这些测试,以确保其驱动程序通过这些测试,从而获得认证并获取适当的支持。
是否应在不同的电源状态转换之间保留和还原 UART 设置?
由于蓝牙传输驱动程序知道且可控制远程 UART 控制器的设置(包括开机后的设置),因此蓝牙传输驱动程序应在进入可能丢失电源的状态之前重置远程和本地 UART 控制器。 因此,恢复电源后,远程 UART(蓝牙端)和本地 UART(主机端)控制器上的设置可以保持同步。UART 驱动程序仅控制本地 UART 控制器,并负责在关闭电源之前还原到其设置。 蓝牙传输驱动程序还可以在进入某种 Dx 状态时查询 UART 驱动程序的电源设置(因为 UART 驱动程序最初使用 ACPI 表设置这些设置),缓存并设置它们。
如果总线驱动程序在堆栈进入 D2 的过程中收到唤醒通知,会发生什么情况?
在这种情况下,总线驱动程序应完成 D2 转换,然后继续执行唤醒机制。 串行总线驱动程序应执行此同步(例如,只有在完成 D2 转换后,它才会对唤醒请求进行排队并启动唤醒过程)。
总线驱动程序应如何确定其 ACPI 资源的多个实例(例如多个 GPIO)?
无法标记资源、GPIO 或其他。 正因如此,资源顺序很重要。 设备驱动程序应建立一个约定(例如,最先显示在列表中的 GPIO 资源用于 BT_WAKE,其次显示的资源用于 HOST_WAKE)。