Чтобы аппаратные и программные компоненты (например, дисплей, аудио и голосовое взаимодействие) включались и отключались по мере необходимости, AAOS предоставляет правила энергопотребления, которые состоят из набора ожидаемых состояний включения и отключения для аппаратных и программных компонентов. VHAL или системные сервисы поставщика с привилегиями могут применять новую политику питания при переходе в другое состояние питания Android или при выполнении условий, которые они ожидают.
Применять правила энергопотребления можно в состояниях Wait for VHAL, On и Pre Shutdown Prepare (иногда с некоторыми ограничениями). В отличие от вариантов "Ожидание VHAL" и "Включено", для группы правил энергопотребления нельзя настроить правило энергопотребления по умолчанию для этапа подготовки к отключению. На основном этапе подготовки к выключению работает режим гаража, и его не должны нарушать изменения состояния питания. Хотя обычное правило питания применить нельзя, на этапе подготовки к завершению работы применяется специальное правило питания – системное правило питания под названием без взаимодействия с пользователем.
Состояние питания AAOS
Устройства AAOS работают по следующей схеме:

Рисунок 1. Диаграмма состояний питания AAOS.
Ниже описаны все возможные состояния питания.
| Значение | Описание |
|---|---|
| Отключено |
|
| Ожидание VHAL |
|
| Включено |
|
| Подготовка к отключению |
|
| Дождитесь завершения работы VHAL |
|
| Приостановка с сохранением в ОЗУ (STR) |
|
| Режим гибернации (STD) |
|
Как задаются правила управления питанием?
Разработчики определяют правила энергопотребления в файле /vendor/etc/automotive/power_policy.xml, который:
- Определяет правила энергопотребления.
- Определяет группы правил энергопотребления, которые включают правила энергопотребления по умолчанию и автоматически применяются при переходе в другое состояние питания.
- Переопределяет правила питания системы.
Правила в отношении питания
Правила энергопотребления состоят из набора ожидаемых состояний питания аппаратных и программных компонентов. AAOS поддерживает следующие компоненты в правилах энергопотребления:
|
АУДИО МУЛЬТИМЕДИА ДИСПЛЕЙ BLUETOOTH |
WIFI CELLULAR ETHERNET PROJECTION |
NFC INPUT VOICE_INTERACTION VISUAL_INTERACTION |
TRUSTED_DEVICE_DETECTION LOCATION MICROPHONE CPU |
Поставщики также могут определять собственные компоненты питания для использования с правилами питания. Определите специальные компоненты питания в том же XML-файле, что и правила питания, как в следующем примере:
<customComponents>CUSTOM_COMPONENT_1000 CUSTOM_COMPONENT_SPECIAL_SENSOR CUSTOM_COMPONENT_AUX_INPUT </customComponents>
Группа правил энергопотребления
Группа правил энергопотребления определяет правила по умолчанию, которые автоматически применяются при переходе в другое состояние питания. Поставщики могут задать правила энергопотребления по умолчанию для состояний "Ожидание VHAL" и "Включено".
Правила в отношении питания системы
AAOS поддерживает два правила питания системы: без взаимодействия с пользователем и подготовка к приостановке. Правило энергопотребления системы применяется, когда устройство переходит в режим без звука, режим гаража, спящий режим с сохранением данных в ОЗУ или спящий режим с сохранением данных на диск.
В таблицах ниже описано поведение каждого компонента в соответствии с системной политикой энергопотребления.
Разработчики могут переопределить обнаружение Bluetooth, NFC и надежных устройств в системном правиле питания без взаимодействия с пользователем. Переопределения применяются в /vendor/etc/automotive/power_policy.xml.
без взаимодействия с пользователем;
Поведение системного правила управления питанием без взаимодействия с пользователем описано в таблице ниже.
| Компоненты | Состояние питания | Настраиваемый |
|---|---|---|
| Аудио | Отключено | Нет |
| Мультимедиа | Отключено | Нет |
| Экран | Отключено | Нет |
| Bluetooth | Отключено | Да |
| Wi-Fi | Включено | Нет |
| Мобильная сеть | Включено | Нет |
| Ethernet | Включено | Нет |
| Проекция | Отключено | Нет |
| NFC | Отключено | Да |
| Ввод | Отключено | Нет |
| Ассистент | Отключено | Нет |
| Взаимодействие с пользователем | Отключено | Нет |
| Обнаружение надежных устройств при входе пользователя в аккаунт | Включено | Да |
| Местоположение | Отключено | Нет |
| Микрофон | Отключено | Нет |
| ЦП | Включено | Нет |
подготовка к блокировке
Поведение системного правила управления питанием suspend prep описано в таблице ниже.
| Компоненты | Состояние питания | Настраивается производителем оригинального оборудования |
|---|---|---|
| Аудио | Отключено | Нет |
| Мультимедиа | Н/Д | Нет |
| Экран | Н/Д | Нет |
| Bluetooth | Отключено | Нет |
| Wi-Fi | Отключено | Нет |
| Мобильная сеть | Н/Д | Нет |
| Ethernet | Н/Д | Нет |
| Проекция | Н/Д | Нет |
| NFC | Н/Д | Нет |
| Ввод | Н/Д | Нет |
| Ассистент | Н/Д | Нет |
| Взаимодействие с пользователем | Н/Д | Нет |
| Обнаружение надежных устройств при входе пользователя в аккаунт | Н/Д | Нет |
| Местоположение | Отключено | Нет |
| Микрофон | Отключено | Нет |
| ЦП | Отключено | Нет |
Взаимодействие с VHAL
Демон правил энергопотребления автомобиля, работающий на системном уровне, подписывается на два свойства, чтобы получать запросы от VHAL:
POWER_POLICY_REQVHAL записывает идентификатор правила энергопотребления в это свойство.POWER_POLICY_GROUP_REQVHAL записывает в это свойство идентификатор группы правил энергопотребления.
Текущую политику энергопотребления в системе могут менять не только модули VHAL. В этом случае демон правил питания автомобиля обновляет свойство CURRENT_POWER_POLICY, чтобы уведомить VHAL об изменении.
Взаимодействие с нативными процессами
Сервис CarPowerManagementService (CPMS) делегирует управление правилами энергопотребления демону правил энергопотребления автомобиля. Демон является единственным источником достоверных данных о правилах питания в системе. Демон правил энергопотребления автомобиля управляет состоянием правил энергопотребления и уведомляет CPMS, VHAL и других встроенных клиентов об изменениях.
Демон правил питания автомобиля экспортирует интерфейсы 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.
* @throws IllegalStateException if the current policy is not set.
*/
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.
* @throws IllegalArgumentException if the componentId is invalid.
*/
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.
* @throws IllegalArgumentException if the callback is already registered.
* @throws IllegalStateException if the callback is dead.
*/
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.
* @throws IllegalArgumentException if the callback is not registered.
*/
void unregisterPowerPolicyChangeCallback(in ICarPowerPolicyChangeCallback callback);
/**
* Applies the power policy.
*
* {@code policyId} should be one of power policy IDs defined in
* {@code /vendor/etc/automotive/power_policy.xml} or predefined system power policies.
*
* @param policyId ID of power policy.
* @throws IllegalArgumentException if {@code policyId} is invalid.
*/
void applyPowerPolicy(in @utf8InCpp String policyId);
/**
* Sets the current power policy group.
*
*
{@code policyGroupId} should be one of power policy group IDs defined in
* {@code /vendor/etc/automotive/power_policy.xml}.
*
* @param policyGroupId ID of power policy group.
* @throws IllegalArgumentException if {@code policyGroupId} is invalid.
*/
void setPowerPolicyGroup(in @utf8InCpp String policyGroupId);
}
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.