Mise en éveil à distance des périphériques USB
Les périphériques USB capables de répondre aux signaux de veille externe en cas de suspension sont dits avoir une fonctionnalité de mise en éveil à distance . Les souris, les claviers, les hubs USB, les modems (wake on ring), les cartes réseau et l’insertion du câble sont des exemples d’appareils qui ont une capacité de mise en éveil à distance. Tous ces appareils sont capables de produire une signalisation de sortie de veille à distance. Les appareils qui ne sont pas capables de générer une signalisation de sortie de veille à distance incluent les caméras vidéo, les périphériques de stockage de masse, les périphériques audio et les imprimantes.
Les pilotes des appareils qui prennent en charge la signalisation de mise en éveil à distance doivent émettre un IRP IRP_MN_WAIT_WAKE , également appelé IRP d’attente, pour armer l’appareil pour la mise en éveil à distance. Le mécanisme de veille d’attente est décrit dans la section Prise en charge des appareils dotés de fonctionnalités Wake-Up.
Mise en éveil à distance sur un périphérique usb
Dans la terminologie USB, un périphérique USB est activé pour la mise en éveil à distance lorsque sa fonctionnalité de DEVICE_REMOTE_WAKEUP est définie. La spécification USB spécifie que le logiciel hôte doit définir la fonctionnalité de mise en éveil à distance sur un appareil « juste avant » de mettre l’appareil en veille.
Pour cette raison, la pile USB ne définit pas la fonctionnalité DEVICE_REMOTE_WAKEUP sur un appareil après avoir reçu un IRP de veille pour l’appareil. Au lieu de cela, il attend qu’il reçoive une demande de IRP_MN_SET_POWER pour modifier l’état de l’appareil WDM de l’appareil en D1/D2. Dans la plupart des cas, lorsque la pile USB reçoit cette demande, elle définit la fonctionnalité de mise en éveil à distance de l’appareil et met l’appareil en veille en suspendant le port amont de l’appareil. Lorsque vous concevez et déboguez votre pilote, vous devez garder à l’esprit qu’il existe une relation lâche entre l’armage d’un périphérique USB pour la mise en éveil dans le logiciel, au moyen d’un IRP de veille d’attente, et l’armage de l’appareil pour le réveil dans le matériel en définissant la fonctionnalité de mise en éveil à distance.
La pile USB n’active pas l’appareil pour la mise en éveil à distance lorsqu’il reçoit une demande de passage de l’appareil à un état de veille de D3, car selon le modèle d’alimentation WDM, les appareils dans D3 ne peuvent pas sortir le système.
Comportement de mise en éveil lors de l’attachement ou du détachement d’un périphérique USB
Un autre aspect unique de l’implémentation USB du mode d’alimentation WDM concerne l’armage des hubs USB pour la mise en éveil à distance. Si un périphérique usb sur le bus est armé pour le réveil, la pile USB armera également le contrôleur hôte USB pour le réveil, mais elle n’armera pas nécessairement les hubs USB amont de l’appareil. Le pilote du hub USB arme un hub pour la mise en éveil à distance uniquement si la pile USB est configurée pour réveiller le système lors d’événements d’attachement et de détachement (plug/unplug).
Les contrôleurs hôtes USB UHCI (Universal Host Controller Interface) ne font pas la distinction entre la signalisation de sortie de veille à distance et les événements de modification de connexion sur les ports hub racine. Cela signifie que le système sortira toujours d’un état d’alimentation faible lorsqu’un périphérique USB est connecté ou déconnecté d’un port hub racine s’il y a au moins un appareil derrière le contrôleur UHCI qui est armé pour le réveil.