Informations sur la batterie
Les batteries peuvent fournir de l’alimentation pour les ordinateurs portables et les ordinateurs fonctionnant sur une alimentation sans interruption (OND). Sur ces ordinateurs, le système d’exploitation fournit des informations sur l’état de la batterie afin que les applications puissent fournir des fonctions utiles à l’utilisateur. (Certains anciens systèmes de batterie non standard et les ondeurs ne sont pas pris en charge.)
Notez que cette vue d’ensemble suppose que vous êtes familiarisé avec la gestion des appareils.
Pour obtenir des informations sur la batterie status, utilisez la fonction GetSystemPowerStatus, qui retourne des informations générales sur toutes les sources d’alimentation du système. Vous devez utiliser GetSystemPowerStatus dans la mesure du possible.
Dans certains cas, toutefois, des informations détaillées sur chaque batterie individuelle sont nécessaires. À cet effet, chaque appareil à batterie expose une interface IOCTL. Les opérations IOCTL suivantes sont effectuées à l’aide de la fonction DeviceIoControl :
IOCTL_BATTERY_QUERY_INFORMATION
IOCTL_BATTERY_QUERY_STATUS
IOCTL_BATTERY_QUERY_TAG
IOCTL_BATTERY_SET_INFORMATION
Pour utiliser cette interface, une application doit suivre plusieurs étapes. Tout d’abord, il doit utiliser des routines de configuration pour énumérer tous les appareils qui ont une interface de classe de batterie. Notez que ces appareils représentent les ports de batterie, et non les batteries réelles présentes dans le système. L’application doit ensuite ouvrir un handle sur chaque appareil afin qu’elle puisse utiliser la fonction DeviceIoControl pour envoyer des demandes à l’appareil, puis acquérir des étiquettes pour toutes les batteries insérées. Une fois ces étapes terminées, l’application peut envoyer des requêtes à chaque appareil de batterie.
Étiquettes de batterie
Étant donné que chaque appareil à batterie représente un emplacement dans lequel une batterie peut être insérée, il doit y avoir un moyen de déterminer quand la batterie est retirée et réinsérée, remplacée ou modifiée de toute autre manière. Pour ce faire, une balise est affectée à chaque batterie d’un emplacement particulier. Cette balise doit être utilisée pour toutes les requêtes pour obtenir des informations. Si la balise fournie par l’application ne correspond pas à la batterie, la requête échoue, indiquant à l’application que la batterie a changé d’une manière ou d’une autre. Pour terminer correctement la requête, une nouvelle balise de batterie est nécessaire. Acquérir la balise à l’aide de l’opération IOCTL_BATTERY_QUERY_TAG . Si une batterie est présente dans cet emplacement, la balise retournée peut être passée à l’un des autres IOCTL de batterie pour effectuer d’autres fonctions. Sur un système à plusieurs batteries, chaque appareil de batterie (emplacement) émet des étiquettes de batterie indépendamment, de sorte que l’étiquette de deux appareils distincts peut parfois être identique.
Une modification de la balise de batterie ne signifie pas nécessairement que la batterie a été retirée, réinsérée ou remplacée. Une nouvelle balise peut être générée en cas de modification dans l’une des données qui seraient normalement statiques. Par exemple, lorsqu’une batterie est chargée, la dernière capacité entièrement chargée peut avoir changé. La balise peut également changer si la communication de la batterie a été temporairement perdue ou s’il y a eu une notification incorrecte du BIOS. Sur certains systèmes, la balise de batterie peut être mise à jour chaque fois que le status AC change. Ce comportement est dû à une caractéristique du système de batterie et n’est pas courant.
Chaque fois que la balise de batterie est mise à jour, la batterie doit être traitée comme s’il s’agissait d’une nouvelle batterie et toutes les données mises en cache doivent être lues à nouveau. Si une application doit savoir si la même batterie physique est présente, elle doit case activée la valeur de BatteryUniqueID dans la mémoire tampon de sortie de IOCTL_BATTERY_QUERY_INFORMATION lorsqu’elle est appelée avec le niveau d’informations BatteryUniqueID.
Rubriques connexes