перечисление WDF_POWER_POLICY_S0_IDLE_CAPABILITIES (wudfddi_types.h)

[Относится к KMDF и UMDF]

Перечисление WDF_POWER_POLICY_S0_IDLE_CAPABILITIES определяет возможности, которые устройство может поддерживать при переходе в состояние с низким энергопотреблением во время простоя.

Синтаксис

typedef enum _WDF_POWER_POLICY_S0_IDLE_CAPABILITIES {
  IdleCapsInvalid,
  IdleCannotWakeFromS0,
  IdleCanWakeFromS0,
  IdleUsbSelectiveSuspend
} WDF_POWER_POLICY_S0_IDLE_CAPABILITIES;

Константы

 
IdleCapsInvalid
Только для внутреннего использования.
IdleCannotWakeFromS0
Устройство не может выйти из состояния с низким энергопотреблением, пока система находится в рабочем состоянии (S0).
IdleCanWakeFromS0
Устройство может выйти из состояния с низким энергопотреблением, пока система находится в рабочем состоянии (S0).
IdleUsbSelectiveSuspend
Устройство подключено к шине USB и поддерживает выборочную приостановку USB. Используйте это значение, если подключенное по USB устройство поддерживает как простой, так и пробуждение, пока компьютер находится в рабочем состоянии. Если USB-устройство поддерживает только режим простоя, используйте IdleCannotWakeFromS0. (Драйверы для USB-устройств не должны указывать IdleCanWakeFromS0.) См. примеры кода в следующем разделе Примеры.

Для Windows XP платформа поддерживает выборочную приостановку USB, только если структура USB_CONFIGURATION_DESCRIPTOR устройства показывает, что устройство поддерживает удаленное пробуждение. Для Windows Vista и более поздних версий Windows платформа поддерживает выборочную приостановку usb независимо от того, поддерживает ли устройство удаленное пробуждение.

Комментарии

Перечисление WDF_POWER_POLICY_S0_IDLE_CAPABILITIES используется в структуре WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS .

Примеры

В следующих примерах кода показано, как включить поддержку простоя для USB-устройства. В каждом случае возвращаемое значение STATUS_POWER_STATE_INVALID означает, что водитель автобуса сообщил, что устройство не может самостоятельно разбудиться.

Пример KMDF

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT(&idleSettings,
                                           IdleUsbSelectSuspend);
status = WdfDeviceAssignS0IdleSettings(device,
                                       &idleSettings);
if (status == STATUS_POWER_STATE_INVALID){
    //
    // The device probably does not support wake. 
    // It might support idle without wake.
    //
    idleSettings.IdleCaps = IdleCannotWakeFromS0;
    status = WdfDeviceAssignS0IdleSettings(device,
                                           &IdleSettings);
    if (!NT_SUCCESS(status) {...}
 }
else {...}

Пример UMDF

hr = pIWDFDevice2->AssignS0IdleSettings(IdleUsbSelectSuspend,
                                        PowerDeviceD3,
                                        IDLEWAKE_TIMEOUT_MSEC,
                                        IdleAllowUserControl,
                                        WdfTrue);
if (hr == HRESULT_FROM_NT(STATUS_POWER_STATE_INVALID)){
    //
    // The device probably does not support wake. 
    // It might support idle without wake.
    //
    hr = pIWDFDevice2->AssignS0IdleSettings(IdleCannotWakeFromS0,
                                         PowerDeviceD3,
                                         IDLEWAKE_TIMEOUT_MSEC,
                                         IdleAllowUserControl,
                                         WdfTrue);
    if (!SUCCEEDED(hr)) {...}
}
else {...}

Требования

Требование Значение
Минимальная версия KMDF 1,0
Минимальная версия UMDF 1.11
Верхняя часть wudfddi_types.h (включая Wdf.h)

См. также раздел

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS