Compatibilidad con la Power-Down inactiva
Algunos dispositivos pueden entrar en un estado de bajo consumo (Dx) mientras el sistema permanece en su estado de funcionamiento (S0). A partir de Windows 8, los dispositivos pueden pasar a un estado de energía funcional de bajo consumo (Fx) antes de entrar en un estado Dx. Para estos dispositivos, el marco inicia la reducción de la potencia del dispositivo o componente después de que el dispositivo se haya inactivo (no se ha usado) durante un período de tiempo predeterminado (y configurable).
Algunos de estos dispositivos también pueden desencadenar una señal de reactivación en el bus cuando detectan un evento externo. El controlador de autobús responde a esta señal y la pila del controlador restaura el dispositivo a su estado de trabajo. (Los dispositivos que no detectan eventos externos permanecen en un estado de bajo consumo hasta que el marco pida al controlador de bus que inicie la restauración del dispositivo a su estado de trabajo).
Si el dispositivo o el componente se pueden apagar cuando está inactivo, la función de devolución de llamada EvtDriverDeviceAdd en el propietario de la directiva de energía debe realizar los dos pasos siguientes:
Llame a WdfDeviceAssignS0IdleSettings para especificar:
- Estado de baja energía que el dispositivo entrará
- Cantidad de tiempo que el dispositivo debe permanecer inactivo antes de que se reduzca su estado de alimentación.
- Si el dispositivo puede detectar un evento externo y desencadenar una señal de reactivación en el bus
- Si los usuarios pueden controlar la configuración de inactividad del dispositivo
- Si la funcionalidad de apagado inactivo del dispositivo está habilitada o deshabilitada
- Si el dispositivo volverá a su estado de trabajo (D0) cuando el sistema vuelva a su estado de trabajo (S0)
- Si el valor de tiempo de espera de inactividad del dispositivo viene determinado por el marco de administración de energía (PoFx)
- Si el marco puede colocar el dispositivo en el estado de alimentación D3cold cuando expira el período de tiempo de espera de inactividad
Para obtener más información sobre esta configuración, consulte la estructura de WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS , así como Los estados de energía funcionales auxiliares.
Llame a WdfDeviceInitSetPowerPolicyEventCallbacks para registrar las siguientes funciones de devolución de llamada de eventos, si las necesita para el dispositivo:
- EvtDeviceArmWakeFromS0, que permite que el hardware del dispositivo (no el bus) responda a un evento de reactivación externo.
- EvtDeviceDisarmWakeFromS0, que deshabilita la capacidad del dispositivo (no la capacidad del bus) para responder a un evento de reactivación externo.
- EvtDeviceWakeFromS0Triggered, que informa al conductor de que el autobús detectó una señal de reactivación.
Condiciones de inactividad
El marco considera que el dispositivo está inactivo y comienza a contar el tiempo de inactividad, cuando se cumplen todas las condiciones siguientes:
- Ninguna de las colas administradas por energía creadas para esta instancia de dispositivo tiene solicitudes en espera en cola o enviadas al controlador. Si una solicitud se envió al controlador y el controlador la envió a un destino de E/S, la solicitud sigue relacionada con la cola. El dispositivo no se considerará inactivo, a menos que el controlador use la opción enviar y olvidar para enviar la solicitud. Las solicitudes en colas no administradas sin energía no se cuentan para el dispositivo inactivo.
- Si el controlador anteriormente llamado WdfDeviceStopIdle, el controlador ha llamado posteriormente a WdfDeviceResumeIdle.
- Si el propietario de la directiva de energía es un controlador de autobús, ninguno de los dispositivos secundarios del controlador de autobús está en D0.
Si el controlador (o un usuario) habilita el apagado inactivo para el dispositivo, es posible que tenga que usar el método WdfDeviceStopIdle . Si el dispositivo está en su estado de trabajo (D0), este método impide que el dispositivo se desenlame hasta que el controlador llame a WdfDeviceResumeIdle. Si el dispositivo está en un estado de bajo consumo cuando el controlador llama a WdfDeviceStopIdle y si el sistema está en su estado de trabajo (S0), el marco solicita al controlador de bus que restaure el dispositivo a su estado de funcionamiento (D0). Todas las llamadas correctas a WdfDeviceStopIdle deben coincidir con una llamada a WdfDeviceResumeIdle. Para obtener información sobre cómo ver el recuento de referencias de energía en el depurador, consulte Depuración de fugas de referencia de energía en WDF.
Para obtener más información sobre cuándo es posible que el controlador tenga que llamar a WdfDeviceStopIdle, consulte la página de referencia del método.
Si el dispositivo se puede reactivar desde un estado de bajo consumo, el controlador del autobús del dispositivo participa en la reactivación del dispositivo. El controlador de autobús normalmente proporciona funciones de devolución de llamada EvtDeviceEnableWakeAtBus y EvtDeviceDisableWakeAtBus . Estas funciones hacen lo que sea necesario en el adaptador de bus para habilitar y deshabilitar la capacidad de un dispositivo para reactivarse desde un estado de bajo consumo.
Para obtener información sobre las entradas del Registro que controlan las funcionalidades inactivas de un dispositivo, consulte Control de usuario del comportamiento de inactividad y reactivación del dispositivo.