Чтобы гарантировать, что аппаратные и программные компоненты (такие как дисплей, звук и голосовое взаимодействие) выборочно включаются и выключаются по мере необходимости, 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_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. * @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