Поделиться через


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

[Применимо к KMDF и UMDF]

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

Синтаксис

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

Константы

 
IdleCapsInvalid
Значение: 0
Только для внутреннего использования.
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
заголовка wdfdevice.h (include Wdf.h)

См. также

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS