перечисление 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 (включая Wdf.h) |