HID USB peripherals

This topic describes the three power states that are required for internal and external HID USB devices.

HID USB Peripheral Power States

HID USB Peripheral Power States

StateMandatory /OptionalDescriptionPower Consumption (Recommendation)
ACTIVEMandatoryThe fully active state of the device.0.1 x Active Power Consumption + 0.9 x Idle Power Consumption <= 37 mW

The internal state of the device when the host has suspended the device. This is referred to as USB selective suspend.

Transitions into this state are Host Initiated (via Suspend) and the transition out of this state is Device Initiated.

Device Fundamentals Reference: Device.Connectivity.UsbDevices.MustSupportSuspend All USB connected Windows Touch Screen controllers shall support selective suspend and report this capability via a Microsoft OS descriptor. For more information, see Microsoft OS Descriptors.

A device can elect to reduce scan rate in this mode to reduce overall power consumption while still adhering to the contact down latency requirement for this mode.

0.1 x Active Power Consumption + 0.9 x Idle Power Consumption <= 37 mW

Note  If bus powered, the device must not consume more than 2.5mA from VBUS. It is therefore recommended to have side-band power.
OFFMandatoryhe device will have no power applied in this state. There is no transition latency requirement from OFF to ACTIVE for Windows 8. Transitions in and out of this state are Host Initiated. 0mW


Idle state

To ensure no data is lost while the device is resuming from Selective suspend, the touch device manufacturer has two options:

  • OPTION 1 (Ideal Solution): Buffering: After the device has detected contact activity, it shall signal remote wake. From that event, the device shall buffer at least 100 ms worth of contact reports to ensure that little to no input is lost while the USB host controller is resuming. This option works in Windows 8.1 and in Windows 8.

  • OPTION 2 (Backup Solution): Registry Key: This solution should be used only if Option 1 is not feasible (for example, with older touchscreens). If buffering is not feasible, HID USB touch controllers should not be selectively suspended by the Host after 5 seconds of IDLE time; instead, they should be suspended by the Host only on screen off. To ensure that this happens, the following registry values must be set by the OEM for a given device instance:

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\USB\<VID>\<Device Instance>\Device Parameters


    <VID> refers to the vendor ID (or vendor ID/product ID combination) of the HID USB touch controller, and <Device Instance> refers to the instance of the device to which these settings should apply.

    If the following values do not exist, they must be added:

    Value nameTypeValue
    EnhancedPowerManagementUseMonitor DWORD1
    SelectiveSuspendEnabled DWORD0


    For the registry keys to be preserved across OS upgrades, they should be set via third party device INF. This device INF should only be setting the registry value and the third party should not install a driver by using the INF.

    The following is a sample INF:

    ; INF File for USB HID devices
    ; This inf is for devices that cannot support SelSusp but need
    ; to be idled using monitor off notifications
    ; Class Section
    Signature   ="$WINDOWS NT$"
    Class       =HIDClass
    ClassGuid   ={745a17a0-74d3-11d0-b6fe-00a0c90f57da}
    Provider    =%VendorName%
    DriverVer   =9/19/2008,
    CatalogFile =VendorXYZ.cat
    ; Install Section
    %VendorName% = VendorXYZDevice,NTx86,NTamd64,NTarm
    %VendorXYZ.DeviceDesc% = VendorXYZDevice_Install, USB\VID_xxxx&PID_yyyy
    %VendorXYZ.DeviceDesc% = VendorXYZDevice_Install, USB\VID_xxxx&PID_yyyy
    %VendorXYZ.DeviceDesc% = VendorXYZDevice_Install, USB\VID_xxxx&PID_yyyy
    include     = input.inf
    needs       = HID_Inst.NT
    include     = input.inf
    needs       = HID_Inst.NT.HW
    AddReg      = VendorXYZDevice_AddReg
    include     = input.inf
    needs       = HID_Inst.NT.Services
    VendorName = "Vendor XYZ"
    VendorXYZ.DeviceDesc = "Vendor XYZ Device"



Send comments about this topic to Microsoft