WinUSB 电源管理

WinUSB 使用 KMDF 状态机进行电源管理。 电源策略通过调用 WinUsb_SetPowerPolicy进行管理。

若要修改 WinUSB 的电源行为,可以在设备的 INF 中修改默认注册表设置。 必须通过在 HW 中添加值,将这些值写入注册表中的设备特定位置 INF 的 AddReg 部分。

可以在设备的 INF 中指定以下列表中所述的注册表值,以修改电源行为。

系统唤醒

此功能由 SystemWakeEnabled DWORD 注册表设置控制。 此值指示是否应允许设备将系统从低功耗状态唤醒。

HKR,,SystemWakeEnabled,0x00010001,1
  • 如果值为零,或者没有此值,则表示不允许设备唤醒系统。
  • 若要允许设备唤醒系统,请将 SystemWakeEnabled 设置为非零值。 设备“属性”页中的检查框会自动启用,以便用户可以替代设置。

注意

更改 SystemWakeEnabled 设置对选择性挂起没有影响,此注册表值仅适用于系统挂起。

选择性挂起

选择性挂起可由多个系统或 WinUSB 设置中的任何一个禁用。 单个设置无法强制 WinUSB 启用选择性挂起。

WinUsb_SetPowerPolicyPolicyType 参数中指定的以下电源策略设置会影响选择性挂起的行为:

  • AUTO_SUSPEND 设置为零时,它不会将设备设置为选择性挂起模式。
  • SUSPEND_DELAY 设置设备变为空闲到 WinUSB 请求设备进入选择性挂起之间的时间。

下表显示了注册表项如何影响选择性挂起功能。

注册表项 说明
DeviceIdleEnabled 这是一个 DWORD 值。 此注册表值指示设备是否能够在空闲 (选择性挂起) 关闭。
  • 值为零或缺少此值表示设备不支持在空闲时关闭电源。
  • 非零值表示设备支持在空闲时关闭电源。
  • 如果未设置 DeviceIdleEnabled,则会忽略AUTO_SUSPEND电源策略设置的值。

HKR,,DeviceIdleEnabled,0x00010001,1
DeviceIdleIgnoreWakeEnable 设置为非零值时,即使设备不支持 RemoteWake,也会暂停设备。
UserSetDeviceIdleEnabled 此值是 DWORD 值。 此注册表值指示是否应在设备“属性”页中启用检查框,以允许用户替代空闲默认值。 将 UserSetDeviceIdleEnabled 设置为非零值时,检查框处于启用状态,用户可以在空闲时禁用设备电源。 值为零或缺少此值表示未启用检查框。
  • 如果用户禁用设备节电,则会忽略AUTO_SUSPEND电源策略设置的值。
  • 如果用户启用设备节能,则使用 AUTO_SUSPEND 的值确定是否在空闲时暂停设备。

如果未设置 DeviceIdleEnabled,则忽略 UserSetDeviceIdleEnabled。

HKR,,UserSetDeviceIdleEnabled,0x00010001,1
DefaultIdleState 这是一个 DWORD 值。 此注册表值设置AUTO_SUSPEND电源策略设置的默认值。 此注册表项用于在句柄未向设备打开时启用或禁用选择性挂起。
  • 如果值为零或缺少此值,则表示默认情况下,设备在空闲时不会挂起。 仅当启用AUTO_SUSPEND电源策略时,才允许设备在空闲时暂停。
  • 非零值表示默认情况下,设备可以在空闲时挂起。

如果未设置 DeviceIdleEnabled ,则忽略此值。

HKR,,DefaultIdleState,0x00010001,1
DefaultIdleTimeout 这是一个 DWORD 值。 此注册表值设置SUSPEND_DELAY电源策略设置的默认状态。

该值指示在确定设备处于空闲状态之前等待的时间(以毫秒为单位)。

HKR,,DefaultIdleTimeout,0x00010001,100

检测空闲

所有写入和控制传输都会强制设备进入 D0 电源状态并重置空闲计时器。 IN 终结点队列不受电源管理。 读取请求在提交后唤醒设备。 但是,当读取请求等待时,设备可能会变为空闲状态。