Android Здоровье

Android 9 включает в себя android.hardware.health HAL 2.0, крупное обновление версии от health@1.0 HAL. Этот новый HAL имеет следующие преимущества:

  • Более четкое разделение между фреймворком и кодом поставщика.
  • Принижает ненужную healthd демона.
  • Большая степень свободы для настройки поставщиков в отчетах с информацией о состоянии здоровья.
  • Больше информации о состоянии устройства, чем просто аккумулятор.

Android 11 включает в себя android.hardware.health HAL 2.1, обновление второстепенных версий из health@2.0 HAL. Этот новый HAL имеет следующие преимущества:

  • Легче реализовать
  • Лучшее соответствие существующим API 2.0 HAL
  • Лучшее разделение высоких частот в выключенном коде зарядки
  • Лучшая поддержка фреймворка для индикации состояния батареи устройства.

Требования

Устройства, запускаемые с Android 9, должны предоставлять HAL 2.0 (и не должны предоставлять HAL 1.0). Устройства, которые не запускаются с Android 9, но планируют обновить образ поставщика до версии 3 матрицы совместимости Target Framework (выпущенной в Android 9), должны удалить существующие реализации 1.0 HAL и предоставить HAL 2.0.

Устройства, запускаемые с Android 11, должны предоставлять HAL 2.1 (и не должны предоставлять HAL 1.0 или 2.0). Устройства, которые не запускаются с Android 11, но планируют обновить образ поставщика до версии 5 матрицы совместимости Target Framework (выпущенной в Android 11), должны удалить существующие реализации 2.0 HAL и предоставить HAL 2.1. Устройствам, которые не запускаются с Android 11 и не планируют обновлять образ поставщика, также рекомендуется предоставлять HAL 2.1.

AOSP включает несколько вспомогательных библиотек, предназначенных для помощи в реализации HAL версии 2.1 и перехода от старой версии 1.0 HAL.

Терминология

  • health@1.0: сокращение android.hardware.health@1.0 . Относится к здоровью HIDL HAL версии 1.0, выпущенной в Android 8.0.
  • health@2.0: сокращение android.hardware.health@2.0 . Относится к здоровью HIDL HAL версии 2.0, выпущенной в Android 9.
  • health@2.1: сокращение android.hardware.health@2.1 . Относится к здоровью HIDL HAL версии 2.1, выпущенной в Android 11.
  • Зарядное устройство: исполняемые работает в автономном режиме зарядка , который отображает телефон зарядкой анимации.
  • Восстановление: исполняемый файл работает в режиме восстановления , который должен получить информацию от батареи.
  • healthd: наследие демон работает в Android , который извлекает здоровья информации , связанные и предоставляет ее рамки.
  • хранить этот : демон работает в Android , что информация извлекает хранения и обеспечивает его рамку.

Здоровье в Android 8.x

В Android 8.x компонент работоспособности работает, как показано на следующей диаграмме:

Здоровье в Android 8.x

Рисунок 1. Здоровье в Android 8.x

На этой диаграмме:

  • Один (1) вызов связывателя и один (1) вызов hwbinder используются фреймворком для связи с оборудованием.
  • healthd статически ссылки на libhealthd_android , libbatterymonitor и libbatteryservice .
  • health@1.0-impl статически ссылки на libhealthd. BOARD .

Каждая плата может настроить различные libhealthd. BOARD ; во время сборки определяется, какое зарядное устройство, health@1.0-impl и ссылка на восстановление.

Для других режимов:

Выключенный режим зарядки и восстановления в Android 8.x

Рисунок 2. Здоровье в Android 8.x, вне режима зарядки и режим восстановления

  • зарядное устройство статически ссылки на libhealthd. BOARD , libhealthd_charger и libbatterymonitor .
  • восстановление статически ссылки на libhealthd. BOARD и libbatterymonitor .

Здоровье в Android 9

В Android 9 компонент работоспособности работает, как показано на следующей диаграмме: Здоровье в Android 9

Рисунок 3. Здоровье в Android 9

Каркасные попытки получить health@2.0 службу из hwservicemanager . Если это не удается, он обращается к health@1.0 (в Android 8.x). Путь к устаревшему коду сохраняется, поэтому образ системы Android 9 совместим с образом поставщика Android 8.x. Платформа не извлекает информацию из обоих HAL, потому что на устройстве может существовать только одна версия службы (1.0 или 2.0).

Для других режимов:

Чаринг и восстановление вне режима в Android 9

Рисунок 4. Здоровье в Android 9, оф-режиме зарядки и режим восстановления

Здоровье в Android 11

В Android 11 компонент работоспособности работает, как показано на следующей схеме:

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

Если реализация работоспособности 2.1 не существует, система возвращается к пути устаревшего кода, как описано в предыдущих разделах.

Для других режимов:

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

HAL интерфейс 2.0

HAL health@2.0 предоставляет фреймворку те же функции, что и старый демон healthd. Он также предоставляет API - интерфейсы, которые похожи на то , что healthd предварительно в качестве связующей службы (т.е. IBatteryPropertiesRegistrar ).

Главный интерфейс, IHealth , обеспечивает выполнение следующих функций:

  • registerCallback , чтобы заменить IBatteryPropertiesRegistrar.registerListener
  • unregisterCallback , чтобы заменить IBatteryPropertiesRegistrar.unregisterListener
  • update , заменить IBatteryPropertiesRegistrar.scheduleUpdate
  • IBatteryPropertiesRegistrar.getProperties заменяются следующим:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

Кроме того, IHealth предоставляет следующие новую API - интерфейсы для storaged эту, чтобы получить связанные хранения конкретного производителя информации:

  • getStorageInfo
  • getDiskStats

Новая структура, @2.0::HealthInfo , возвращается через обратные вызовы и getHealthInfo . Эта структура содержит всю информацию о состоянии устройства, доступную через health@2.0 HAL, в том числе:

  • Информация о зарядке (AC / USB / беспроводной, ток, напряжение и т. Д.)
  • Информация о батарее (наличие, уровень заряда, ток, напряжение, заряд, технология и т. Д.)
  • Информация о хранилище (информация об устройстве хранения, статистика диска)

HAL интерфейс 2.1

HAL health@2.1 поддерживает зарядку в выключенном состоянии и предоставляет дополнительную информацию об аккумуляторе.

Главный интерфейс, IHealth , обеспечивает следующие дополнительные функции

  • getHealthConfig : для получения конфигурации этого HAL
  • getHealthInfo_2_1 : модернизация второстепенной версии для getHealthInfo
  • shouldKeepScreenOn : чтобы определить , следует ли экран быть в режиме зарядного устройства

Кроме того, реализация @2.1::IHealth требуется поддержка @2.1::IHealthInfoCallback для своих наследственных registerCallback и unregisterCallback функций. Новая возвращает интерфейс обратного вызова информация о состоянии здоровья здоровья клиента , используя его healthInfoChanged_2_1 функцию вместо унаследованного healthInfoChanged функции.

Новая структура, @2.1::HealthInfo , возвращается через обратные вызовы и getHealthInfo_2_1 . Эта структура содержит дополнительную информацию о состоянии устройства, доступную через health@2.0 HAL, в том числе:

  • Уровень емкости аккумулятора
  • Время полной зарядки аккумулятора (в секундах)
  • Расчетная емкость полного заряда аккумулятора (в мкАч)

Для получения информации о реализации службы здравоохранения, см Исполнительного здоровье .