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

Рисунок 1. Диаграмма состояния питания AAOS.
Каждое состояние питания описано ниже:
| Ценить | Описание |
|---|---|
| Выключенный |
|
| Подождите ВХАЛ |
|
| На |
|
| Подготовка к отключению |
|
| Подождите, пока VHAL завершится. |
|
| Приостановка в оперативной памяти (STR) |
|
| Приостановка на диске (STD) |
|
Как определяется политика власти?
Разработчики определяют политики электропитания в /vendor/etc/automotive/power_policy.xml , которые:
- Определяет политику власти.
- Определяет группы политик электропитания, которые включают политику электропитания по умолчанию и автоматически применяются при смене состояний электропитания.
- Переопределяет политику электропитания системы.
Энергетическая политика
Политика электропитания состоит из набора ожидаемых состояний электропитания аппаратных и программных компонентов. AAOS поддерживает следующие компоненты в политике электропитания:
| АУДИО СМИ ОТОБРАЖАТЬ BLUETOOTH | WI-FI СОТОВАЯ СВЯЗЬ ЭТЕРНЕТ ПРОЕКЦИЯ | НФК ВХОД VOICE_INTERACTION ВИЗУАЛЬНОЕ_ВЗАИМОДЕЙСТВИЕ | TRUSTED_DEVICE_DETECTION РАСПОЛОЖЕНИЕ МИКРОФОН Процессор |
Поставщики также могут определять свои собственные компоненты питания для использования с политиками электропитания. Определите пользовательские компоненты электропитания в том же XML-файле, что и политики электропитания, как в этом примере:
<customComponents>CUSTOM_COMPONENT_1000 CUSTOM_COMPONENT_SPECIAL_SENSOR CUSTOM_COMPONENT_AUX_INPUT </customComponents>
Группа политики электропитания
Политика электропитания по умолчанию автоматически применяется при переходе состояний электропитания, указанном в группе политик электропитания. Поставщики могут определить политику электропитания по умолчанию для «Ожидание VHAL», «Вкл» и «Ожидание завершения VHAL» (вход в глубокий сон или начало выключения).
Политики электропитания системы
AAOS поддерживает две политики электропитания системы: отсутствие взаимодействия с пользователем и приостановка подготовки. Политика электропитания системы применяется, когда устройство переходит в режим «Без звука», «Гаражный режим», «Приостановка в ОЗУ» или «Приостановка на диск».
В следующих таблицах указано поведение каждого компонента политики электропитания системы. Разработчики могут переопределить обнаружение Bluetooth, NFC и доверенных устройств в политике электропитания системы без взаимодействия с пользователем . Переопределения применяются в /vendor/etc/power_policy.xml .
нет взаимодействия с пользователем
Поведение политики управления питанием системы без взаимодействия с пользователем определено в этой таблице:
| Компоненты | Состояние питания | Настраиваемый |
|---|---|---|
| Аудио | Выключенный | Нет |
| СМИ | Выключенный | Нет |
| Отображать | Выключенный | Нет |
| Bluetooth | Выключенный | Да |
| Wi-Fi | На | Нет |
| Сотовая связь | На | Нет |
| Ethernet | На | Нет |
| Проекция | Выключенный | Нет |
| НФК | Выключенный | Да |
| Вход | Выключенный | Нет |
| Ассистент | Выключенный | Нет |
| Взаимодействие с пользователем | Выключенный | Нет |
| Обнаружение доверенных устройств для входа пользователя в систему | На | Да |
| Расположение | Выключенный | Нет |
| Микрофон | Выключенный | Нет |
| Процессор | На | Нет |
приостановить подготовку
Поведение политики электропитания системы подготовки к приостановке определено в этой таблице:
| Компоненты | Состояние питания | OEM-конфигурируемый |
|---|---|---|
| Аудио | Выключенный | Нет |
| СМИ | Н/Д | Нет |
| Отображать | Н/Д | Нет |
| Bluetooth | Выключенный | Нет |
| Wi-Fi | Выключенный | Нет |
| Сотовая связь | Н/Д | Нет |
| Ethernet | Н/Д | Нет |
| Проекция | Н/Д | Нет |
| НФК | Н/Д | Нет |
| Вход | Н/Д | Нет |
| Ассистент | Н/Д | Нет |
| Взаимодействие с пользователем | Н/Д | Нет |
| Обнаружение доверенных устройств для входа пользователя в систему | Н/Д | Нет |
| Расположение | Выключенный | Нет |
| Микрофон | Выключенный | Нет |
| Процессор | Выключенный | Нет |
Взаимодействие с ВХАЛ
Демон политики электропитания автомобиля, работающий на системном уровне, подписывает два свойства для прослушивания запросов от VHAL:
-
POWER_POLICY_REQVHAL записывает идентификатор политики электропитания в это свойство. -
POWER_POLICY_GROUP_REQVHAL записывает идентификатор группы политики электропитания в это свойство.
Текущую политику электропитания в системе можно изменить с помощью модулей, отличных от 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.
* @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