Architecture de l’application de charge de batterie UEFI fournie par Microsoft
Cette rubrique fournit des informations sur la conception de l’application de charge de batterie UEFI fournie par Microsoft pour les appareils qui exécutent Windows 10 Mobile. Les oem peuvent utiliser l’application de charge de la batterie de Microsoft ou implémenter leur propre application de charge. Les oem qui implémentent leur propre application de charge de batterie UEFI peuvent utiliser les informations de cette rubrique comme guide pour leur conception.
L’application de charge de batterie UEFI est l’une des premières applications appartenant à Microsoft qui s’exécute pendant le processus de démarrage. L’application de charge de batterie UEFI a les principales responsabilités suivantes :
Assurez-vous que l’appareil dispose de suffisamment d’alimentation pour démarrer.
Fournir une prise en charge de la charge hors tension si l’oem l’active. Pour plus d’informations sur la charge hors tension, consultez Charge de la batterie dans l’environnement de démarrage.
L’application de charge de batterie UEFI utilise des protocoles UEFI clés et réagit aux différents états retournés par les pilotes associés.
Le terme d’application de charge de batterie UEFI dans cette rubrique fait référence à la bibliothèque de charge de batterie UEFI chargée par mobilestartup.efi. Pour plus d’informations sur mobilestartup.efi, consultez Démarrage et UEFI.
Protocoles UEFI utilisés par l’application de charge de batterie UEFI
L’application de charge de batterie UEFI (appartenant à Microsoft) utilise les protocoles (implémentés par les oem) décrits dans les sections suivantes.
Protocole de charge de batterie UEFI (EFI_BATTERY_CHARGING_PROTOCOL)
Les étapes suivantes décrivent les aspects clés de la façon dont l’application de charge de batterie UEFI utilise le protocole de charge de batterie UEFI :
L’application de charge de batterie UEFI interroge l’état en temps réel du matériel de la batterie à l’aide de EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryInformation (sur les appareils qui prennent en charge la version 0x00010002 du EFI_BATTERY_CHARGING_PROTOCOL) ou EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryStatus (dans les appareils qui prennent en charge la version 0x00010001 du EFI_BATTERY_CHARGING_PROTOCOL). Il est important que ces fonctions retournent une valeur d’état de charge (SOC) précise chaque fois que cela est possible. SOC est un mappage défini par l’OEM de la quantité de charge dans la batterie en fonction de son état (y compris la capacité, la tension et la température) à une valeur comprise entre 0 et 100.
Les oem définissent le seuil de démarrage vers le système d’exploitation principal (valeur comprise entre 0 et 100). Cette valeur peut être différente pour différents modèles d’appareil. Pour plus d’informations sur le seuil de démarrage vers le système d’exploitation principal et d’autres valeurs de seuil, consultez Charge de la batterie dans l’environnement de démarrage.
L’application de charge de la batterie utilise le SOC du pilote et le compare à la valeur seuil de démarrage sur le système d’exploitation principal pour déterminer si elle doit bloquer le processus de démarrage afin de charger dans UEFI ou de continuer le démarrage. Il ne reçoit aucune autre information sur l’état des frais.
L’application de charge de batterie UEFI appelle EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery pour charger l’appareil, et il attend qu’un événement CompletionEvent avec un EFI_BATTERY_CHARGING_STATUS correspondant soit retourné.
Pour plus d’informations sur ce protocole, consultez Protocole de charge de batterie UEFI.
Protocole d’état d’alimentation d’affichage UEFI (EFI_DISPLAY_POWER_PROTOCOL)
Pendant le processus de charge de la batterie UEFI, l’application de charge de batterie UEFI affiche une interface utilisateur de faible puissance alternée. Après 10 secondes sans appuyer sur le bouton Marche/Arrêt, l’application appelle EFI_DISPLAY_POWER_PROTOCOL. SetDisplayPowerState pour désactiver l’affichage et le rétro-éclairage. Cela permet à l’appareil de consommer moins d’énergie pendant la charge de la batterie UEFI, ce qui permet à l’appareil de charger et de passer au système d’exploitation principal plus rapidement. Si l’utilisateur appuie sur le bouton d’alimentation alors que l’affichage est désactivé, l’application appelle EFI_DISPLAY_POWER_PROTOCOL. SetDisplayPowerState à nouveau pour réactiver l’affichage. Pour plus d’informations, consultez Expérience utilisateur plus loin dans cette rubrique.
Pour plus d’informations sur ce protocole, consultez Protocole d’état d’alimentation d’affichage UEFI.
Protocole de fonction USB UEFI (EFI_USBFN_IO_PROTOCOL)
L’application de charge de batterie UEFI s’appuie exclusivement sur EFI_USBFN_IO_PROTOCOL. DetectPort pour déterminer le type de port connecté. En fonction du type de port, l’application appelle EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery avec 1500 mA ou 500 mA.
Pour plus d’informations sur ce protocole, consultez Protocole de fonction USB UEFI.
Logique d’application
Le diagramme suivant décrit la procédure logique de l’application de charge de batterie UEFI.
Les notes suivantes développent certaines sections clés de la logique :
Avant d’appeler EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery, l’application appelle EFI_USBFN_IO_PROTOCOL. DetectPort pour déterminer le courant maximal que le chargeur USB peut fournir :
Si un port est présent, l’application utilise 1500 mA pour un chargeur mural dédié ou 500 mA pour d’autres ports.
Si aucun port n’est présent, l’application utilise 500 mA. Un chargeur sans fil doit ignorer cette valeur.
Si aucun chargeur n’est présent, l’application utilise 500 mA. Toutefois, l’application s’attend à EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery pour renvoyer un EFI_BATTERY_CHARGING_COMPLETION_TOKEN avec l’état EfiBatteryChargingSourceNotDetected.
Dans tous les cas, l’oem doit s’assurer que l’appareil et le chargeur restent dans des zones d’exploitation sécurisées.
S’il n’y a pas de batterie dans l’appareil mais qu’il existe une source d’alimentation connectée, lorsque l’application appelle EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery pour charger la batterie, le pilote de charge de batterie UEFI doit renvoyer EfiBatteryChargingStatusBatteryNotDetected. L’application gère cette erreur en affichant une interface utilisateur d’erreur et en arrêtant l’appareil.
Les valeurs EFI_BATTERY_CHARGING_STATUS sont interprétées de la même façon dans les modes de charge de seuil et de mise hors tension , à l’exception d’EfiBatteryChargingStatusSuccess. Pour plus d’informations sur ces modes de charge, consultez Charge de la batterie dans l’environnement de démarrage.
Lorsque l’appareil est en mode de chargement, la déconnexion de la source d’alimentation devrait entraîner la signalisation du microprogramme de l’application avec EfiBatteryChargingSourceNotDetected, ce qui entraîne l’arrêt de l’application.
Si le microprogramme signale à l’application un état EfiBatteryChargingStatusOverheat ou EfiBatteryChargingStatusTimeout, l’appareil interrompt la charge pendant 5 minutes (mais l’application appelle toujours EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryInformation ou EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryStatus à intervalles d’environ 1 seconde). Après 5 minutes, l’appareil reprend le chargement en appelant EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery. Pendant ces 5 minutes, le microprogramme doit toujours signaler l’événement fourni par l’application avec la valeur EFI_BATTERY_CHARGING_STATUS appropriée (par exemple, une déconnexion source doit signaler EfiBatteryChargingSourceNotDetected).
Dans les deux modes de chargement, une interface utilisateur animée pertinente s’affiche pendant la zone intitulée Rester dans l’application dans le diagramme précédent.
En mode de charge hors tension , si le microprogramme a signalé un événement et fournit l’état EfiBatteryChargingStatusSuccesss, l’application de charge de la batterie UEFI ne démarre pas sur le système d’exploitation principal tant que l’utilisateur ne tient pas le bouton d’alimentation pendant 3 secondes. Toutefois, si l’application détecte que le câble USB a été déconnecté à ce stade, elle met l’appareil hors tension. L’application de charge de batterie UEFI s’attend à ce que le conducteur maintienne la batterie à plein régime en mode de charge hors tension.
En mode de recharge hors tension, tant que le microprogramme n’a pas signalé d’erreur ou d’événement de réussite, l’application de charge de la batterie UEFI ne met pas l’appareil hors tension.
Gestion des erreurs
Chaque fois EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery est appelé, un EFI_BATTERY_CHARGING_COMPLETION_TOKEN est spécifié. Si le pilote rencontre une erreur, l’événement dans le jeton est signalé par un EFI_BATTERY_CHARGING_STATUS. Le tableau suivant montre comment l’application de charge de batterie UEFI réagit aux différentes valeurs d’état dans différentes situations.
État | Mode de chargement de seuil | Mode de charge hors tension (avant et après que l’état de charge atteint le seuil) |
---|---|---|
EfiBatteryChargingStatusNoneNone | Non attendu/non valide | Non attendu/non valide |
EfiBatteryChargingStatusSuccess | Démarrage du système d’exploitation | Avant que l’état de charge n’atteigne le seuil : Continuez en mode de charge hors tension. Une fois que l’état de charge atteint le seuil : Restez en mode de charge hors tension jusqu’à ce que l’USB soit déconnecté. |
EfiBatteryChargingStatusOverheat | Suspendre la charge pendant 5 minutes, puis reprendre la charge | Suspendre la charge pendant 5 minutes, puis reprendre la charge |
EfiBatteryChargingStatusVoltageOutOfRange | Démarrage du système d’exploitation | Démarrage du système d’exploitation |
EfiBatteryChargingStatusCurrentOutOfRange | Démarrage du système d’exploitation | Démarrage du système d’exploitation |
EfiBatteryChargingStatusTimeout | Suspendre la charge pendant 5 minutes, puis reprendre la charge | Suspendre la charge pendant 5 minutes, puis reprendre la charge |
EfiBatteryChargingStatusAborted | Afficher l’interface utilisateur d’erreur pendant 10 secondes, puis s’arrêter | Afficher l’interface utilisateur d’erreur pendant 10 secondes, puis s’arrêter |
EfiBatteryChargingStatusDeviceError | Afficher l’interface utilisateur d’erreur pendant 10 secondes, puis s’arrêter | Afficher l’interface utilisateur d’erreur pendant 10 secondes, puis s’arrêter |
EfiBatteryChargingStatusExtremeCold | Afficher l’interface utilisateur d’erreur pendant 10 secondes, puis s’arrêter | Afficher l’interface utilisateur d’erreur pendant 10 secondes, puis s’arrêter |
EfiBatteryChargingStatusBatteryChargingNotSupported | Afficher l’interface utilisateur d’erreur pendant 10 secondes, puis s’arrêter | Afficher l’interface utilisateur d’erreur pendant 10 secondes, puis s’arrêter |
EfiBatteryChargingStatusBatteryNotDetected | Afficher l’interface utilisateur d’erreur pendant 10 secondes, puis s’arrêter | Afficher l’interface utilisateur d’erreur pendant 10 secondes, puis s’arrêter |
EfiBatteryChargingSourceNotDetected | Arrêter | Arrêter |
EfiBatteryChargingSourceVoltageInvalid | Afficher l’interface utilisateur d’erreur pendant 10 secondes, puis s’arrêter | Afficher l’interface utilisateur d’erreur pendant 10 secondes, puis s’arrêter |
EfiBatteryChargingSourceCurrentInvalid | Afficher l’interface utilisateur d’erreur pendant 10 secondes, puis s’arrêter | Afficher l’interface utilisateur d’erreur pendant 10 secondes, puis s’arrêter |
EfiBatteryChargingErrorRequestShutdown | Arrêter | Arrêter |
EfiBatteryChargingErrorRequestReboot | Reboot | Reboot |
Le tableau suivant illustre la façon dont l’application de chargement de batterie UEFI réagit aux valeurs d’état reçues de EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryInformation ou EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryStatus.
État | Mode de chargement du seuil | Mode de chargement hors tension (avant et après que l’état de charge atteigne le seuil) |
---|---|---|
EFI_SUCCESS. Cette valeur est retournée lorsqu’aucune erreur n’a été détectée. |
Non applicable | Non applicable |
EFI_INVALID_PARAMETER. Cette valeur est retournée lorsqu’un paramètre d’entrée est incorrect. Cela ne devrait théoriquement pas être possible dans l’environnement de production. |
Afficher l’interface utilisateur d’erreur pendant 10 secondes, puis s’arrêter | Afficher l’interface utilisateur d’erreur pendant 10 secondes, puis s’arrêter |
EFI_DEVICE_ERROR ou EFI_NOT_READY. Ces conditions d’erreur sont gérées de la même façon. Ces valeurs doivent être retournées par EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryInformation ou EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryStatus dans les cas où l’appareil peut ne pas être en mesure de démarrer sur le système d’exploitation principal en raison d’une erreur d’appareil. En particulier : EfiBatteryChargingStatusAborted EfiBatteryChargingStatusDeviceError EfiBatteryChargingStatusExtremeCold EfiBatteryChargingStatusBatteryChargingNotSupported EfiBatteryChargingStatusBatteryNotDetected EfiBatteryChargingSourceVoltageInvalid EfiBatteryChargingSourceCurrentInvalid EfiBatteryChargingErrorRequestShutdown EfiBatteryChargingErrorRequestReboot. Le fait de lever EFI_DEVICE_ERROR ou EFI_NOT_READY suivi d’un jeton d’achèvement de l’une des erreurs répertoriées ci-dessus entraîne l’arrêt de l’appareil. |
Reprendre et appeler EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery | Reprendre et appeler EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery |
Expérience utilisateur
Le diagramme suivant montre comment l’application de chargement de batterie UEFI attire l’interface utilisateur à l’écran si la batterie n’est pas suffisamment chargée ou si l’appareil est en mode de chargement hors tension.
Les étapes suivantes décrivent comment l’application dessine l’interface utilisateur à l’écran :
L’application efface l’écran en écrivant la couleur de remplissage d’arrière-plan sur chaque pixel du cadre.
L’application dessine les bitmaps de l’interface utilisateur à faible batterie en copiant les pixels des mémoires tampons bitmap directement vers l’affichage. Si 10 secondes s’écoulent sans que vous appuyiez sur le bouton Marche/Arrêt, l’application appelle EFI_DISPLAY_POWER_PROTOCOL. DéfinissezDisplayPowerState pour désactiver l’affichage et le rétro-éclairage. Si l’utilisateur appuie sur le bouton Marche/Arrêt, EFI_DISPLAY_POWER_PROTOCOL. SetDisplayPowerState est appelé pour réactiver l’affichage.
Lorsque l’application reçoit des erreurs du pilote, l’application efface l’écran en écrivant la couleur de remplissage d’arrière-plan sur chaque pixel de la mémoire tampon du cadre, puis l’application dessine l’écran d’erreur de batterie en copiant les pixels de la mémoire tampon bitmap appropriée directement sur l’affichage.