O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Android Health

Android 9 inclui android.hardware.health HAL 2.0, uma atualização de versão principal de health@1.0 HAL. Este novo HAL tem as seguintes vantagens:

  • Separação mais limpa entre a estrutura e o código do fornecedor.
  • Despreza o desnecessário healthd daemon.
  • Maior grau de liberdade para personalização do fornecedor em relatórios de informações de saúde.
  • Mais informações sobre a saúde do dispositivo do que apenas bateria.

Android 11 inclui android.hardware.health HAL 2.1, uma atualização de versão menor da health@2.0 HAL. Este novo HAL tem as seguintes vantagens:

  • Mais fácil de implementar
  • Melhor conformidade com APIs HAL 2.0 existentes
  • Melhor separação de agudos no código de cobrança em modo desligado
  • Melhor suporte para a estrutura para indicar a integridade da bateria do dispositivo

Requisitos

Os dispositivos lançados com o Android 9 devem fornecer o HAL 2.0 (e não devem fornecer o HAL 1.0). Os dispositivos que não iniciam com o Android 9, mas planejam atualizar a imagem do fornecedor para Target Framework Compatibility Matrix versão 3 (lançada no Android 9), devem remover as implementações 1.0 HAL existentes e fornecer 2.0 HAL.

Os dispositivos lançados com o Android 11 devem fornecer o HAL 2.1 (e não devem fornecer o HAL 1.0 ou 2.0). Os dispositivos que não iniciam com o Android 11, mas planejam atualizar a imagem do fornecedor para Target Framework Compatibility Matrix versão 5 (lançada no Android 11), devem remover as implementações 2.0 HAL existentes e fornecer 2.1 HAL. Dispositivos que não iniciam com o Android 11 e não planejam atualizar a imagem do fornecedor também são recomendados para fornecer o 2.1 HAL.

O AOSP inclui várias bibliotecas auxiliares projetadas para ajudá-lo a implementar o HAL 2.1 e a transição do HAL 1.0 antigo.

Terminologia

  • health@1.0: abreviatura de android.hardware.health@1.0 . Refere-se à saúde HIDL HAL versão 1.0 lançada no Android 8.0.
  • health@2.0: abreviatura de android.hardware.health@2.0 . Refere-se à saúde HIDL HAL versão 2.0 lançada no Android 9.
  • health@2.1: abreviatura de android.hardware.health@2.1 . Refere-se à saúde HIDL HAL versão 2.1 lançada no Android 11.
  • Carregador: running executável no off-modo de carregamento que exibe a animação de carregamento telefone.
  • recuperação: em execução executável no modo de recuperação que deve recuperar informações sobre a bateria.
  • healthd: legado daemon rodando em Android que recupera informações relacionadas à saúde e fornece-a-quadro.
  • storaged: daemon rodando em Android que informações de armazenamento recupera e fornece-a-quadro.

Saúde no Android 8.x

No Android 8.x, o componente de integridade funciona conforme detalhado no diagrama a seguir:

Saúde no Android 8.x

Figura 1. Saúde no Android 8.x

Neste diagrama:

  • Uma (1) chamada de binder e uma (1) chamada de hwbinder são usadas pela estrutura para se comunicar com o hardware.
  • healthd vincula estaticamente para libhealthd_android , libbatterymonitor e libbatteryservice .
  • health@1.0-impl estaticamente links para libhealthd. BOARD .

Cada placa pode personalizar um diferente libhealthd. BOARD ; é determinado no momento da criação para qual link carregador, health@1.0-impl e recuperação.

Para outros modos:

Modo desligado e modo de recuperação no Android 8.x

Figura 2. Saúde em 8.x Android, off-modo de carregamento e modo de recuperação

  • carregador liga estaticamente para libhealthd. BOARD , libhealthd_charger e libbatterymonitor .
  • recuperação vincula estaticamente para libhealthd. BOARD e libbatterymonitor .

Saúde no Android 9

No Android 9, o componente de integridade funciona conforme detalhado no diagrama a seguir:Saúde no Android 9

Figura 3. Saúde no Android 9

As tentativas de enquadramento para recuperar serviço health@2.0 de hwservicemanager . Se falhar, ele chama health@1.0 (no Android 8.x). O caminho do código legado é mantido para que a imagem do sistema Android 9 seja compatível com a imagem do fornecedor do Android 8.x. A estrutura não recupera informações de ambos os HALs porque apenas uma versão de serviço (1.0 ou 2.0) pode existir no dispositivo.

Para outros modos:

Charing e recuperação fora do modo no Android 9

Figura 4. Saúde no Android 9, off-modo de carregamento e modo de recuperação

Saúde no Android 11

No Android 11, o componente de integridade funciona conforme detalhado no diagrama a seguir:

[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 a implementação de integridade 2.1 não existir, o sistema retornará ao caminho do código legado, conforme descrito nas seções anteriores

Para outros modos:

[       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)      ] |
+-------------------------------------+

Interface HAL 2.0

O HAL health@2.0 fornece a mesma funcionalidade para a estrutura que o antigo daemon healthd. Ele também fornece APIs que são semelhantes ao que healthd anteriormente fornecida como um serviço de ligante (ou seja IBatteryPropertiesRegistrar ).

A interface principal, iHealth , fornece as seguintes funções:

  • registerCallback , para substituir IBatteryPropertiesRegistrar.registerListener
  • unregisterCallback , para substituir IBatteryPropertiesRegistrar.unregisterListener
  • update , para substituir IBatteryPropertiesRegistrar.scheduleUpdate
  • IBatteryPropertiesRegistrar.getProperties são substituídos pelo seguinte:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

Além disso, IHealth oferece as seguintes novas APIs para storaged para recuperar informações relacionadas armazenamento específica do fornecedor:

  • getStorageInfo
  • getDiskStats

A nova estrutura, @2.0::HealthInfo , é devolvido através de chamadas de retorno e getHealthInfo . Esta estrutura contém todas as informações de integridade do dispositivo disponíveis por meio de health@2.0 HAL, incluindo:

  • Informações de carregamento (AC / USB / sem fio, corrente, voltagem, etc.)
  • Informações da bateria (presença, nível da bateria, corrente, tensão, carga, tecnologia, etc.)
  • Informações de armazenamento (informações do dispositivo de armazenamento, estatísticas do disco)

Interface HAL 2.1

O HAL health@2.1 oferece suporte para carregamento no modo desligado e fornece mais informações sobre a bateria.

A interface principal, iHealth , fornece as seguintes funções adicionais

  • getHealthConfig : para recuperar a configuração deste HAL
  • getHealthInfo_2_1 : um upgrade de versão secundária para getHealthInfo
  • shouldKeepScreenOn : para determinar se o ecrã deve ser mantido no modo de carregador

Além disso, a implementação de @2.1::IHealth é necessário para suporte @2.1::IHealthInfoCallback por suas herdadas registerCallback e unregisterCallback funções. A informação de saúde de saúde nova interface de retorno de chamada retorna para o cliente usando seu healthInfoChanged_2_1 função em vez do herdou healthInfoChanged função.

A nova estrutura, @2.1::HealthInfo , é devolvido através de chamadas de retorno e getHealthInfo_2_1 . Esta estrutura contém informações adicionais sobre a integridade do dispositivo disponíveis por meio de health@2.0 HAL, incluindo:

  • Nível de capacidade da bateria
  • Tempo de carga da bateria totalmente agora (em segundos)
  • Capacidade de design de carga total da bateria (em μAh)

Para obter informações sobre a implementação do serviço de saúde, ver a integração da saúde .