基于 USB 的 HID 设备的选择性挂起
通用串行总线规范的修订版 2.0 指定了 USB 选择性挂起功能。 通过使用此功能,Windows 操作系统可以有选择地挂起空闲的 USB 设备。 这允许 Windows 有效地管理整个系统的电源要求。 有关 Windows 如何支持 USB 选择性挂起功能的详细信息,请参阅 USB 选择性挂起。 (此资源可能在某些语言和国家/地区不可用。)
默认情况下,WINDOWS 禁用 USB 选择性挂起,以提供一致的用户体验,并避免选择性挂起造成的恢复延迟。
支持选择性挂起的 HID 设备必须设计为:
- 从选择性挂起恢复时,保留第一次输入、触摸、移动或按键。
- 从移动时选择性挂起唤醒。
- 维护无线链接 ((如果适用)) 。
- 保持任何活动状态 LED(例如 NUM 锁定或 CAPS 锁定)的电源。
- 从选择性挂起恢复,用户不会有任何感知延迟。
Windows 8支持两种方法,用于为 HID USB 设备启用选择性挂起。 这些限制如下:
- Microsoft OS 描述符 [PREFERRED]:Microsoft OS 描述符的扩展属性描述符可用于编写必要的注册表项 () ,以支持 USB HID 选择性挂起。
- 供应商提供的 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"
其中:
INF 版本部分应设置 CLASSGUID 和 DriverVer 指令,如下所示:
CLASSGUID 指令必须为 HID 设备指定 Microsoft 类 GUID。 此 GUID 的值为 {745a17a0-74d3-11d0-b6fe-00a0c90f57da}。
DriverVer 指令的值的日期和版本号必须大于 Input.inf 中 DriverVer 指令指定的值。
VendorXYZDevice* 部分指定供应商 HID 设备的硬件标识符 (ID) 。 硬件 ID 由供应商标识符 (VID) 和产品标识符 (PID) 组成。 设备的每个硬件 ID 都必须具有供应商和设备唯一的 VID/PID 值。 这可确保相同的硬件 ID 不对应于多个名称和设置
VendorXYZDevice_Install.NT 和 VendorXYZDevice_Install.NT.HW 部分是 INF DDInstall 部分。 在此示例中,这些部分包含 INF Include 和 Needs 指令。
Include 指令引用系统提供的 Input.inf 文件,该文件包含为供应商的 HID 设备启用 USB 选择性挂起功能所需的 INF 部分。
Needs 指令指示在设备安装期间应处理 Input.inf 中的哪些部分。 在这种情况下,选择“HID_SelSus_Inst”部分,而不是不支持选择性挂起的默认HID_Inst部分。
VendorXYZDevice_Install.NT.Services 部分是 INF DDInstall.HW 部分。 在此示例中, 节还包含 INF Include 和 Needs 指令的相同值。