基于 USB 的 HID 设备的选择性挂起

通用串行总线规范的修订版 2.0 指定了 USB 选择性挂起功能。 通过使用此功能,Windows 操作系统可以有选择地挂起空闲的 USB 设备。 这允许 Windows 有效地管理整个系统的电源要求。 有关 Windows 如何支持 USB 选择性挂起功能的详细信息,请参阅 USB 选择性挂起。 (此资源可能在某些语言和国家/地区不可用。)

默认情况下,WINDOWS 禁用 USB 选择性挂起,以提供一致的用户体验,并避免选择性挂起造成的恢复延迟。

支持选择性挂起的 HID 设备必须设计为:

  • 从选择性挂起恢复时,保留第一次输入、触摸、移动或按键。
  • 从移动时选择性挂起唤醒。
  • 维护无线链接 ((如果适用)) 。
  • 保持任何活动状态 LED(例如 NUM 锁定或 CAPS 锁定)的电源。
  • 从选择性挂起恢复,用户不会有任何感知延迟。

Windows 8支持两种方法,用于为 HID USB 设备启用选择性挂起。 这些限制如下:

  1. Microsoft OS 描述符 [PREFERRED]:Microsoft OS 描述符的扩展属性描述符可用于编写必要的注册表项 () ,以支持 USB HID 选择性挂起。
  2. 供应商提供的 INF:硬件制造商可以提供与 HID 开发节点的 USB 硬件 ID 上匹配的 INF 文件 (,) 安装相应的注册表项。

Microsoft 建议硬件供应商和电脑制造商使用第一个选项来启用 USB HID 选择性挂起。 此选项的优点是:

  • 硬件供应商和电脑制造商不必安装其他 INF 文件。
  • 新的Windows 8安装上会自动填充必要的注册表设置。
  • 在升级到 Windows 8 时,会保留必要的注册表设置。
  • 用户不能通过卸载 INF 丢失 (或禁用) 选择性挂起功能。

但是,希望仍使用 INF 方法的硬件供应商和电脑制造商可以使用以下示例。 下面是一个示例 INF 文件,演示如何在 Windows 中为 HID 设备启用此 USB 功能:

; Vendor INF File for USB HID devices
;
; A sample INF for a stand-alone USB HID device that supports
; selective suspend

[Version]
Signature   ="$WINDOWS NT$"
Class       =HIDClass
ClassGuid   ={745a17a0-74d3-11d0-b6fe-00a0c90f57da}
Provider    =%VendorName%
DriverVer   =09/19/2008,6.0.0.0
CatalogFile =VendorXYZ.cat
PnpLockdown =1

; ================= Class section =====================
[ControlFlags]
ExcludeFromSelect=*

[SourceDisksNames]
1 = %DiskName%,,,""

;*****************************************
; Install Section
;*****************************************

[Manufacturer]
%VendorName% = VendorXYZDevice,NTx86,NTamd64,NTarm

[VendorXYZDevice.NTx86]
%VendorXYZ.DeviceDesc% = VendorXYZDevice_Install, USB\VID_045E&PID_00B4

[VendorXYZDevice.NTamd64]
%VendorXYZ.DeviceDesc% = VendorXYZDevice_Install, USB\VID_045E&PID_00B4

[VendorXYZDevice.NTarm]
%VendorXYZ.DeviceDesc% = VendorXYZDevice_Install, USB\VID_045E&PID_00B4


[VendorXYZDevice_Install.NT]
include     = input.inf
needs       = HID_SelSus_Inst.NT

[VendorXYZDevice_Install.NT.HW]
include     = input.inf
needs       = HID_SelSus_Inst.NT.HW

[VendorXYZDevice_Install.NT.Services]
include     = input.inf
needs       = HID_SelSus_Inst.NT.Services

[Strings]
VendorName = "Vendor XYZ"
DiskName   = "Vendor XYZ Installation Disk"
VendorXYZ.DeviceDesc = "VendorXYZ Device"

其中:

  1. INF 版本部分应设置 CLASSGUIDDriverVer 指令,如下所示:

    • CLASSGUID 指令必须为 HID 设备指定 Microsoft 类 GUID。 此 GUID 的值为 {745a17a0-74d3-11d0-b6fe-00a0c90f57da}。

    • DriverVer 指令的值的日期和版本号必须大于 Input.inf 中 DriverVer 指令指定的值。

  2. VendorXYZDevice* 部分指定供应商 HID 设备的硬件标识符 (ID) 。 硬件 ID 由供应商标识符 (VID) 和产品标识符 (PID) 组成。 设备的每个硬件 ID 都必须具有供应商和设备唯一的 VID/PID 值。 这可确保相同的硬件 ID 不对应于多个名称和设置

  3. VendorXYZDevice_Install.NT 和 VendorXYZDevice_Install.NT.HW 部分是 INF DDInstall 部分。 在此示例中,这些部分包含 INF IncludeNeeds 指令。

    Include 指令引用系统提供的 Input.inf 文件,该文件包含为供应商的 HID 设备启用 USB 选择性挂起功能所需的 INF 部分。

    Needs 指令指示在设备安装期间应处理 Input.inf 中的哪些部分。 在这种情况下,选择“HID_SelSus_Inst”部分,而不是不支持选择性挂起的默认HID_Inst部分。

  4. VendorXYZDevice_Install.NT.Services 部分是 INF DDInstall.HW 部分。 在此示例中, 节还包含 INF IncludeNeeds 指令的相同值。