Salute Android

Android 9 include android.hardware.health HAL 2.0, un importante aggiornamento versione dal health@1.0 HAL. Questo nuovo HAL presenta i seguenti vantaggi:

  • Separazione più netta tra framework e codice fornitore.
  • Depreca l'inutile healthd daemon.
  • Maggiori gradi di libertà per la personalizzazione del fornitore nei report di informazioni sanitarie.
  • Più informazioni sulla salute del dispositivo rispetto alla semplice batteria.

Android include 11 android.hardware.health HAL 2.1, un aggiornamento di versione minore da health@2.0 HAL. Questo nuovo HAL presenta i seguenti vantaggi:

  • Più facile da implementare
  • Migliore conformità con le API HAL 2.0 esistenti
  • Migliore separazione degli alti nel codice di ricarica in modalità off
  • Migliore supporto per il framework per indicare lo stato della batteria del dispositivo

Requisiti

I dispositivi che si avviano con Android 9 devono fornire l'HAL 2.0 (e non devono fornire l'HAL 1.0). I dispositivi che non si avviano con Android 9 ma prevedono di aggiornare l'immagine del fornitore alla matrice di compatibilità del framework di destinazione versione 3 (rilasciata in Android 9) devono rimuovere le implementazioni HAL 1.0 esistenti e fornire l'HAL 2.0.

I dispositivi che si avviano con Android 11 devono fornire l'HAL 2.1 (e non devono fornire l'HAL 1.0 o 2.0). I dispositivi che non si avviano con Android 11 ma prevedono di aggiornare l'immagine del fornitore alla matrice di compatibilità del framework di destinazione versione 5 (rilasciata in Android 11) devono rimuovere le implementazioni HAL 2.0 esistenti e fornire l'HAL 2.1. Si consiglia anche ai dispositivi che non si avviano con Android 11 e che non prevedono di aggiornare l'immagine del fornitore di fornire l'HAL 2.1.

AOSP include più librerie di supporto progettate per aiutarti a implementare l'HAL 2.1 e la transizione dal vecchio HAL 1.0.

Terminologia

  • health@1.0: abbreviazione di android.hardware.health@1.0 . Si riferisce alla salute HIDL HAL versione 1.0 rilasciata in Android 8.0.
  • health@2.0: abbreviazione di android.hardware.health@2.0 . Si riferisce alla salute HIDL HAL versione 2.0 rilasciata in Android 9.
  • health@2.1: abbreviazione di android.hardware.health@2.1 . Si riferisce alla salute HIDL HAL versione 2.1 rilasciata in Android 11.
  • caricatore: corsa eseguibile in modo spento carica che visualizza l'animazione telefono ricarica.
  • recupero: in esecuzione eseguibile in modalità di ripristino che devono recuperare le informazioni sulla batteria.
  • healthd: eredità daemon in esecuzione in Android che recupera le informazioni relative alla salute e fornisce al quadro.
  • storaged: daemon in esecuzione in Android che le informazioni recupera lo stoccaggio e fornisce al quadro.

Salute in Android 8.x

In Android 8.x, il componente integrità funziona come illustrato nel diagramma seguente:

Salute in Android 8.x

Figura 1. Salute in Android 8.x

In questo diagramma:

  • Una (1) chiamata binder e una (1) chiamata hwbinder vengono utilizzate dal framework per comunicare con l'hardware.
  • healthd collega in modo statico al libhealthd_android , libbatterymonitor e libbatteryservice .
  • health@1.0-impl collega in modo statico a libhealthd. BOARD .

Ogni scheda può personalizzare un diverso libhealthd. BOARD ; viene determinato in fase di compilazione a quale collegamento caricatore, salute@1.0-impl e ripristino.

Per altre modalità:

Modalità di ricarica e ripristino off-mode in Android 8.x

Figura 2. Salute in Android 8.x, off-modalità di ricarica e modalità di recupero

  • caricabatterie collega in modo statico a libhealthd. BOARD , libhealthd_charger e libbatterymonitor .
  • recupero collega in modo statico a libhealthd. BOARD e libbatterymonitor .

Salute in Android 9

In Android 9, il componente salute funziona come illustrato nel diagramma seguente:Salute in Android 9

Figura 3. Salute in Android 9

I tentativi di recuperare quadro servizio health@2.0 da hwservicemanager . Se fallisce, chiama health@1.0 (in Android 8.x). Il percorso del codice legacy viene mantenuto in modo che l'immagine del sistema Android 9 sia compatibile con l'immagine del fornitore Android 8.x. Il framework non recupera le informazioni da entrambi gli HAL perché nel dispositivo può esistere solo una versione del servizio (1.0 o 2.0).

Per altre modalità:

Ricarica e ripristino in modalità off in Android 9

Figura 4. Salute in Android 9, off-modo di carico e modalità di recupero

Salute in Android 11

In Android 11, il componente salute funziona come illustrato nel diagramma seguente:

[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 ritorna al percorso del codice legacy 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)      ] |
+-------------------------------------+

Interfaccia HAL 2.0

L'HAL health@2.0 fornisce al framework le stesse funzionalità del vecchio daemon healthd. Inoltre fornisce API che sono simili a quanto healthd precedentemente fornite come servizio legante (cioè IBatteryPropertiesRegistrar ).

L'interfaccia principale, iHealth , fornisce le seguenti funzioni:

  • registerCallback , per sostituire IBatteryPropertiesRegistrar.registerListener
  • unregisterCallback , per sostituire IBatteryPropertiesRegistrar.unregisterListener
  • update , sostituire IBatteryPropertiesRegistrar.scheduleUpdate
  • IBatteryPropertiesRegistrar.getProperties sono sostituiti dai seguenti:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

Inoltre, IHealth fornisce le seguenti nuove API per storaged per recuperare le informazioni di storage vendor-specifico relativo:

  • getStorageInfo
  • getDiskStats

Una nuova struct, @2.0::HealthInfo , viene restituito tramite callback e getHealthInfo . Questa struttura contiene tutte le informazioni sull'integrità del dispositivo disponibili tramite health@2.0 HAL, tra cui:

  • Informazioni sulla ricarica (AC/USB/wireless, corrente, tensione, ecc.)
  • Informazioni sulla batteria (presenza, livello della batteria, corrente, tensione, carica, tecnologia, ecc.)
  • Informazioni di archiviazione (informazioni sul dispositivo di archiviazione, statistiche del disco)

Interfaccia HAL 2.1

L'HAL health@2.1 supporta la ricarica in modalità off e fornisce ulteriori informazioni sulla batteria.

L'interfaccia principale, iHealth , fornisce le seguenti funzioni aggiuntive

  • getHealthConfig : per recuperare la configurazione di questo HAL
  • getHealthInfo_2_1 : un aggiornamento di versione minore a getHealthInfo
  • shouldKeepScreenOn : per determinare se lo schermo deve essere tenuto in modalità caricabatteria

Inoltre, l'implementazione di @2.1::IHealth è necessario per il supporto @2.1::IHealthInfoCallback per le sue ereditati registerCallback e unregisterCallback funzioni. La nuova interfaccia di callback restituisce informazioni sulla salute di salute al client utilizzando la sua healthInfoChanged_2_1 funzione invece della ereditato healthInfoChanged funzioni.

Una nuova struct, @2.1::HealthInfo , viene restituito tramite callback e getHealthInfo_2_1 . Questa struttura contiene ulteriori informazioni sullo stato del dispositivo disponibili tramite health@2.0 HAL, tra cui:

  • Livello di capacità della batteria
  • Tempo di carica della batteria completamente ora (in secondi)
  • Capacità di progettazione della batteria a carica completa (in μAh)

Per informazioni sull'implementazione del servizio sanitario, vedere Implementazione di salute .