Android 9 include android.hardware.health
HAL 2.0,
un upgrade della versione principale da health@1.0 HAL. Questo nuovo HAL ha quanto segue
vantaggi:
- Separazione più chiara tra framework e codice del fornitore.
- Ritira il daemon
healthd
non necessario. - Maggiore libertà per la personalizzazione dei fornitori nelle informazioni sanitarie report.
- Più informazioni sullo stato del dispositivo oltre alla batteria.
Android 11 include android.hardware.health
HAL 2.1,
un upgrade della versione secondaria da health@2.0 HAL. Questo nuovo HAL ha quanto segue
vantaggi:
- Maggiore facilità di implementazione
- Migliore conformità con le API 2.0 HAL esistenti
- Migliore separazione degli alti nel codice di ricarica in modalità off
- Migliore supporto del framework per indicare l'integrità della batteria del dispositivo
Android 13 include android.hardware.health
AIDL HAL,
una conversione da health@2.1 HAL. Questo nuovo HAL ha quanto segue
vantaggi:
- Rimuovi le API relative al caricabatterie inutilizzate
- Rimuovi l'entità
StorageAttribute
inutilizzata e i campi correlati - Supporta la ricarica della base.
Requisiti
Dispositivi con Android 9 e Android 10
I dispositivi che vengono lanciati con Android 9 devono fornire la versione 2.x HAL (e non deve fornire l'HAL 1.0) o l'AIDL HAL. Dispositivi non avviati con Android 9 ma ho intenzione di aggiornare l'immagine del fornitore a Target Framework Compatibility Matrix versione 3 (rilasciata in Android 9) devono rimuovere le implementazioni 1.0 HAL esistenti e l'HAL 2.x o l'AIDL HAL.
AOSP include diverse librerie helper progettate per aiutarti a implementare la versione 2.0 HAL e la transizione dal precedente 1.0 HAL.
Dispositivi con Android 11 e Android 12
I dispositivi che vengono lanciati con Android 11 devono fornire la versione 2.1 HAL (e non deve fornire l'HAL 1.0 o 2.0) o l'AIDL HAL. Dispositivi non verrà lanciato con Android 11, ma abbiamo intenzione di aggiornare dell'immagine del fornitore in Target Framework Compatibility Matrix versione 5 (rilasciata in Android 11) deve rimuovere l'HAL 2.0 esistente implementazioni e fornire l'HAL 2.1 o l'AIDL HAL. Dispositivi non avviati con Android 11 e non ho intenzione di aggiornare il fornitore si consiglia di fornire anche l'HAL 2.1.
AOSP include diverse librerie helper progettate per aiutarti a implementare la versione 2.1 HAL e la transizione dal precedente 1.0 HAL.
Dispositivi con Android 13 e versioni successive
I dispositivi che vengono lanciati con Android 13 devono fornire l'AIDL HAL (e non deve fornire l'HAL HIDL). Dispositivi che non verranno lanciati con Android 13, ma hanno in programma di aggiornare l'immagine del fornitore a Target Framework Compatibility Matrix versione 7 (rilasciata in Android 13) deve rimuovere le implementazioni HIDL HAL esistenti e fornire l'AIDL HAL. Anche i dispositivi che non vengono lanciati con Android 13 e non prevedono di aggiornare l'immagine del fornitore per fornire l'AIDL HAL.
I dispositivi non devono fornire lo standard HIDL 1.0 HAL.
AOSP include diverse librerie helper progettate per aiutarti a implementare il AIDL HAL e la transizione dai vecchi HAL HIDL.
Terminologia
- health@1.0: abbreviazione di
android.hardware.health@1.0
. Si riferisce a Health HIDL HAL versione 1.0 rilasciata su Android 8.0. - health@2.0: abbreviazione di
android.hardware.health@2.0
. Si riferisce a Health HIDL HAL versione 2.0 rilasciata su Android 9. - health@2.1: abbreviazione di
android.hardware.health@2.1
. Si riferisce a Health HIDL HAL versione 2.1 rilasciata su Android 11. - health AIDL HAL: abbreviazione di
android.hardware.health
.- La versione 1 viene rilasciata in Android 13.
- charger: eseguibile in esecuzione in modalità di ricarica non attiva che mostra l'animazione di ricarica dello smartphone.
- Recovery: eseguibile in esecuzione in modalità di ripristino che deve recuperare la batteria. informazioni.
- healthd: il daemon precedente in esecuzione su Android che recupera i problemi relativi alla salute. informazioni e le fornisce come framework.
- storaged: daemon in esecuzione su Android che recupera le informazioni sullo spazio di archiviazione e le fornisce come framework.
Salute in Android 8.x
In Android 8.x, il componente relativo alla salute funziona come descritto nel seguente diagramma:
Figura 1. Salute in Android 8.x.
In questo diagramma:
- Il framework utilizza una (1) chiamata a binder e una (1) chiamata hwbinder comunicare con l'hardware.
healthd
si collega in modo statico alibhealthd_android
,libbatterymonitor
elibbatteryservice
.- health@1.0-impl collega staticamente a
libhealthd.BOARD
.
Ogni bacheca può personalizzare un libhealthd.BOARD
diverso;
si determina in fase di compilazione quale caricabatterie, health@1.0-impl e link di ripristino
a.
Per altre modalità:
Figura 2. Salute in Android 8.x, ricarica off-mode e Recovery mode.
- il caricabatterie si collega in modo statico a
libhealthd.BOARD
,libhealthd_charger
elibbatterymonitor
. - il ripristino si collega in modo statico a
libhealthd.BOARD
elibbatterymonitor
.
Salute in Android 9
In Android 9, il componente relativo alla salute funziona come descritto in dettaglio nel seguente diagramma:
Figura 3. Salute in Android 9.
Il framework tenta di recuperare il servizio health@2.0 da hwservicemanager
.
Se non funziona, chiama health@1.0 (in Android 8.x). Il percorso del codice precedente è
mantenuta in modo che l'immagine di sistema Android 9 sia compatibile
l'immagine del fornitore Android 8.x. Il framework non recupera informazioni da
su entrambi gli HAL perché nel dispositivo può esistere una sola versione del servizio (1.0 o 2.0).
Per altre modalità:
Figura 4. Salute in Android 9, ricarica off-mode e Recovery mode.
Salute in Android 11
In Android 11, il componente relativo alla salute funziona come descritto in dettaglio. nel seguente diagramma:
[system]
| getService()
V
[health@2.1-service]
| getService(stub=true)
V
[ health@2.0-impl-2.1-<device>.so ]
| | (device-dependent linkage)
V V
+---------Helper libs for impl--------+ [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl) ] |
| [libbatterymonitor (battery) ] |
+-------------------------------------+
Se l'implementazione dell'integrità 2.1 non esiste, il sistema utilizza percorso del codice precedente come descritto nelle sezioni precedenti
Per altre modalità:
[ charger ]
| getService() | (legacy code path)
V +-------------------------------------------------+
[health@2.1-service] |
| getService(stub=true) |
V |
[ health@2.0-impl-2.1-<device>.so ] |
| | (device-dependent linkage) |
V V |
+---------Helper libs for impl--------+ [libhealthd.device] |
| [libhealthloop (uevent, wakealarm)] | |
| [libhealth2impl (IHealth impl) ] | <---------------------------------+
| [libbatterymonitor (battery) ] |
+-------------------------------------+
[recovery]
| getService() w/o hwservicemanager
V
[ health@2.0-impl-2.1-<device>.so ]
| | (device-dependent linkage)
V V
+---------Helper libs for impl--------+ [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl) ] |
| [libbatterymonitor (battery) ] |
+-------------------------------------+
Vedi il seguente diagramma semplificato per le diverse modalità:
Figura 5. Infrastruttura HAL 2.1 per l'integrità.
Salute in Android 13
In Android 13 viene introdotto l'HAL AIDL per la salute. La componente di salute funziona come descritto nel diagramma seguente:
Figura 6. Infrastruttura HAL AIDL per l'integrità.
Interfaccia HIDL HAL 2.0
L'HAL health@2.0 fornisce al framework le stesse funzionalità del vecchio integro. Fornisce inoltre API simili precedentemente fornito come servizio di legatura (ovvero IBatteryPropertiesRegistrar.
L'interfaccia principale, IHealth , fornisce le seguenti funzioni:
registerCallback
, da sostituireIBatteryPropertiesRegistrar.registerListener
unregisterCallback
, da sostituireIBatteryPropertiesRegistrar.unregisterListener
update
, per sostituireIBatteryPropertiesRegistrar.scheduleUpdate
- I valori
IBatteryPropertiesRegistrar.getProperties
sono sostituiti dai seguenti:getChargeCounter
getCurrentNow
getCurrentAverage
getCapacity
getEnergyCounter
getChargeStatus
getHealthInfo
Inoltre, IHealth
fornisce le seguenti nuove API per storaged
per
recuperare informazioni relative allo spazio di archiviazione specifiche del fornitore:
getStorageInfo
getDiskStats
Viene restituito un nuovo struct, @2.0::HealthInfo
, tramite callback e getHealthInfo
.
Questo struct contiene tutte le informazioni sullo stato dei dispositivi disponibili tramite health@2.0
HAL, tra cui:
- Informazioni sulla ricarica (ca/USB/wireless, corrente, tensione, ecc.)
- Informazioni sulla batteria (presenza, livello della batteria, corrente, tensione, carica, tecnologia e così via)
- Informazioni sull'archiviazione (informazioni sul dispositivo di archiviazione, statistiche sul disco)
Per informazioni sull'implementazione del servizio Health 2.0, vedi Implementazione dell'integrità 2.0.
Interfaccia HIDL HAL 2.1
L'HAL health@2.1 supporta la ricarica in modalità off e fornisce maggiori informazioni sulla batteria.
L'interfaccia principale, IHealth, fornisce le seguenti funzioni aggiuntive
getHealthConfig
: per recuperare la configurazione di questo HALgetHealthInfo_2_1
: upgrade di una versione secondaria agetHealthInfo
shouldKeepScreenOn
: per stabilire se lo schermo deve rimanere acceso modalità caricabatterie
Inoltre, l'implementazione di @2.1::IHealth
è necessaria per supportare
@2.1::IHealthInfoCallback
per i relativi registerCallback
ereditati e
Funzioni di unregisterCallback
. La nuova interfaccia di callback restituisce l'integrità
al client utilizzando la sua funzione healthInfoChanged_2_1
anziché
la funzione healthInfoChanged
ereditata.
Viene restituito un nuovo struct, @2.1::HealthInfo
, tramite callback e
getHealthInfo_2_1
. Questo struct contiene informazioni aggiuntive sullo stato dei dispositivi
disponibile tramite health@2.0 HAL, tra cui:
- Livello della capacità della batteria
- Tempo di ricarica della batteria completamente ora (in secondi)
- Capacità di progetto di ricarica completa della batteria (in μAh)
Vedi il seguente diagramma UML per le classi utili per l'implementazione dell'HAL dell'integrità:
Figura 7. Diagramma UML HAL 2.1 per l'integrità.
Per informazioni sull'implementazione del servizio Health 2.1, vedi Implementazione dell'integrità 2.1.
Interfaccia AIDL HAL versione 1
Modifiche all'API
AIDL versione 1 HAL supporta API simili a HIDL 2.1 HAL. Rispetto a dell'interfaccia HIDL 2.1, nell'API sono state apportate le seguenti modifiche:
- Le API relative al caricabatterie introdotte in HIDL HAL 2.1 non vengono trasferite nell'AIDL
HAL Poiché la funzionalità di ricarica fuori modalità è disponibile solo
/vendor
, le API nell'interfaccia del fornitore non sono necessarie. A implementa correttamente la ricarica in modalità off, vedi caricatore di seguito. - Il tipo
StorageAttribute
e i campi correlati vengono rimossi perché sono inutilizzati. chargerDockOnline
aggiunto aHealthInfo
per supportare la ricarica del dock.
Implementazione
Vedi il seguente diagramma UML per le classi utili per l'implementazione dell'HAL dell'integrità:
Figura 8. Diagramma UML di Health AIDL HAL.
Per informazioni sull'implementazione del servizio Health AIDL, vedi Implementazione di Health AIDL HAL.
Ripristino
Android 13 supporta binder nel ripristino. L'installazione del Health AIDL per il ripristino ne consente l'esecuzione in modalità di ripristino.
Per informazioni sull'installazione del servizio Health AIDL per il ripristino, consulta seguenti:
Caricabatterie
La funzionalità di ricarica fuori modalità è stata spostata da /system
a /vendor
. Per
dispositivi che vengono lanciati con Android 13, se supportano
in modalità off, il file binario del servizio HAL deve supportare la modalità caricabatterie. Per farlo,
consulta le
implementando il caricabatterie.
Proprietà del sistema di ricarica
Le proprietà ro.charger.*
non sono più leggibili dal file binario charger
in
/vendor
. Se sul dispositivo è impostata una delle proprietà di sistema ro.charger.*
:
consulta le
proprietà di sistema del caricabatterie.