Чтобы гарантировать, что аппаратные и программные компоненты (такие как дисплей, звук и голосовое взаимодействие) выборочно включаются и выключаются по мере необходимости, AAOS предоставляет политику электропитания, которая состоит из набора ожидаемых состояний включения и выключения для аппаратных и программных компонентов. . VHAL, или службы поставщиков с привилегиями системы, могут применять новую политику электропитания при изменении состояния питания Android или при выполнении условий, которых они ожидают.
Применение политики электропитания разрешено в состояниях Ожидание VHAL и Вкл. В режиме подготовки к выключению режим гаража работает, и его не должно прерывать изменение состояния питания. Хотя обычную политику электропитания применить невозможно, в программе подготовки к завершению работы применяется специальная политика электропитания, которая представляет собой политику электропитания системы под названием «без взаимодействия с пользователем».
Состояние питания AAOS
Устройства AAOS следуют следующей диаграмме состояний питания:
Рисунок 1. Диаграмма состояния питания AAOS
Каждое состояние питания описано ниже:
Ценить | Описание |
---|---|
Выключенный | Физически питание процессора приложений (AP), памяти и периферийных устройств не подается. |
Подождите ВХАЛ |
|
На |
|
Подготовка к завершению работы |
|
Подождите, пока VHAL завершится. |
|
Приостановка в оперативной памяти (STR) | Транспортное средство и точка доступа выключены, код не выполняется, питание ОЗУ точки доступа сохраняется. |
Архитектура программного обеспечения
Архитектура политики электропитания показана ниже и определена в следующем разделе:
Рисунок 2. Архитектура энергетической политики
Как определяется политика власти?
Разработчики определяют политики электропитания в /vendor/etc/automotive/power_policy.xml
, которые:
- Определяет политику власти.
- Определяет группы политик электропитания, которые включают политику электропитания по умолчанию и автоматически применяются при смене состояний электропитания.
- Переопределить политику электропитания системы.
Энергетическая политика
Политика электропитания — это набор ожидаемых состояний электропитания аппаратных и программных компонентов. AAOS поддерживает следующие компоненты политики электропитания:
-
AUDIO
-
MEDIA
-
DISPLAY_MAIN
-
DISPLAY_CLUSTER
-
DISPLAY_FRONT_PASSENGER
-
DISPLAY_REAR_PASSENGER
-
BLUETOOTH
-
WIFI
-
CELLULAR
-
ETHERNET
-
PROJECTION
-
NFC
-
INPUT
-
VOICE_INTERACTION
-
VISUAL_INTERACTION
-
TRUSTED_DEVICE_DETECTION
-
LOCATION
-
MICROPHONE
-
CPU
Группа политики электропитания
Политика электропитания по умолчанию автоматически применяется при переходе состояний электропитания, указанном в группе политик электропитания. Поставщики могут определить политику электропитания по умолчанию для «Ожидание VHAL», «Вкл» и «Ожидание завершения VHAL» (вход в глубокий сон или начало выключения).
Политика электропитания системы
AAOS поддерживает только одну политику электропитания системы: «отсутствие взаимодействия с пользователем». Политика электропитания системы применяется, когда устройство переходит в режим гаража.
Поведение каждого компонента в политике электропитания системы указано в таблице ниже. Разработчики могут переопределить обнаружение Bluetooth, NFC и доверенных устройств в политике электропитания системы. Переопределения применяются в /vendor/etc/power_policy.xml
.
Компоненты | Состояние питания | Настраиваемый |
---|---|---|
Аудио | Выключенный | Нет |
СМИ | Выключенный | Нет |
Главный дисплей | Выключенный | Нет |
Кластер дисплея | Выключенный | Нет |
Дисплей переднего пассажира | Выключенный | Нет |
Дисплей заднего пассажира | Выключенный | Нет |
Bluetooth | Выключенный | ДА |
Wi-Fi | НА | Нет |
Сотовая связь | НА | Нет |
Ethernet | НА | Нет |
Проекция | Выключенный | Нет |
НФК | Выключенный | ДА |
Вход | Выключенный | Нет |
Голосовое взаимодействие | Выключенный | Нет |
Визуальное взаимодействие | Выключенный | Нет |
Обнаружение доверенного устройства | НА | ДА |
Расположение | Выключенный | Нет |
Микрофон | Выключенный | Нет |
Процессор | На | Нет |
Взаимодействие с ВХАЛ
Демон политики электропитания автомобиля, работающий на системном уровне, подписывает два свойства для прослушивания запросов от VHAL:
-
POWER_POLICY_REQ
, VHAL записывает идентификатор политики электропитания в это свойство. -
POWER_POLICY_GROUP_REQ
, VHAL записывает идентификатор группы политики электропитания в это свойство.
Текущую политику электропитания в системе можно изменить с помощью модулей, отличных от VHAL. В этом случае демон политики электропитания автомобиля обновляет свойство CURRENT_POWER_POLICY
, чтобы уведомить об изменении VHAL.
Взаимодействие с нативными процессами
Как упоминалось выше, демон политики электропитания автомобиля работает на системном уровне и с точки зрения управления политикой электропитания обеспечивает почти ту же функциональность, что и CPMS, работающий на уровне инфраструктуры. Кроме того, предположим, что демон политики электропитания автомобиля и CPMS полностью синхронизированы.
Демон политики электропитания автомобиля экспортирует интерфейсы AIDL для использования HAL и другими собственными процессами. Они могут быть уведомлены об изменении новой политики электропитания. Другими словами, когда каждый должен изменить свое энергетическое состояние.
ICarPowerPolicyServer.aidl
package android.frameworks.automotive.powerpolicy; import android.frameworks.automotive.powerpolicy.CarPowerPolicy; import android.frameworks.automotive.powerpolicy.CarPowerPolicyFilter; import android.frameworks.automotive.powerpolicy.ICarPowerPolicyChangeCallback; import android.frameworks.automotive.powerpolicy.PowerComponent; /** * ICarPowerPolicyServer is an interface implemented by the power policy daemon. * VHAL changes the power policy and the power policy daemon notifies the change to registered * subscribers. When subscribing to policy changes, a filter can be specified so that the registered * callbacks can listen only to a specific power component's change. */ @VintfStability interface ICarPowerPolicyServer { /** * Gets the current power policy. */ CarPowerPolicy getCurrentPowerPolicy(); /** * Gets whether the power component is turned on or off. * * @param componentId Power component ID defined in PowerComponent.aidl to check power state. * @return True if the component's power state is on. */ boolean getPowerComponentState(in PowerComponent componentId); /** * Subscribes to power policy change. * Notification is sent to the registered callback when the power policy changes and the power * state of the components which the callback is interested in changes. * * @param callback Callback that is invoked when the power policy changes. * @param filter The list of components which the callback is interested in. */ void registerPowerPolicyChangeCallback(in ICarPowerPolicyChangeCallback callback, in CarPowerPolicyFilter filter); /** * Unsubscribes from power policy change. * * @param callback Callback that doesn't want to receive power policy change. */ void unregisterPowerPolicyChangeCallback(in ICarPowerPolicyChangeCallback callback); }
ICarPowerPolicyChangeCallback.aidl
package android.frameworks.automotive.powerpolicy; import android.frameworks.automotive.powerpolicy.CarPowerPolicy; /** * ICarPowerPolicyChangeCallback is notified when a power policy changes. */ @VintfStability oneway interface ICarPowerPolicyChangeCallback { /** * Called when a power policy is fully changed. * * @param policy The current policy. */ void onPolicyChanged(in CarPowerPolicy policy); }
Взаимодействие с Java-модулями
CarPowerManager
предоставляет методы для управления политикой электропитания:
- Получите текущую политику власти.
- Получить текущую группу политики электропитания
- Примените новую политику электропитания
- Установите новую группу политики электропитания
Только модули с системными привилегиями могут использовать эти методы. Модули, которые хотят получать информацию о применении политики электропитания, могут зарегистрировать прослушиватель изменения политики электропитания в CarPowerManager
.