Чтобы аппаратные и программные компоненты (такие как дисплей, звук и голосовое взаимодействие) выборочно включались и выключались по мере необходимости, AAOS предоставляет политику энергопотребления, которая состоит из набора ожидаемых состояний включения и выключения для аппаратных и программных компонентов. . VHAL, или службы поставщика с привилегиями системы, могут применять новую политику питания при изменении состояния питания Android или при выполнении условий, которых они ожидают.
Применение политики электропитания разрешено в состояниях Ожидание VHAL и Вкл. В режиме «Подготовка к завершению работы» работает режим «Гараж», и изменение состояния питания не должно нарушать его работу. Хотя обычная политика электропитания не может быть применена, во время подготовки к завершению работы применяется специальная политика электропитания, которая представляет собой системную политику электропитания, называемую «отсутствие взаимодействия с пользователем».
Состояние питания AAOS
Устройства AAOS следуют этой диаграмме состояния питания:

Рисунок 1. Диаграмма состояния питания AAOS
Каждое состояние питания описано ниже:
| Ценность | Описание |
|---|---|
| Выключенный | Физически питание процессора приложений (AP), памяти и периферийных устройств не подается. |
| Подождите, пока ВХАЛ |
|
| На |
|
| Выключение Подготовка |
|
| Подождите, пока VHAL завершит работу. |
|
| Suspend-to-RAM (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 | НА | Нет |
| Проекция | Выключенный | Нет |
| NFC | Выключенный | ДА |
| Вход | Выключенный | Нет |
| Голосовое взаимодействие | Выключенный | Нет |
| Визуальное взаимодействие | Выключенный | Нет |
| Обнаружение доверенных устройств | НА | ДА |
| Расположение | Выключенный | Нет |
| Микрофон | Выключенный | Нет |
| Процессор | На | Нет |
Взаимодействие с ВХАЛ
Демон политики питания автомобиля, работающий на системном уровне, подписывается на два свойства для прослушивания запросов от 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 .