WinUSB 电源管理

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

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

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

系统唤醒

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

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

注意

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

选择性暂停

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

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

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

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

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

HKR,,DeviceIdleEnabled,0x00010001,1
DeviceIdleIgnoreWakeEnable 设置为非零值时,即使设备不支持 RemoteWake,也会暂停设备。
UserSetDeviceIdleEnabled 此值是 DWORD 值。 此注册表值指示是否应在“设备 属性” 页中启用复选框,允许用户替代空闲默认值。 当用户SetDeviceIdleEnabled 设置为非零值时,将启用复选框,并且用户可以在空闲时禁用关闭设备电源。 值为零或缺少此值表示未启用该复选框。
  • 如果用户禁用设备电源节省,则忽略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 终结点队列不受电源管理。 读取请求在提交设备时唤醒设备。 但是,当读取请求等待时,设备可能会处于空闲状态。