Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
[Aplica-se apenas ao KMDF]
Um driver KMDF para um dispositivo de múltiplos componentes pode suportar desligamento ocioso e estados de energia funcional. Como neste caso o driver se regista diretamente com a estrutura de gestão de energia (PoFx), o driver deve coordenar as alterações de estado Dx resultantes com a PoFx.
Fornecendo configurações ociosas da política de energia do dispositivo
Quando chama WdfDeviceAssignS0IdleSettings, o driver deve definir IdleTimeoutType como DriverManagedIdleTimeout na estrutura WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS. Além disso, o driver deve definir PowerUpIdleDeviceOnSystemWake como WdfTrue e IdleCaps como IdleCannotWakeFromS0, conforme mostrado no exemplo a seguir.
WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS s0IdleSettings;
WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT(&s0IdleSettings,
IdleCannotWakeFromS0);
s0IdleSettings.IdleTimeoutType = DriverManagedIdleTimeout;
s0IdleSettings.PowerUpIdleDeviceOnSystemWake = WdfTrue;
s0IdleSettings.IdleTimeout = 1;
status = WdfDeviceAssignS0IdleSettings(device, &s0IdleSettings);
Transição do estado operativo (D0) para o estado Low-Power (Dx)
Em EvtDeviceSelfManagedIoInit, o driver chama WdfDeviceStopIdle para obter uma referência de energia, impedindo assim que o WDF coloque o dispositivo num estado de baixo consumo de energia.
O driver libera a referência de energia chamando WdfDeviceResumeIdle da sua rotina de retorno de chamada DevicePowerRequiredCallback.
O driver normalmente especifica um tempo limite de inatividade muito curto para que o WDF coloque o dispositivo em um estado de baixo consumo de energia logo após todas as referências de energia serem liberadas.
Transição do estado de Low-Power (Dx) para o estado funcional (D0)
Em DevicePowerRequiredCallback, o driver deve trazer o dispositivo para seu estado de trabalho (D0). Para fazer isso, ele deve adiar para um thread de trabalho uma chamada para WdfDeviceStopIdle com o parâmetro WaitForD0 definido como TRUE. Essa chamada de bloqueio para WdfDeviceStopIdlenão deve ser feita de dentro de DevicePowerRequiredCallback.
Em vez disso, o driver deve adiar a chamada de bloqueio para um thread de trabalho que esteja executando em nível passivo e tenha a garantia de não fazer a chamada WdfDeviceStopIdle no contexto da rotina de despacho de E/S de uma fila gerenciada por energia.
Se o driver tiver chamado anteriormente WdfDeviceInitSetPowerPageable (o que significa que pode aceder a dados pagináveis durante transições de energia), o driver pode utilizar WdfWorkItemCreate para criar um item de trabalho da framework. Se o driver não tiver definido power-pageable, o driver deve criar seu próprio thread do sistema. Para obter mais informações, consulte PsCreateSystemThread.
Depois que o WdfDeviceStopIdle retorna, mesmo se o método retornar um erro, o driver deve chamar PoFxReportDevicePoweredOn.