Condividi tramite


Architettura dell'applicazione di ricarica della batteria UEFI fornita da Microsoft

Questo argomento fornisce informazioni sulla progettazione dell'applicazione di ricarica della batteria UEFI fornita da Microsoft per i dispositivi che eseguono Windows 10 Mobile. Le macchine virtuali possono usare l'applicazione di ricarica della batteria da Microsoft oppure possono implementare la propria applicazione di ricarica. Le macchine virtuali che implementano la propria applicazione di ricarica della batteria UEFI possono usare le informazioni contenute in questo argomento come linee guida per la loro progettazione.

L'applicazione di ricarica della batteria UEFI è una delle prime applicazioni di proprietà Microsoft eseguite durante il processo di avvio. L'applicazione di ricarica della batteria UEFI ha le seguenti responsabilità principali:

  • Assicurarsi che il dispositivo disponga di una potenza sufficiente per l'avvio.

  • Fornire supporto per la ricarica di alimentazione se abilitato dall'OEM. Per altre informazioni sulla ricarica di alimentazione, vedere Ricarica della batteria nell'ambiente di avvio.

L'applicazione di ricarica della batteria UEFI usa protocolli UEFI chiave e reagisce a vari stati restituiti dai driver correlati.

Il termine applicazione di ricarica della batteria UEFI in questo argomento fa riferimento alla libreria di ricarica della batteria UEFI caricata da mobilestartup.efi. Per altre informazioni su mobilestartup.efi, vedere Avvio e UEFI.

Protocolli UEFI usati dall'applicazione di ricarica della batteria UEFI

L'applicazione di ricarica della batteria UEFI (di proprietà di Microsoft) usa i protocolli (implementati dagli OEM) illustrati nelle sezioni seguenti.

Protocollo di ricarica della batteria UEFI (EFI_BATTERY_CHARGING_PROTOCOL)

I passaggi seguenti descrivono gli aspetti principali del modo in cui l'applicazione di ricarica della batteria UEFI usa il protocollo di ricarica della batteria UEFI:

  1. L'applicazione di ricarica della batteria UEFI esegue il polling dello stato in tempo reale dell'hardware della batteria usando EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryInformation (nei dispositivi che supportano la versione 0x00010002 dell'EFI_BATTERY_CHARGING_PROTOCOL) o EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryStatus (nei dispositivi che supportano la versione 0x00010001 dell'EFI_BATTERY_CHARGING_PROTOCOL). È importante che queste funzioni restituiscono un valore di addebito (SOC) accurato ogni volta che possibile. SOC è un mapping definito dall'OEM dalla quantità di carica nella batteria in base al relativo stato (inclusa capacità, tensione e temperatura) a un valore compreso tra 0 e 100.

  2. Le macchine virtuali definiscono la soglia del sistema operativo principale (valore compreso tra 0 e 100). Questo valore può essere diverso per diversi modelli di dispositivo. Per altre informazioni sulla soglia del sistema operativo principale e altri valori soglia, vedere Ricarica della batteria nell'ambiente di avvio.

  3. L'applicazione di ricarica della batteria usa il soC dal driver e lo confronta con il valore soglia del sistema operativo principale per determinare se deve bloccare il processo di avvio per caricare in UEFI o continuare con l'avvio. Non riceve altre informazioni sullo stato dell'addebito.

  4. L'applicazione di ricarica della batteria UEFI chiama EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery per caricare il dispositivo e attende che venga restituito un oggetto CompletionEvent con un EFI_BATTERY_CHARGING_STATUS corrispondente.

Per altre informazioni su questo protocollo, vedere Protocollo di ricarica della batteria UEFI.

UEFI display power state protocol (EFI_DISPLAY_POWER_PROTOCOL)

Durante il processo di ricarica della batteria UEFI, l'applicazione di ricarica della batteria UEFI visualizza un'interfaccia utente a bassa potenza alternata. Dopo 10 secondi senza premere il pulsante di alimentazione, l'applicazione chiama EFI_DISPLAY_POWER_PROTOCOL. SetDisplayPowerState per disattivare la visualizzazione e la luce posteriore. Ciò consente al dispositivo di usare meno energia durante la ricarica della batteria UEFI, che aiuta la carica del dispositivo e procedere più rapidamente al sistema operativo principale. Se l'utente preme il pulsante di alimentazione mentre lo schermo è disattivato, l'applicazione chiama EFI_DISPLAY_POWER_PROTOCOL. ImpostareDisplayPowerState di nuovo per riattivare la visualizzazione. Per altre informazioni, vedere Esperienza utente più avanti in questo argomento.

Per altre informazioni su questo protocollo, vedere UEFI display power state protocol.

Protocollo di funzione USB UEFI (EFI_USBFN_IO_PROTOCOL)

L'applicazione di ricarica della batteria UEFI si basa esclusivamente su EFI_USBFN_IO_PROTOCOL. DetectPort per determinare il tipo di porta connessa. In base al tipo di porta, l'applicazione chiama EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery con 1500 mA o 500 mA.

Per altre informazioni su questo protocollo, vedere Protocollo di funzione USB UEFI.

Logica dell'applicazione

Il diagramma seguente descrive la procedura logica dell'applicazione di ricarica della batteria UEFI.

logica di ricarica della batteria uefi.

Le note seguenti si espandono su alcune sezioni chiave della logica:

  • Prima di chiamare EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery, l'applicazione chiama EFI_USBFN_IO_PROTOCOL. DetectPort per determinare la corrente massima che il caricatore USB può fornire:

    • Se è presente una porta, l'applicazione usa 1500 mA per il caricatore a muro dedicato o 500 mA per altre porte.

    • Se non è presente alcuna porta, l'applicazione usa 500 mA. È previsto che un caricatore wireless ignora questo valore.

    • Se non è presente alcun caricatore, l'applicazione usa 500 mA. Tuttavia, l'applicazione prevede EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery per restituire un EFI_BATTERY_CHARGING_COMPLETION_TOKEN con lo stato di EfiBatteryChargingSourceNotDetected.

  • In tutti i casi, l'OEM deve assicurarsi che il dispositivo e il caricatore rimangano all'interno di aree operative sicure.

  • Se nel dispositivo non è presente alcuna batteria, ma c'è una fonte di alimentazione connessa, quando l'applicazione chiama EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery per caricare la batteria, il driver di ricarica della batteria UEFI dovrebbe restituire EfiBatteryChargingStatusBatteryNotDetected. L'applicazione gestisce questo errore visualizzando un'interfaccia utente di errore e arrestando il dispositivo.

  • I valori di EFI_BATTERY_CHARGING_STATUS vengono interpretati nello stesso modo sia nelle modalità di ricarica soglia che di alimentazione disattivata, ad eccezione di EfiBatteryChargingStatusSuccess. Per altre informazioni su queste modalità di ricarica, vedere Ricarica della batteria nell'ambiente di avvio.

  • Quando il dispositivo si trova in modalità di ricarica, la disconnessione dell'alimentazione dovrebbe comportare l'arresto del firmware dell'applicazione con EfiBatteryChargingSourceNotDetected, che comporta l'arresto dell'applicazione.

  • Se il firmware segnala all'applicazione uno stato di EfiBatteryChargingStatusOverheat o EfiBatteryChargingStatusTimeout, il dispositivo sospende l'addebito per 5 minuti (ma l'applicazione chiama ancora EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryInformation o EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryStatus a circa 1 secondo intervallo. Dopo 5 minuti, il dispositivo riprende la ricarica chiamando EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery. Durante questi 5 minuti, il firmware deve comunque segnalare l'evento fornito dall'applicazione con il valore EFI_BATTERY_CHARGING_STATUS appropriato(ad esempio, una disconnessione di origine dovrebbe segnalare EfiBatteryChargingSourceNotDetected).

  • In entrambe le modalità di ricarica, verrà visualizzata un'interfaccia utente animata pertinente durante la casella etichettata Soggiorno nell'app nel diagramma precedente.

  • In modalità di ricarica di alimentazione, se il firmware ha segnalato un evento e fornisce uno stato di EfiBatteryChargingStatusSuccess, l'applicazione di ricarica della batteria UEFI non viene avviata al sistema operativo principale finché l'utente non tiene il pulsante di alimentazione per 3 secondi. Tuttavia, se l'applicazione rileva che il cavo USB è stato disconnesso in questo momento, il dispositivo verrà disattivato. L'applicazione di ricarica della batteria UEFI prevede che il driver mantiene la batteria a pieno in modalità di ricarica inattiva.

  • In modalità di ricarica in alimentazione, purché il firmware non abbia segnalato un errore o un evento di successo, l'applicazione di ricarica della batteria UEFI non attiva il dispositivo.

Gestione degli errori

Ogni volta che EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery viene chiamato, viene specificato un EFI_BATTERY_CHARGING_COMPLETION_TOKEN . Se il driver ha generato un errore, l'evento nel token viene segnalato con un EFI_BATTERY_CHARGING_STATUS. Nella tabella seguente viene illustrato come l'applicazione di ricarica della batteria UEFI reagisce ai diversi valori di stato in situazioni diverse.

Stato Modalità di ricarica soglia Modalità di ricarica disattivata (prima e dopo che lo stato di carica raggiunge la soglia)
EfiBatteryChargingStatusNoneNone Non previsto/non valido Non previsto/non valido
EfiBatteryChargingStatusSuccess Avviare il sistema operativo Prima che lo stato dell'addebito raggiunga la soglia: Continuare in modalità di ricarica in modalità di alimentazione disattivata. Dopo che lo stato di addebito raggiunge la soglia: Rimanere in modalità di ricarica in modalità di alimentazione fino a quando USB non viene disconnesso.
EfiBatteryChargingStatusOverheat Sospendere la ricarica per 5 minuti e quindi riprendere la ricarica Sospendere la ricarica per 5 minuti e quindi riprendere la ricarica
EfiBatteryChargingStatusVoltageOutOfRange Avviare il sistema operativo Avviare il sistema operativo
EfiBatteryChargingStatusCurrentOutOfRange Avviare il sistema operativo Avviare il sistema operativo
EfiBatteryChargingStatusTimeout Sospendere la ricarica per 5 minuti e quindi riprendere la ricarica Sospendere la ricarica per 5 minuti e quindi riprendere la ricarica
EfiBatteryChargingStatusAborted Visualizzare l'interfaccia utente degli errori per 10 secondi e quindi arrestare Visualizzare l'interfaccia utente degli errori per 10 secondi e quindi arrestare
EfiBatteryChargingStatusDeviceError Visualizzare l'interfaccia utente degli errori per 10 secondi e quindi arrestare Visualizzare l'interfaccia utente degli errori per 10 secondi e quindi arrestare
EfiBatteryChargingStatusMaxCold Visualizzare l'interfaccia utente degli errori per 10 secondi e quindi arrestare Visualizzare l'interfaccia utente degli errori per 10 secondi e quindi arrestare
EfiBatteryChargingStatusBatteryChargingNotSupported Visualizzare l'interfaccia utente degli errori per 10 secondi e quindi arrestare Visualizzare l'interfaccia utente dell'errore per 10 secondi e quindi arrestare
EfiBatteryChargingStatusBatteryNotDetected Visualizzare l'interfaccia utente dell'errore per 10 secondi e quindi arrestare Visualizzare l'interfaccia utente dell'errore per 10 secondi e quindi arrestare
EfiBatteryChargingSourceNotDetected Arresta Arresta
EfiBatteryChargingSourceVoltageInvalid Visualizzare l'interfaccia utente dell'errore per 10 secondi e quindi arrestare Visualizzare l'interfaccia utente dell'errore per 10 secondi e quindi arrestare
EfiBatteryChargingSourceCurrentInvalid Visualizzare l'interfaccia utente dell'errore per 10 secondi e quindi arrestare Visualizzare l'interfaccia utente dell'errore per 10 secondi e quindi arrestare
EfiBatteryChargingErrorRequestShutdown Arresta Arresta
EfiBatteryChargingErrorRequestReboot Riavvio Riavvio

La tabella seguente illustra come l'applicazione di ricarica della batteria UEFI reagisce ai valori di stato ricevuti da EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryInformation o EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryStatus.

Stato Modalità di ricarica soglia Modalità di ricarica spenta (prima e dopo che lo stato della carica raggiunge la soglia)
EFI_SUCCESS.
Questo valore viene restituito quando non sono stati rilevati errori.
Non applicabile Non applicabile
EFI_INVALID_PARAMETER.
Questo valore viene restituito quando un parametro di input non è corretto. Ciò non dovrebbe essere teoricamente possibile nell'ambiente di produzione.
Visualizzare l'interfaccia utente dell'errore per 10 secondi e quindi arrestare Visualizzare l'interfaccia utente dell'errore per 10 secondi e quindi arrestare
EFI_DEVICE_ERROR o EFI_NOT_READY.
Queste condizioni di errore vengono gestite nello stesso modo. Questi valori devono essere restituiti da EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryInformation o EFI_BATTERY_CHARGING_PROTOCOL. GetBatteryStatus nei casi in cui il dispositivo potrebbe non essere in grado di avviare il sistema operativo principale a causa di un errore del dispositivo. In particolare:

EfiBatteryChargingStatusAborted
EfiBatteryChargingStatusDeviceError
EfiBatteryChargingStatus SkuCold
EfiBatteryChargingStatusBatteryChargingNotSupported
EfiBatteryChargingStatusBatteryNotDetected
EfiBatteryChargingSourceVoltageInvalid
EfiBatteryChargingSourceCurrentInvalid
EfiBatteryChargingErrorRequestShutdown
EfiBatteryChargingErrorRequestReboot.

La generazione di EFI_DEVICE_ERROR o EFI_NOT_READY seguita da un token di completamento di uno degli errori elencati in precedenza causerà l'arresto del dispositivo.
Riprendere e chiamare EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery Riprendere e chiamare EFI_BATTERY_CHARGING_PROTOCOL. ChargeBattery

Esperienza utente

Il diagramma seguente mostra come l'applicazione di ricarica della batteria UEFI disegna l'interfaccia utente sullo schermo se non è disponibile una carica sufficiente nella batteria o se il dispositivo è in modalità di ricarica spenta.

esperienza utente di ricarica della batteria.

I passaggi seguenti descrivono come l'applicazione disegna l'interfaccia utente sullo schermo:

  • L'applicazione cancella lo schermo scrivendo il colore di riempimento dello sfondo in ogni pixel nel frame.

  • L'applicazione disegna le bitmap dell'interfaccia utente a batteria bassa alternando pixel copiando i pixel dai buffer bitmap direttamente alla visualizzazione. Se passano 10 secondi senza premere il pulsante di alimentazione, l'applicazione chiama EFI_DISPLAY_POWER_PROTOCOL. ImpostareDisplayPowerState per disattivare la visualizzazione e il backlight. Se l'utente preme il pulsante di alimentazione, EFI_DISPLAY_POWER_PROTOCOL. SetDisplayPowerState viene chiamato per riattivare la visualizzazione.

  • Quando l'applicazione riceve errori dal driver, l'applicazione cancella lo schermo scrivendo il colore di riempimento dello sfondo in ogni pixel nel buffer dei fotogrammi e quindi l'applicazione disegna la schermata di errore della batteria copiando i pixel dal buffer bitmap appropriato direttamente alla visualizzazione.