Выборочная приостановка для HID на USB-устройствах

Версия 2.0 спецификации универсальной последовательной шины указывает функцию выборочной приостановки USB. С помощью этой функции операционная система Windows может выборочно приостановить простающие USB-устройства. Это позволяет Windows эффективно управлять требованиями к энергопотреблению общей системы. Дополнительные сведения о том, как Windows поддерживает функцию выборочной приостановки USB, см. в статье о выборочной приостановке USB. (Этот ресурс может быть недоступен на некоторых языках и странах.)

По умолчанию функция USB-выборочной приостановки отключена в Windows, чтобы обеспечить стабильную работу пользовательского интерфейса и избежать задержек при возобновлении работы после выборочной приостановки.

Устройство HID, поддерживающее выборочную приостановку, должно быть разработано следующим образом:

  • Удерживайте первое касание, перемещение или нажатие клавиши при выходе из режима выборочной приостановки.
  • Пробуждение от выборочной приостановки движения.
  • Сохраните беспроводной канал (если применимо).
  • Сохраняйте питание для любых активных индикаторов состояния, таких как Num Lock или Caps Lock.
  • Возобновление выборочной приостановки без какой-либо предполагаемой задержки пользователем.

Windows 8 поддерживает два метода включения выборочной приостановки для USB-устройств HID. Они приведены следующим образом:

  1. Дескриптор Microsoft OS [ПРЕДПОЧТИТЕЛЬНО]: дескриптор расширенных свойств Microsoft OS можно использовать для записи необходимых ключей реестра для поддержки выборочного отключения USB HID.
  2. Поставщик предоставляет INF: Изготовитель оборудования может предоставить INF-файл (который соответствует USB-идентификатору оборудования для devnode HID) для установки соответствующих ключей реестра.

Корпорация Майкрософт рекомендует, чтобы поставщики оборудования и производители ПК использовали первый вариант для включения выборочной приостановки USB HID. Преимущества этого варианта:

  • Поставщики оборудования и производители пк не должны устанавливать дополнительный INF-файл.
  • Необходимый параметр реестра автоматически заполняется в новых установках Windows 8.
  • Необходимый параметр реестра сохраняется при обновлении до Windows 8.
  • Пользователь не может потерять (или отключить) функцию выборочной приостановки путем удаления INF.

Однако поставщики оборудования и производители ПК, которые по-прежнему хотят использовать подход INF, могут использовать приведенный ниже пример. Ниже приведен пример INF-файла, в который показано, как включить эту функцию USB для устройств HID в Windows:

; 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 Version должны быть заданы директивы CLASSGUID и DriverVer следующим образом:

    • Директива CLASSGUID должна указать GUID класса Майкрософт для устройств HID. Этот GUID имеет значение {745a17a0-74d3-11d0-b6fe-00a0c90f57da}.

    • Директива DriverVer должна иметь значение, которое имеет более новую дату и больше номера версии, чем значение, указанное директивой DriverVer в Input.inf.

  2. В разделах VendorXYZDevice* укажите идентификатор оборудования (ID) для устройства HID поставщика. Идентификатор оборудования состоит из идентификатора поставщика (VID) и идентификатора продукта (PID). Каждый идентификатор оборудования для устройства должен иметь значения VID/PID, уникальные для поставщика и устройства. Это гарантирует, что один и тот же идентификатор оборудования не соответствует нескольким именам и параметрам

  3. Разделы VendorXYZDevice_Install.NT и VendorXYZDevice_Install.NT.HW — это разделы INF DDInstall. В этом примере эти разделы содержат директивы INF Include и Needs .

    Директивы Include ссылаются на предоставленный системой файл Input.inf, содержащий разделы INF, необходимые для включения функции выборочной приостановки USB для устройства HID поставщика.

    Директивы Needs указывают, какие разделы из Input.inf должны обрабатываться во время установки устройства. В этом случае выбран раздел HID_SelSus_Inst вместо раздела HID_Inst по умолчанию, который не поддерживает выборочную приостановку.

  4. Раздел VendorXYZDevice_Install.NT.Services — это раздел INF DDInstall.HW. В этом примере раздел также содержит те же значения для директив INF Include и Needs .