Información de la batería
Las baterías pueden proporcionar energía para equipos portátiles y equipos que se ejecutan en una fuente de alimentación ininterrumpida (UPS). En estos equipos, el sistema operativo proporciona información sobre el estado de la batería para que las aplicaciones puedan proporcionar funciones útiles para el usuario. (No se admiten algunos sistemas de baterías y UPS más antiguos no estándar).
Tenga en cuenta que en esta introducción se supone que está familiarizado con la administración de dispositivos.
Para obtener información sobre el estado de la batería, utilice la función GetSystemPowerStatus , que devuelve información general sobre todas las fuentes de energía del sistema. Debe usar GetSystemPowerStatus siempre que sea posible.
En algunos casos, sin embargo, se necesita información detallada sobre cada batería individual. Para ello, cada dispositivo de batería expone una interfaz IOCTL. Las siguientes operaciones IOCTL se realizan mediante la función DeviceIoControl :
IOCTL_BATTERY_QUERY_INFORMATION
IOCTL_BATTERY_QUERY_STATUS
IOCTL_BATTERY_QUERY_TAG
IOCTL_BATTERY_SET_INFORMATION
Para usar esta interfaz, una aplicación debe seguir varios pasos. En primer lugar, debe usar rutinas de configuración para enumerar todos los dispositivos que tienen una interfaz de clase de batería. Tenga en cuenta que estos dispositivos representan los puertos de batería, no las baterías reales presentes en el sistema. A continuación, la aplicación debe abrir un identificador para cada dispositivo para que pueda usar la función DeviceIoControl para enviar solicitudes al dispositivo y, a continuación, adquirir etiquetas para las baterías que se insertan. Después de completar estos pasos, la aplicación puede enviar consultas a cada dispositivo de batería.
Etiquetas de batería
Dado que cada dispositivo de batería representa una ranura en la que se puede insertar una batería, debe haber una manera de determinar cuándo se quita y se vuelve a insertar la batería, se reemplaza o se cambia de cualquier otra manera. Para ello, a cada batería de una ranura determinada se le asigna una etiqueta. Esta etiqueta debe usarse para todas las consultas para obtener información. Si la etiqueta proporcionada por la aplicación no coincide con la batería, se produce un error en la consulta, lo que indica a la aplicación que la batería ha cambiado de alguna manera. Para completar correctamente la consulta, se requiere una nueva etiqueta de batería. Adquiera la etiqueta mediante la operación de IOCTL_BATTERY_QUERY_TAG . Si hay una batería presente en esa ranura, la etiqueta devuelta se puede pasar a cualquiera de las otras ICTL de batería para realizar otras funciones. En un sistema de varias baterías, cada dispositivo de batería (ranura) emite etiquetas de batería de forma independiente, por lo que la etiqueta de dos dispositivos independientes podría ser idéntica a veces.
Un cambio en la etiqueta de batería no significa necesariamente que la batería se haya quitado y reinserado o reemplazado. Se puede generar una nueva etiqueta si hay un cambio en cualquiera de los datos que normalmente serían estáticos. Por ejemplo, cuando se realiza la carga de una batería, la última capacidad totalmente cargada puede haber cambiado. La etiqueta también puede cambiar si se perdió temporalmente la comunicación con la batería o si se produjo una notificación incorrecta del BIOS. En algunos sistemas, la etiqueta de batería se puede actualizar cada vez que cambia el estado de ca. Este comportamiento se debe a una característica del sistema de baterías y no es común.
Cada vez que se actualiza la etiqueta de batería, la batería debe tratarse como si fuera una batería nueva y todos los datos almacenados en caché deben volver a leerse. Si una aplicación necesita saber si la misma batería física está presente, debe comprobar el valor de BatteryUniqueID en el búfer de salida de IOCTL_BATTERY_QUERY_INFORMATION cuando se llama con el nivel de información BatteryUniqueID .
Temas relacionados