唤醒实现指南

简介

触摸唤醒是 Windows 11 设备附带的一项新的可选功能。 此功能允许用户用手指触摸设备的屏幕以将其从睡眠中唤醒。 不支持使用笔来唤醒屏幕。 触摸唤醒功能仅适用于根据以下指导明确选择启用该功能的设备。

如果设备已选择启用触摸唤醒,则 OEM 可以指定默认状态(已启用/已禁用 - 请参阅以下“OEM 注意事项”部分中的详细信息)。 用户还可以根据自己的偏好,在新的“蓝牙和设备”-“触摸”设置页中打开或关闭“触摸屏幕以唤醒”选项,如下图所示。>

Wake on Touch settings page

注意

如果设备不支持此功能,则该设置不会显示在此页上。

本文档介绍与 Windows 兼容的基于 HID 的触控设备如何支持触摸唤醒,以及 OEM/ODM 和触控设备 IHV 需要根据使用的是适用于 USB、I2C 或 SPI 的自带 HID 微型端口驱动程序,还是专用于缺少自带驱动程序的总线(例如 Intel THC SPI)的 3P 微型端口,采取哪些措施。

OEM 注意事项

OEM 必须考虑是否为每种设计和 SKU 实现触摸唤醒,因为该功能的功耗弊端非常明显。 在键盘上按键、与触摸板交互或在已配对的笔上单击蓝牙按钮,都是以较低功耗唤醒设备的方法。

唤醒手势

启用触摸唤醒时,OEM 可将唤醒手势指定为适合其触控设备 IHV 的单击或双击手势。 无论选择哪种手势,都应该可以在显示器活动区域的任何位置使用该手势唤醒设备。 一旦触摸控制器检测到基于单击或双击手势的唤醒:

  1. 不管使用哪种手势唤醒,触摸控制器都需要发送代表单指向下和向上的 2 个帧(X、Y、TIP SET,后接 X、Y、TIP CLEAR)
  2. 主机只会使用这 2 个帧来指示用户打开了显示器等事件,而不会将该输入传递给 shell 或应用程序
  3. 向上和向下帧都可以立即发送,但如果存在扫描时间用法,则应在帧之间递增该用法

注意

如果触摸控制器检测到唤醒手势并断言一个中断来向主机指示输入报告已准备就绪,但主机实际上不会发出读取指令,则触摸控制器应在供应商定义的某个超时后还原为低功耗状态。 这被视为一种异常情况,但触控设备 IHV 可能需要最大程度地降低待机状态下的不必要功耗。

设备姿势

若要使用该功能,应考虑不同的姿势、设备类型和电源状态,以最大程度地优化电池寿命和提供可靠的用户体验。 例如,变形本设备可能只希望在处于“平板电脑”状态时才启用触摸唤醒,而在处于“笔记本电脑”状态时禁用该功能以节省电池电量。

无论设备处于待机状态还是处于特定的姿势,使用触摸唤醒都需要不同的实现方法。

对于有盖系统(例如笔记本电脑外形规格的设备),在合盖时,HID 堆栈将自动禁用触摸唤醒。 如果你的设备采用这种外形规格,或者无论设备处于哪种姿势都需要启用触控唤醒,请跳过本部分中的余下内容,并遵循本文档其他部分中的指导。

如果只希望在处于某些姿势时启用触摸唤醒,建议实现一个筛选器驱动程序,用于控制触摸控制器是否根据设备姿势准备好唤醒。 在此类实现中,该筛选器驱动程序将确定是否让 IRP 流向 ACPI 以将设备置于 D2 状态(准备好唤醒),或者是否将设备置于 D3 冷状态(关闭)。

如果设备设计不允许 ACPI 在不希望基于姿势进行触摸唤醒的情况下从触摸控制器取电(D3 冷状态),则应实现特定于供应商的机制,以允许触摸控制器保持通电(D3 热状态),同时告知它需要进入最低功耗状态,进行内部选通,并且不扫描任何触摸手势。 此特定于供应商的机制使触摸控制器能够区分正在扫描用户输入状态和非睡眠/准备好唤醒状态,如下图所示。

Wake on Touch power transitions

注意

此图适用于 HIDI2C。 有关电源转换(包括 HIDUSB 和 HIDSPI)的详细信息,请参阅触摸屏电源管理

最后,如果希望设备根据姿势发生不同的触摸唤醒行为,建议在发生姿势变化时唤醒设备。 姿势变化是用户输入的明确指示,它还确保在设备采取新的姿势时触摸控制器正确进行准备/取消准备。

触摸唤醒用户设置的默认状态

对于支持触摸唤醒的系统,触摸唤醒设置默认为“打开”,但 OEM 可以添加一个注册表值将默认设置指定为“关闭”。 更改应该应用于默认用户,并且设备上的每个新用户都将选择该更改。 在用户更改设置后,无论初始 OEM 默认设置是什么,他们的首选项始终优先。

为此,请创建以下注册表项并将其存储在默认用户的 NTUSER.DAT 中:

注册表位置:\HKEY_CURRENT_USER\Software\Microsoft\Input\WakeableInputTypes

注册表项:

名称 类型
触控 REG_DWORD 0 = 已禁用,1 = 已启用

启用触摸唤醒的要求

一般要求

一般建议设备指示是否支持从 D2 状态唤醒,这样,当操作系统 (OS) 需要在设备上准备触摸唤醒时,可将其置于 D2 状态。 如果操作系统不需要在设备上准备触摸唤醒,则会将设备置于 D3 状态。 这样,设备便可以转换为 D3Cold 状态,以节省更多电量。 可以遵循以下 ACPI 部分中提供的 _S0W 相关指导来实现此目的。 设备启动的电源优化(不是由主机或操作系统启动)应以对操作系统透明的方式进行。

请注意,当操作系统(或主机)将设备置于启用“触摸唤醒”的状态时(如本文档中所述),触摸控制器负责将自身配置为根据 OEM 要求和/或设备的外形规格,在收到相应的触摸手势后唤醒。 例如,其触摸屏未被盖子遮挡的设备可能需要确保它不会导致虚假唤醒。

如果 HID 触摸设备具有任何其他顶级 HID 集合(如供应商定义的集合),OEM 软件可能会打开文件句柄来执行设备 I/O,只要 OEM 软件完成这些设备 I/O,关闭文件句柄就会减少 HID 设备的能耗。 请注意,Windows 11 22H2 已更新为通过关闭电源来更高效地管理触控唤醒设备的电源状态,而无需允许从新式待机状态唤醒(只要不需要触控唤醒),例如,当“触摸屏幕以唤醒”设置已关闭或笔记本电脑盖子合上时。 对于此类 OEM 软件,副作用是,在现代待机期间,此类顶级 HID 集合的输入也会被禁止。

ACPI 固件要求

如果在 ACPI 中定义了触摸控制器设备,该设备必须实现以下方法来报告其唤醒功能和资源。

  1. _S0W 方法,用于返回设备在可以发出唤醒信号时所处的最低设备功耗状态。
  2. _CRS 方法,用于定义支持唤醒的中断。
  3. _PRx 方法,用于定义与支持的每种 D 状态关联的电源资源。

有关详细信息,请参阅支持唤醒的中断 (_CRS) 文档

启用触摸唤醒的驱动程序要求

有关如何为自带驱动程序(HIDI2C、HIDSPI 和 HIDUSB)或自定义驱动程序实现触摸唤醒的详细信息,请参阅以下相关文档:

主题 说明

使用自带驱动程序启用触摸唤醒

此主题介绍如何使用自带的 HIDI2C、HIDSPI 或 HIDUSB 驱动程序实现触摸唤醒。

使用自定义 HID 微型驱动程序启用触摸唤醒

此主题介绍如何使用自定义 HID 微型驱动程序实现触摸唤醒。

词汇表

术语/缩写 定义
HID 人机接口设备。
HIDClass 适用于 HID 的 Windows 自带类驱动程序。
HID 微型驱动程序 绑定到 HIDClass 并与之配合工作的 Windows HID 传输驱动程序。 有关详细信息,请参阅微型驱动程序和 HID 类驱动程序文档。
D 状态、D0、D2、D3Hot、D3Cold ACPI 规范定义的设备电源状态。
Dx D 状态之一。 本文档未指定实际的“x”编号。
DeviceNotInUse 当操作系统转换为某种不使用(触摸)输入的状态时发生的状况。 例如,笔记本电脑合盖状态。
DeviceInUse 与 DeviceNotInUse 相反,表示操作系统转换为某种可以使用(触摸)输入的状态时发生的状况。 例如,笔记本电脑开盖状态。
监视器、屏幕和显示器 这些术语有时会互换使用。
MonitorOn 当操作系统打开主监视器时发生的状况。
MonitorOff 与 MonitorOn 相反。 当操作系统关闭主监视器时发生的状况。
IRP I/O 请求数据包。 有关详细信息,请参阅 I/O 请求数据包文档。
D-IRP 请求设置设备电源状态的 IRP。
HIDI2C Windows 自带 HID 微型驱动程序 HIDI2C.SYS,它根据 HIDI2C 规范实现 HID 设备的 I2C 传输层。
HIDSPI Windows 自带 HID 微型驱动程序 HIDSPI.SYS,它根据 HIDSPI 规范实现 HID 设备的 SPI 传输层。
HIDUSB Windows 自带 HID 微型驱动程序 HIDUSB.SYS,它根据 HID 和 USB 规范实现 HID 设备的 USB 传输层。
ACPI 固件 在系统固件 (BIOS) 中实现的 ACPI 代码。
扩展 INF Windows 10 中的一种新型 Windows INF 文件。 有关详细信息,请参阅使用扩展 INF 文件文档。