Informações sobre a bateria
As baterias podem fornecer energia para computadores portáteis e computadores que funcionam com uma fonte de alimentação ininterrupta (UPS). Nesses computadores, o sistema operacional fornece informações sobre o estado da bateria para que os aplicativos possam fornecer funções úteis para o usuário. (Alguns sistemas de baterias e UPSs não padrão mais antigos não são suportados.)
Observe que esta visão geral pressupõe que você esteja familiarizado com gerenciamento de dispositivos.
Para obter informações sobre o estado da bateria, utilize a funçãoGetSystemPowerStatus, que devolve informações gerais sobre todas as fontes de alimentação no sistema. Você deve usar GetSystemPowerStatus sempre que possível.
Em alguns casos, no entanto, são necessárias informações detalhadas sobre cada bateria individual. Para este efeito, cada dispositivo de bateria expõe uma interface IOCTL. As seguintes operações IOCTL são executadas usando a funçãoDeviceIoControl:
IOCTL_BATTERY_QUERY_INFORMATION
IOCTL_BATTERY_QUERY_STATUS
IOCTL_BATTERY_QUERY_TAG
IOCTL_BATTERY_SET_INFORMATION
Para usar essa interface, um aplicativo deve seguir várias etapas. Primeiro, ele deve usar rotinas de configuração para enumerar todos os dispositivos que têm uma interface de classe de bateria. Observe que esses dispositivos representam as portas da bateria, não as baterias reais presentes no sistema. O aplicativo deve então abrir uma alça para cada dispositivo para que ele possa usar a função DeviceIoControl para enviar solicitações para o dispositivo e, em seguida, adquirir tags para quaisquer baterias que são inseridas. Depois de concluir essas etapas, o aplicativo pode enviar consultas para cada dispositivo de bateria.
Tags de bateria
Como cada dispositivo de bateria representa um slot no qual uma bateria pode ser inserida, deve haver uma maneira de determinar quando a bateria é removida e reinserida, substituída ou alterada de qualquer outra forma. Para fazer isso, cada bateria em um slot específico recebe uma tag. Essa tag deve ser usada para todas as consultas de informações. Se a tag fornecida pelo aplicativo não corresponder à bateria, a consulta falhará, indicando ao aplicativo que a bateria mudou de alguma forma. Para concluir a consulta com êxito, é necessária uma nova etiqueta de bateria. Adquira a tag usando a operação IOCTL_BATTERY_QUERY_TAG. Se uma bateria estiver presente nesse slot, a tag retornada pode ser passada para qualquer um dos outros IOCTLs de bateria para executar outras funções. Num sistema com várias baterias, cada dispositivo de bateria (ranhura) emite etiquetas de bateria de forma independente, pelo que a etiqueta de dois dispositivos separados pode, por vezes, ser idêntica.
Uma alteração na etiqueta da bateria não significa necessariamente que a bateria foi removida e reinserida ou substituída. Uma nova tag pode ser gerada se houver uma alteração em qualquer um dos dados que normalmente seriam estáticos. Por exemplo, quando uma bateria termina de carregar, a última capacidade totalmente carregada pode ter mudado. A tag também pode mudar se a comunicação da bateria foi temporariamente perdida ou se houve uma notificação incorreta do BIOS. Em alguns sistemas, a etiqueta da bateria pode ser atualizada sempre que o estado CA muda. Este comportamento deve-se a uma característica do sistema de baterias e não é comum.
Sempre que a etiqueta da bateria é atualizada, a bateria deve ser tratada como se fosse uma bateria nova e todos os dados armazenados em cache devem ser relidos. Se um aplicativo precisa saber se a mesma bateria física está presente, ele deve verificar o valor de BatteryUniqueID no buffer de saída de IOCTL_BATTERY_QUERY_INFORMATION quando chamado com o nível de informação BatteryUniqueID.
Tópicos relacionados