Freigeben über


Architektur der von Microsoft bereitgestellten UEFI-Batterieladeanwendung

Dieses Thema enthält Informationen zum Design der von Microsoft bereitgestellten UEFI-Batterieladeanwendung für Geräte, auf denen Windows 10 Mobile ausgeführt wird. OEMs können die Batterieladeanwendung von Microsoft verwenden, oder sie können ihre eigene Ladeanwendung implementieren. OEMs, die eine eigene UEFI-Batterieladeanwendung implementieren, können die Informationen in diesem Thema als Leitfaden für ihren Entwurf verwenden.

Die UEFI-Batterieladeanwendung ist eine der ersten Anwendungen von Microsoft, die während des Startvorgangs ausgeführt wird. Die UEFI-Batterieladeanwendung hat die folgenden Hauptaufgaben:

  • Stellen Sie sicher, dass das Gerät über genügend Leistung zum Starten verfügt.

  • Stellen Sie Unterstützung für das Einschalten des Ladevorgangs bereit, wenn dies vom OEM aktiviert ist. Weitere Informationen zum Einschalten finden Sie unter Akkuladung in der Startumgebung.

Die UEFI-Batterieladeanwendung verwendet wichtige UEFI-Protokolle und reagiert auf verschiedene Zustände, die von den zugehörigen Treibern zurückgegeben werden.

Der Begriff UEFI-Batterieladeanwendung in diesem Thema bezieht sich auf die von mobilestartup.efi geladene UEFI-Batterieladebibliothek. Weitere Informationen zu mobilestartup.efi finden Sie unter Start und UEFI.

UEFI-Protokolle, die von der UEFI-Batterieladeanwendung verwendet werden

Die UEFI-Batterieladeanwendung (im Besitz von Microsoft) verwendet die protokolle (implementiert von OEMs), die in den folgenden Abschnitten erläutert werden.

UEFI-Akkuladeprotokoll (EFI_BATTERY_CHARGING_PROTOCOL)

In den folgenden Schritten werden die wichtigsten Aspekte der Verwendung des UEFI-Ladeprotokolls für den UEFI-Akku beschrieben:

  1. Die UEFI-Batterieladeanwendung fragt den Echtzeitstatus der Batteriehardware mithilfe von EFI_BATTERY_CHARGING_PROTOCOL ab. GetBatteryInformation (auf Geräten, die version 0x00010002 des EFI_BATTERY_CHARGING_PROTOCOL unterstützen) oder EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryStatus (auf Geräten, die version 0x00010001 des EFI_BATTERY_CHARGING_PROTOCOL unterstützen). Es ist wichtig, dass diese Funktionen wann immer möglich einen genauen SoC-Wert zurückgeben. SOC ist eine vom OEM definierte Zuordnung von der Lademenge in der Batterie basierend auf ihrem Zustand (einschließlich Kapazität, Spannung und Temperatur) zu einem Wert von 0 bis 100.

  2. OEMs definieren den Schwellenwert für den Start bis zum Hauptbetriebssystem (ein Wert von 0 bis 100). Dieser Wert kann sich bei verschiedenen Gerätemodellen unterscheiden. Weitere Informationen zum Schwellenwert für den Start bei Hauptbetriebssystem und anderen Schwellenwerten finden Sie unter Akkuladung in der Startumgebung.

  3. Die Batterieladeanwendung verwendet den SOC des Treibers und vergleicht ihn mit dem Schwellenwert für start to Main betriebssystem , um zu bestimmen, ob der Startvorgang blockiert werden muss, um in UEFI aufzuladen oder mit dem Start fortzufahren. Es erhält keine weiteren Informationen über den Ladezustand.

  4. Die UEFI-Batterieladeanwendung ruft EFI_BATTERY_CHARGING_PROTOCOL auf. ChargeBattery zum Aufladen des Geräts und wartet, bis ein CompletionEvent mit einem entsprechenden EFI_BATTERY_CHARGING_STATUS zurückgegeben wird.

Weitere Informationen zu diesem Protokoll finden Sie unter UEFI-Akkuladeprotokoll.

UEFI Display Power State Protocol (EFI_DISPLAY_POWER_PROTOCOL)

Während des UEFI-Akkuladevorgangs zeigt die UEFI-Batterieladeanwendung eine wechselnde Benutzeroberfläche mit geringer Leistung an. Nach 10 Sekunden, ohne dass der Netzschalter gedrückt wurde, ruft die Anwendung EFI_DISPLAY_POWER_PROTOCOL auf. SetDisplayPowerState , um den Bildschirm und die Hintergrundbeleuchtung zu deaktivieren. Dies hilft dem Gerät, während der UEFI-Akkuladung weniger Strom zu verbrauchen, was dem Gerät hilft, das Gerät aufzuladen und schneller zum Hauptbetriebssystem zu wechseln. Wenn der Benutzer den Netzschalter drückt, während die Anzeige ausgeschaltet ist, ruft die Anwendung EFI_DISPLAY_POWER_PROTOCOL auf. SetDisplayPowerState erneut, um die Anzeige wieder einzuschalten. Weitere Informationen finden Sie weiter unten in diesem Thema unter Benutzeroberfläche .

Weitere Informationen zu diesem Protokoll finden Sie unter UEFI Display Power State Protocol.

UEFI USB-Funktionsprotokoll (EFI_USBFN_IO_PROTOCOL)

Die UEFI-Batterieladeanwendung basiert ausschließlich auf EFI_USBFN_IO_PROTOCOL. DetectPort , um den Porttyp zu bestimmen, der verbunden ist. Basierend auf dem Porttyp ruft die Anwendung EFI_BATTERY_CHARGING_PROTOCOL auf. ChargeBattery mit entweder 1500 mA oder 500 mA.

Weitere Informationen zu diesem Protokoll finden Sie unter UEFI USB-Funktionsprotokoll.

Anwendungslogik

Im folgenden Diagramm wird das logische Verfahren der UEFI-Batterieladeanwendung beschrieben.

uefi Batterieladelogik.

Die folgenden Hinweise erweitern einige wichtige Abschnitte der Logik:

  • Bevor Sie EFI_BATTERY_CHARGING_PROTOCOL aufrufen. ChargeBattery ruft die Anwendung EFI_USBFN_IO_PROTOCOL auf. DetectPort , um den maximalen Strom zu ermitteln, den das USB-Ladegerät bereitstellen kann:

    • Wenn ein Port vorhanden ist, verwendet die Anwendung 1500 mA für dediziertes Ladegerät oder 500 mA für andere Ports.

    • Wenn kein Port vorhanden ist, verwendet die Anwendung 500 mA. Es wird erwartet, dass ein drahtloses Ladegerät diesen Wert ignoriert.

    • Wenn kein Ladegerät vorhanden ist, verwendet die Anwendung 500 mA. Die Anwendung erwartet jedoch EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery , um eine EFI_BATTERY_CHARGING_COMPLETION_TOKEN mit dem Status EfiBatteryChargingSourceNotDetected zurückzugeben.

  • In allen Fällen muss der OEM sicherstellen, dass das Gerät und das Ladegerät in sicheren Betriebsregionen verbleiben.

  • Wenn im Gerät kein Akku vorhanden ist, aber eine angeschlossene Stromquelle vorhanden ist, ruft die Anwendung EFI_BATTERY_CHARGING_PROTOCOL auf. ChargeBattery zum Laden des Akkus sollte der UEFI-Akkuladetreiber EfiBatteryChargingStatusBatteryNotDetected zurückgeben. Die Anwendung behandelt diesen Fehler, indem eine Fehlerbenutzeroberfläche angezeigt und das Gerät heruntergefahren wird.

  • Die EFI_BATTERY_CHARGING_STATUS Werte werden mit Ausnahme von EfiBatteryChargingStatusSuccess sowohl im Ladeschwellenwert als auch im Power-Off-Lademodus auf die gleiche Weise interpretiert. Weitere Informationen zu diesen Lademodi finden Sie unter Akkuladung in der Startumgebung.

  • Wenn sich das Gerät in einem Lademodus befindet, wird erwartet, dass das Trennen der Stromquelle dazu führt, dass die Firmware die Anwendung mit EfiBatteryChargingSourceNotDetected signalisiert, was dazu führt, dass die Anwendung das Gerät herunterfährt.

  • Wenn die Firmware die Anwendung mit dem Status EfiBatteryChargingStatusOverheat oder EfiBatteryChargingStatusTimeout signalisiert, wird das Gerät 5 Minuten lang aufgeladen (die Anwendung ruft jedoch weiterhin EFI_BATTERY_CHARGING_PROTOCOL auf. GetBatteryInformation oder EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryStatus in Abständen von etwa 1 Sekunde). Nach 5 Minuten wird das Gerät wieder aufgeladen, indem EFI_BATTERY_CHARGING_PROTOCOL aufgerufen wird . ChargeBattery. Während dieser fünf Minuten wird weiterhin erwartet, dass die Firmware das von der Anwendung bereitgestellte Ereignis mit dem entsprechenden EFI_BATTERY_CHARGING_STATUS-Wert signalisiert (z. B. sollte eine Verbindung zwischen der Quelle EfiBatteryChargingSourceNotDetected signalisieren).

  • In beiden Lademodi wird im vorherigen Diagramm eine relevante animierte Benutzeroberfläche mit der Bezeichnung In App bleiben angezeigt.

  • Wenn die Firmware im Power-Off-Lademodus ein Ereignis signalisiert hat und den Status EfiBatteryChargingStatusSuccess bereitstellt, startet die UEFI-Akkuladeanwendung erst dann mit dem Hauptbetriebssystem, wenn der Benutzer den Netzschalter 3 Sekunden lang hält. Wenn die Anwendung jedoch erkennt, dass das USB-Kabel zu diesem Zeitpunkt getrennt wurde, schaltet sie das Gerät aus. Die UEFI-Batterieladeanwendung erwartet, dass der Treiber den Akku im Lademodus zum Ausschalten bei vollem Ladezustand hält.

  • Im Lademodus zum Ausschalten schaltet die UEFI-Batterieladeanwendung das Gerät nicht aus, solange die Firmware keinen Fehler oder ein Erfolgsereignis signalisiert hat.

Fehlerbehandlung

Jedes Mal EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery wird aufgerufen, ein EFI_BATTERY_CHARGING_COMPLETION_TOKEN angegeben. Wenn beim Treiber ein Fehler auftritt, wird das Ereignis im Token mit einer EFI_BATTERY_CHARGING_STATUS signalisiert. Die folgende Tabelle veranschaulicht, wie die UEFI-Batterieladeanwendung in unterschiedlichen Situationen auf die unterschiedlichen Statuswerte reagiert.

Status Ladeschwellenmodus Power-Off-Lademodus (vor und nachdem der Ladezustand den Schwellenwert erreicht hat)
EfiBatteryChargingStatusNoneNone Nicht erwartet/ungültig Nicht erwartet/ungültig
EfiBatteryChargingStatusSuccess Starten des Betriebssystems Bevor der Ladezustand den Schwellenwert erreicht: Fahren Sie im Lademodus zum Ausschalten fort. Nachdem der Ladezustand den Schwellenwert erreicht hat: Bleiben Sie im Energiesparmodus, bis der USB-Anschluss getrennt ist.
EfiBatteryChargingStatusÜberhitzen Anhalten des Ladevorgangs für 5 Minuten und anschließendes Fortsetzen des Ladevorgangs Anhalten des Ladevorgangs für 5 Minuten und anschließendes Fortsetzen des Ladevorgangs
EfiBatteryChargingStatusVoltageOutOfRange Starten des Betriebssystems Starten des Betriebssystems
EfiBatteryChargingStatusCurrentOutOfRange Starten des Betriebssystems Starten des Betriebssystems
EfiBatteryChargingStatusTimeout Anhalten des Ladevorgangs für 5 Minuten und anschließendes Fortsetzen des Ladevorgangs Anhalten des Ladevorgangs für 5 Minuten und anschließendes Fortsetzen des Ladevorgangs
EfiBatteryChargingStatusAborted Anzeigen der Fehleroberfläche für 10 Sekunden und anschließendes Herunterfahren Anzeigen der Fehleroberfläche für 10 Sekunden und anschließendes Herunterfahren
EfiBatteryChargingStatusDeviceError Anzeigen der Fehleroberfläche für 10 Sekunden und anschließendes Herunterfahren Anzeigen der Fehleroberfläche für 10 Sekunden und anschließendes Herunterfahren
EfiBatteryChargingStatusExtremeCold Anzeigen der Fehleroberfläche für 10 Sekunden und anschließendes Herunterfahren Anzeigen der Fehleroberfläche für 10 Sekunden und anschließendes Herunterfahren
EfiBatteryChargingStatusBatteryChargingNotSupported Anzeigen der Fehleroberfläche für 10 Sekunden und anschließendes Herunterfahren Anzeigen der Fehleroberfläche für 10 Sekunden und anschließendes Herunterfahren
EfiBatteryChargingStatusBatteryNotDetected Anzeigen der Fehleroberfläche für 10 Sekunden und anschließendes Herunterfahren Anzeigen der Fehleroberfläche für 10 Sekunden und anschließendes Herunterfahren
EfiBatteryChargingSourceNotDetected Herunterfahren Herunterfahren
EfiBatteryChargingSourceVoltageInvalid Anzeigen der Fehleroberfläche für 10 Sekunden und anschließendes Herunterfahren Anzeigen der Fehleroberfläche für 10 Sekunden und anschließendes Herunterfahren
EfiBatteryChargingSourceCurrentInvalid Anzeigen der Fehleroberfläche für 10 Sekunden und anschließendes Herunterfahren Anzeigen der Fehleroberfläche für 10 Sekunden und anschließendes Herunterfahren
EfiBatteryChargingErrorRequestShutdown Herunterfahren Herunterfahren
EfiBatteryChargingErrorRequestReboot Reboot Reboot

Die folgende Tabelle veranschaulicht, wie die UEFI-Batterieladeanwendung auf die von EFI_BATTERY_CHARGING_PROTOCOL empfangenen Statuswerte reagiert . GetBatteryInformation oder EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryStatus.

Status Ladeschwellenmodus Power-Off-Lademodus (vor und nachdem der Ladezustand den Schwellenwert erreicht hat)
EFI_SUCCESS.
Dieser Wert wird zurückgegeben, wenn keine Fehler erkannt wurden.
Nicht zutreffend Nicht zutreffend
EFI_INVALID_PARAMETER.
Dieser Wert wird zurückgegeben, wenn ein Eingabeparameter falsch ist. Dies sollte in der Produktionsumgebung theoretisch nicht möglich sein.
Anzeigen der Fehleroberfläche für 10 Sekunden und anschließendes Herunterfahren Anzeigen der Fehleroberfläche für 10 Sekunden und anschließendes Herunterfahren
EFI_DEVICE_ERROR oder EFI_NOT_READY.
Diese Fehlerbedingungen werden auf die gleiche Weise behandelt. Diese Werte sollten von EFI_BATTERY_CHARGING_PROTOCOL zurückgegeben werden . GetBatteryInformation oder EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryStatus in Fällen, in denen das Gerät aufgrund eines Gerätefehlers möglicherweise nicht mit dem Hauptbetriebssystem gestartet werden kann. Dies gilt insbesondere für:

EfiBatteryChargingStatusAborted
EfiBatteryChargingStatusDeviceError
EfiBatteryChargingStatusExtremeCold
EfiBatteryChargingStatusBatteryChargingNotSupported
EfiBatteryChargingStatusBatteryNotDetected
EfiBatteryChargingSourceVoltageInvalid
EfiBatteryChargingSourceCurrentInvalid
EfiBatteryChargingErrorRequestShutdown
EfiBatteryChargingErrorRequestReboot.

Das Auslösen EFI_DEVICE_ERROR oder EFI_NOT_READY gefolgt von einem Vervollständigungstoken eines der oben aufgeführten Fehler führt dazu, dass das Gerät schließlich heruntergefahren wird.
Setzen Sie EFI_BATTERY_CHARGING_PROTOCOL fort, und rufen Sie sie auf . ChargeBattery Setzen Sie EFI_BATTERY_CHARGING_PROTOCOL fort, und rufen Sie sie auf . ChargeBattery

Benutzererfahrung

Das folgende Diagramm zeigt, wie die UEFI-Batterieladeanwendung die Benutzeroberfläche auf den Bildschirm zieht, wenn der Akku nicht genügend geladen ist oder sich das Gerät im Ausgeschaltet-Lademodus befindet.

Benutzerfreundlichkeit des Akkuladevorgangs.

In den folgenden Schritten wird beschrieben, wie die Anwendung die Benutzeroberfläche auf den Bildschirm zieht:

  • Die Anwendung löscht den Bildschirm, indem die Hintergrundfüllfarbe auf jedes Pixel im Rahmen geschrieben wird.

  • Die Anwendung zeichnet die wechselnden Bitmaps der Benutzeroberfläche mit niedrigem Akkustand, indem Pixel aus den Bitmappuffern direkt auf die Anzeige kopiert werden. Wenn 10 Sekunden vergehen, ohne dass der Netzschalter gedrückt wird, ruft die Anwendung EFI_DISPLAY_POWER_PROTOCOL auf. SetDisplayPowerState , um den Bildschirm und die Hintergrundbeleuchtung zu deaktivieren. Wenn der Benutzer den Netzschalter drückt, EFI_DISPLAY_POWER_PROTOCOL. SetDisplayPowerState wird aufgerufen, um die Anzeige wieder einzuschalten.

  • Wenn die Anwendung Fehler vom Treiber empfängt, löscht die Anwendung den Bildschirm, indem sie die Hintergrundfüllfarbe in jedes Pixel im Framepuffer schreibt, und dann zeichnet die Anwendung den Akkufehlerbildschirm, indem sie Pixel aus dem entsprechenden Bitmappuffer direkt auf den Bildschirm kopiert.