Prise en charge des Power-Down inactifs

Certains appareils peuvent passer à l’état basse consommation (Dx) pendant que le système reste dans son état de fonctionnement (S0). À partir de Windows 8, les appareils peuvent passer à un état d’alimentation fonctionnelle de faible consommation (Fx) avant d’entrer dans l’état Dx. Pour ces appareils, l’infrastructure lance la réduction de la puissance de l’appareil ou du composant une fois que l’appareil a été inactif (non utilisé) pendant une durée prédéterminée (et paramétrable).

Certains de ces appareils peuvent également déclencher un signal de mise en éveil sur le bus lorsqu’ils détectent un événement externe. Le pilote de bus répond à ce signal, et la pile de pilotes restaure le périphérique à son état de fonctionnement. (Les appareils qui ne détectent pas les événements externes restent dans un état de faible consommation d’énergie jusqu’à ce que le framework demande au pilote de bus de lancer la restauration de l’appareil à son état opérationnel.)

Si votre appareil ou composant peut être mis hors tension lorsqu’il est inactif, la fonction de rappel EvtDriverDeviceAdd dans le propriétaire de la stratégie d’alimentation doit effectuer les deux étapes suivantes :

  1. Appelez WdfDeviceAssignS0IdleSettings pour spécifier :

    • État de faible consommation que l’appareil entrera
    • Durée pendant laquelle l’appareil doit rester inactif avant que son état d’alimentation soit réduit
    • Si l’appareil peut détecter un événement externe et déclencher un signal de mise en éveil sur le bus
    • Si les utilisateurs peuvent contrôler les paramètres d’inactivité de l’appareil
    • Indique si la fonctionnalité d’arrêt inactif de l’appareil est activée ou désactivée
    • Si l’appareil reviendra à son état de fonctionnement (D0) lorsque le système revient à son état de fonctionnement (S0)
    • Indique si la valeur du délai d’inactivité de l’appareil est déterminée par l’infrastructure de gestion de l’alimentation (PoFx)
    • Si l’infrastructure peut placer l’appareil dans l’état d’alimentation D3cold lorsque le délai d’inactivité expire

    Pour plus d’informations sur ces paramètres, consultez structure WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS , ainsi que Prise en charge des états d’alimentation fonctionnels.

  2. Appelez WdfDeviceInitSetPowerPolicyEventCallbacks pour inscrire les fonctions de rappel d’événement suivantes, si vous en avez besoin pour votre appareil :

    • EvtDeviceArmWakeFromS0, qui permet au matériel de l’appareil (et non au bus) de répondre à un événement de mise en éveil externe
    • EvtDeviceDisarmWakeFromS0, qui désactive la capacité de l’appareil (pas la capacité du bus) à répondre à un événement de mise en éveil externe
    • EvtDeviceWakeFromS0Triggered, qui informe le pilote que le bus a détecté un signal de sortie de veille.

Conditions d’inactivité

L’infrastructure considère que l’appareil est inactif et commence à compter le temps d’inactivité, lorsque toutes les conditions suivantes sont remplies :

  • Aucune des files d’attente gérées par l’alimentation créées pour cet appareil n’instance avoir de demandes en attente dans la file d’attente ou envoyées au pilote. Si une requête a été envoyée au pilote et que le pilote l’a envoyée à une cible d’E/S, la demande est toujours liée à la file d’attente. L’appareil ne sera pas considéré comme inactif, sauf si le pilote a utilisé l’option d’envoi et d’oubli pour envoyer la demande. Les demandes dans les files d’attente non gérées par l’alimentation ne sont pas comptabilisées dans les appareils inactifs.
  • Si le pilote a précédemment appelé WdfDeviceStopIdle, il a ensuite appelé WdfDeviceResumeIdle.
  • Si le propriétaire de la stratégie d’alimentation est un pilote de bus, aucun des périphériques enfants du pilote de bus n’est en D0.

Si votre pilote (ou un utilisateur) active la mise hors tension de votre appareil, vous devrez peut-être utiliser la méthode WdfDeviceStopIdle . Si l’appareil est dans son état opérationnel (D0), cette méthode empêche l’appareil de fonctionner jusqu’à ce que le pilote appelle WdfDeviceResumeIdle. Si l’appareil est dans un état de faible consommation lorsque le pilote appelle WdfDeviceStopIdle, et si le système est dans son état de fonctionnement (S0), l’infrastructure demande au pilote de bus de restaurer l’appareil à son état opérationnel (D0). Chaque appel réussi à WdfDeviceStopIdle doit être mis en correspondance par un appel à WdfDeviceResumeIdle. Pour plus d’informations sur l’affichage du nombre de références d’alimentation dans le débogueur, consultez Débogage des fuites de référence d’alimentation dans WDF.

Pour plus d’informations sur le moment où votre pilote doit appeler WdfDeviceStopIdle, consultez la page de référence de la méthode.

Si l’appareil peut sortir d’un état de faible consommation, le pilote du bus de l’appareil participe au réveil de l’appareil. Le pilote de bus fournit généralement des fonctions de rappel EvtDeviceEnableWakeAtBus et EvtDeviceDisableWakeAtBus . Ces fonctions font tout ce qui est nécessaire sur l’adaptateur de bus pour activer et désactiver la capacité d’un appareil à sortir d’un état de faible consommation.

Pour plus d’informations sur les entrées de Registre qui contrôlent les fonctionnalités inactives d’un appareil, consultez Contrôle utilisateur du comportement d’inactivité et de veille de l’appareil.