Compartir a través de


Arquitectura de la aplicación de carga de batería UEFI proporcionada por Microsoft

En este tema se proporciona información sobre el diseño de la aplicación de carga de batería UEFI proporcionada por Microsoft para dispositivos que ejecutan Windows 10 Mobile. Los OEM pueden usar la aplicación de carga de batería de Microsoft o pueden implementar su propia aplicación de carga. Los OEM que implementan su propia aplicación de carga de batería UEFI pueden usar la información de este tema como guía para su diseño.

La aplicación de carga de batería UEFI es una de las primeras aplicaciones propiedad de Microsoft que se ejecutan durante el proceso de arranque. La aplicación de carga de batería UEFI tiene las siguientes responsabilidades principales:

  • Asegúrese de que el dispositivo tiene suficiente energía para arrancar.

  • Proporcionar soporte de carga de apagado si está habilitado por el OEM. Para obtener más información sobre la carga de apagado, consulta Carga de batería en el entorno de arranque.

La aplicación de carga de batería UEFI usa protocolos UEFI clave y reacciona a varios estados devueltos por los controladores relacionados.

El término aplicación de carga de batería UEFI en este tema hace referencia a la biblioteca de carga de batería UEFI cargada por mobilestartup.efi. Para obtener más información sobre mobilestartup.efi, consulte Arranque y UEFI.

Protocolos UEFI usados por la aplicación de carga de batería UEFI

La aplicación de carga de batería UEFI (propiedad de Microsoft) usa los protocolos (implementados por los OEM) que se describen en las secciones siguientes.

Protocolo de carga de batería UEFI (EFI_BATTERY_CHARGING_PROTOCOL)

En los pasos siguientes se describen aspectos clave de cómo la aplicación de carga de batería UEFI usa el protocolo de carga de batería UEFI:

  1. La aplicación de carga de batería UEFI sondea el estado en tiempo real del hardware de la batería mediante EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryInformation (en dispositivos que admiten la versión 0x00010002 del EFI_BATTERY_CHARGING_PROTOCOL) o EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryStatus (en dispositivos que admiten la versión 0x00010001 del EFI_BATTERY_CHARGING_PROTOCOL). Es importante que estas funciones devuelvan un estado de carga exacto (SOC) siempre que sea posible. SOC es una asignación definida por OEM de la cantidad de carga en la batería en función de su estado (incluida la capacidad, voltaje y temperatura) a un valor comprendido entre 0 y 100.

  2. Los OEM definen el umbral de arranque al sistema operativo principal (un valor comprendido entre 0 y 100). Este valor puede ser diferente para diferentes modelos de dispositivo. Para obtener más información sobre el umbral del sistema operativo principal y otros valores de umbral, consulte Carga de batería en el entorno de arranque.

  3. La aplicación de carga de batería usa el SOC del controlador y lo compara con el valor del umbral del sistema operativo principal para determinar si necesita bloquear el proceso de arranque para cargar en UEFI o para continuar con el arranque. No recibe ninguna otra información sobre el estado de cargo.

  4. La aplicación de carga de batería UEFI llama a EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery para cargar el dispositivo y espera a que se devuelva un objeto CompletionEvent con un EFI_BATTERY_CHARGING_STATUS correspondiente.

Para obtener más información sobre este protocolo, consulte Protocolo de carga de batería UEFI.

Protocolo de estado de alimentación de pantalla UEFI (EFI_DISPLAY_POWER_PROTOCOL)

Durante el proceso de carga de la batería UEFI, la aplicación de carga de batería UEFI muestra una interfaz de usuario de baja potencia alterna. Después de 10 segundos sin presionar el botón de encendido, la aplicación llama a EFI_DISPLAY_POWER_PROTOCOL. SetDisplayPowerState para desactivar la pantalla y la retroiluminación. Esto ayuda al dispositivo a consumir menos energía durante la carga de la batería UEFI, lo que ayuda a cargar el dispositivo y continuar con el sistema operativo principal más rápidamente. Si el usuario presiona el botón de encendido mientras la pantalla está desactivada, la aplicación llama a EFI_DISPLAY_POWER_PROTOCOL. Vuelva a establecerDisplayPowerState para volver a activar la pantalla. Para obtener más información, consulte Experiencia del usuario más adelante en este tema.

Para obtener más información sobre este protocolo, consulte Protocolo de estado de energía para mostrar UEFI.

Protocolo de función USB UEFI (EFI_USBFN_IO_PROTOCOL)

La aplicación de carga de batería UEFI se basa exclusivamente en EFI_USBFN_IO_PROTOCOL. DetectPort para determinar el tipo de puerto que está conectado. En función del tipo de puerto, la aplicación llama a EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery con 1500 mA o 500 mA.

Para obtener más información sobre este protocolo, consulte Protocolo de función USB UEFI.

Lógica de la aplicación

En el diagrama siguiente se describe el procedimiento lógico de la aplicación de carga de batería UEFI.

lógica de carga de batería uefi.

Las notas siguientes se expanden en algunas secciones clave de la lógica:

  • Antes de llamar a EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery, la aplicación llama a EFI_USBFN_IO_PROTOCOL. DetectPort para determinar la corriente máxima que el cargador USB puede proporcionar:

    • Si hay un puerto presente, la aplicación utiliza 1500 mA para cargador de pared dedicado o 500 mA para otros puertos.

    • Si no hay ningún puerto presente, la aplicación usa 500 mA. Se espera que un cargador inalámbrico omita este valor.

    • Si no hay ningún cargador presente, la aplicación utiliza 500 mA. Sin embargo, la aplicación espera EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery para devolver un EFI_BATTERY_CHARGING_COMPLETION_TOKEN con el estado EfiBatteryChargingSourceNotDetected.

  • En todos los casos, el OEM debe asegurarse de que el dispositivo y el cargador permanezcan dentro de regiones operativas seguras.

  • Si no hay batería en el dispositivo, pero hay una fuente de alimentación conectada, cuando la aplicación llama a EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery para cargar la batería, el controlador de carga de la batería UEFI debe devolver EfiBatteryChargingStatusBatteryNotDetected. La aplicación controla este error mostrando una interfaz de usuario de error y cerrando el dispositivo.

  • Los valores de EFI_BATTERY_CHARGING_STATUS se interpretan de la misma manera tanto en los modos de carga de umbral como en los modos de carga de apagado excepto EfiBatteryChargingStatusSuccess. Para obtener más información sobre estos modos de carga, consulta Carga de batería en el entorno de arranque.

  • Cuando el dispositivo está en modo de carga, se espera que la desconexión de la fuente de alimentación produzca la señalización del firmware de la aplicación con EfiBatteryChargingSourceNotDetected, lo que provocará que la aplicación apague el dispositivo.

  • Si el firmware indica a la aplicación un estado de EfiBatteryChargingStatusOverheat o EfiBatteryChargingStatusTimeout, el dispositivo pausa la carga durante 5 minutos (pero la aplicación sigue llama a EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryInformation o EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryStatus a intervalos de aproximadamente 1 segundo). Después de 5 minutos, el dispositivo reanuda la carga llamando a EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery. Durante estos 5 minutos, se espera que el firmware señale el evento proporcionado por la aplicación con el valor de EFI_BATTERY_CHARGING_STATUS adecuado (por ejemplo, una desconexión de origen debe indicar EfiBatteryChargingSourceNotDetected).

  • En ambos modos de carga, se mostrará una interfaz de usuario animada relevante durante el cuadro con la etiqueta Stay in app en el diagrama anterior.

  • En el modo de carga de apagado , si el firmware ha señalado un evento y proporciona un estado de EfiBatteryChargingStatusSuccess, la aplicación de carga de batería UEFI no arranca en el sistema operativo principal hasta que el usuario mantiene el botón de encendido durante 3 segundos. Sin embargo, si la aplicación detecta que el cable USB se ha desconectado en este momento, apagará el dispositivo. La aplicación de carga de batería UEFI espera que el controlador mantenga la batería al máximo en modo de carga de apagado.

  • En el modo de carga de apagado, siempre y cuando el firmware no haya señalado un error o un evento de éxito, la aplicación de carga de batería UEFI no apaga el dispositivo.

Control de errores

Cada vez EFI_BATTERY_CHARGING_PROTOCOL. Se llama a ChargeBattery , se especifica un EFI_BATTERY_CHARGING_COMPLETION_TOKEN . Si el controlador experimenta un error, el evento del token se señala con un EFI_BATTERY_CHARGING_STATUS. En la tabla siguiente se muestra cómo reacciona la aplicación de carga de batería UEFI a los distintos valores de estado en situaciones diferentes.

Estado Modo de carga de umbral Modo de carga de apagado (antes y después de que el estado de carga alcance el umbral)
EfiBatteryChargingStatusNoneNone No se esperaba o no es válido No se esperaba o no es válido
EfiBatteryChargingStatusSuccess Arranque en el sistema operativo Antes de que el estado de cargo alcance el umbral: Continúe en modo de carga de apagado. Después de que el estado de cargo alcance el umbral: Permanezca en modo de carga de apagado hasta que se desconecte USB.
EfiBatteryChargingStatusOverheat Pausar la carga durante 5 minutos y, a continuación, reanudar la carga Pausar la carga durante 5 minutos y, a continuación, reanudar la carga
EfiBatteryChargingStatusVoltageOutOfRange Arranque en el sistema operativo Arranque en el sistema operativo
EfiBatteryChargingStatusCurrentOutOfRange Arranque en el sistema operativo Arranque en el sistema operativo
EfiBatteryChargingStatusTimeout Pausar la carga durante 5 minutos y, a continuación, reanudar la carga Pausar la carga durante 5 minutos y, a continuación, reanudar la carga
EfiBatteryChargingStatusAborted Mostrar la interfaz de usuario de error durante 10 segundos y, a continuación, apagar Mostrar la interfaz de usuario de error durante 10 segundos y, a continuación, apagar
EfiBatteryChargingStatusDeviceError Mostrar la interfaz de usuario de error durante 10 segundos y, a continuación, apagar Mostrar la interfaz de usuario de error durante 10 segundos y, a continuación, apagar
EfiBatteryChargingStatusEpolicyCold Mostrar la interfaz de usuario de error durante 10 segundos y, a continuación, apagar Mostrar la interfaz de usuario de error durante 10 segundos y, a continuación, apagar
EfiBatteryChargingStatusBatteryChargingNotSupported Mostrar la interfaz de usuario de error durante 10 segundos y, a continuación, apagar Mostrar la interfaz de usuario de error durante 10 segundos y, a continuación, apagar
EfiBatteryChargingStatusBatteryNotDetected Mostrar la interfaz de usuario de error durante 10 segundos y, a continuación, apagar Mostrar la interfaz de usuario de error durante 10 segundos y, a continuación, apagar
EfiBatteryChargingSourceNotDetected Apagar Apagar
EfiBatteryChargingSourceVoltageInvalid Mostrar la interfaz de usuario de error durante 10 segundos y, a continuación, apagar Mostrar la interfaz de usuario de error durante 10 segundos y, a continuación, apagar
EfiBatteryChargingSourceCurrentInvalid Mostrar la interfaz de usuario de error durante 10 segundos y, a continuación, apagar Mostrar la interfaz de usuario de error durante 10 segundos y, a continuación, apagar
EfiBatteryChargingErrorRequestShutdown Apagar Apagar
EfiBatteryChargingErrorRequestReboot Reboot Reboot

En la tabla siguiente se muestra cómo reacciona la aplicación de carga de batería UEFI a los valores de estado recibidos de EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryInformation o EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryStatus.

Estado Modo de carga de umbral Modo de carga de apagado (antes y después de que el estado de carga alcance el umbral)
EFI_SUCCESS.
Este valor se devuelve cuando no se detectó ningún error.
No aplicable No aplicable
EFI_INVALID_PARAMETER.
Este valor se devuelve cuando un parámetro de entrada es incorrecto. En teoría, esto no debería ser posible en el entorno de producción.
Mostrar la interfaz de usuario de error durante 10 segundos y, a continuación, apagar Mostrar la interfaz de usuario de error durante 10 segundos y, a continuación, apagar
EFI_DEVICE_ERROR o EFI_NOT_READY.
Estas condiciones de error se controlan de la misma manera. Estos valores deben devolverse por EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryInformation o EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryStatus en los casos en los que es posible que el dispositivo no pueda arrancar en el sistema operativo principal debido a algún error del dispositivo. En concreto:

EfiBatteryChargingStatusAborted
EfiBatteryChargingStatusDeviceError
EfiBatteryChargingStatusEpolicyCold
EfiBatteryChargingStatusBatteryChargingNotSupported
EfiBatteryChargingStatusBatteryNotDetected
EfiBatteryChargingSourceVoltageInvalid
EfiBatteryChargingSourceCurrentInvalid
EfiBatteryChargingErrorRequestShutdown
EfiBatteryChargingErrorRequestReboot.

Iniciar EFI_DEVICE_ERROR o EFI_NOT_READY seguido de un token de finalización de uno de los errores enumerados anteriormente hará que el dispositivo se apague finalmente.
Reanude y llame a EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery Reanude y llame a EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery

Experiencia del usuario

En el diagrama siguiente se muestra cómo la aplicación de carga de batería UEFI dibuja la interfaz de usuario en la pantalla si no hay suficiente carga en la batería, o si el dispositivo está en modo de carga apagada.

experiencia del usuario de carga de baterías.

En los pasos siguientes se describe cómo la aplicación dibuja la interfaz de usuario en la pantalla:

  • La aplicación borra la pantalla escribiendo el color de relleno de fondo en cada píxel del marco.

  • La aplicación dibuja los mapas de bits de la interfaz de usuario de batería baja alternando copiando píxeles de los búferes de mapa de bits directamente en la pantalla. Si se pasan 10 segundos sin presionar el botón de encendido, la aplicación llama a EFI_DISPLAY_POWER_PROTOCOL. SetDisplayPowerState para desactivar la pantalla y la retroiluminación. Si el usuario presiona el botón de encendido, EFI_DISPLAY_POWER_PROTOCOL. Se llama a SetDisplayPowerState para volver a activar la pantalla.

  • Cuando la aplicación recibe errores del controlador, la aplicación borra la pantalla escribiendo el color de relleno de fondo en cada píxel del búfer de fotogramas y, a continuación, la aplicación dibuja la pantalla de error de batería copiando píxeles del búfer de mapa de bits adecuado directamente en la pantalla.