Политика питания

Для обеспечения выборочного включения и выключения аппаратных и программных компонентов (таких как дисплей, звук и голосовое взаимодействие) по мере необходимости, AAOS предоставляет политику питания, которая представляет собой набор ожидаемых состояний включения и выключения для аппаратных и программных компонентов. VHAL, или системные привилегированные службы поставщика, могут применять новую политику питания при переходе состояния питания Android или при выполнении условий, которые они ожидают.

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

состояние питания AAOS

Устройства AAOS используют следующую диаграмму состояний питания:

Диаграмма состояний питания AAOS

Рисунок 1. Диаграмма состояния питания AAOS.

Ниже описано каждое состояние питания:

Ценить Описание
Выключенный
  • Физически питание на процессор приложения (AP), память и периферийные устройства не подается.
Дождитесь VHAL
  • Когда водитель взаимодействует с транспортным средством (например, открывает дверь), VMCU подает питание на AP, память и периферийные устройства.
  • AAOS переходит из одного из трех состояний (Выкл., Приостановка работы с сохранением данных в ОЗУ (STR, Ожидание завершения работы VHAL)), а затем переходит в состояние Ожидание работы VHAL, где ожидает координации с VHAL.
На
  • VHAL дает указание AAOS перейти в состояние «Включено». В этом состоянии AAOS работает в полном объеме и взаимодействует с драйвером.
  • Управление дисплеем осуществляется политикой энергосбережения, а не вызовами включения/выключения дисплея Android, как это происходит в других форм-факторах.
Подготовка к отключению
  • Когда водитель прекращает движение, VHAL дает команду AAOS перейти в состояние подготовки к выключению. В этом состоянии дисплей и звук выключены, и AAOS не взаимодействует с водителем. Система Android продолжает работать и может обновлять приложения и саму систему Android. После завершения обновлений (если таковые имеются) система Android переходит в состояние ожидания завершения работы VHAL.
Дождитесь завершения работы VHAL.
  • AAOS сообщает VHAL, что его можно выключить. Ожидается, что микроконтроллер автомобиля (VMCU) переведет систему на кристалле (SoC) в режим глубокого сна и отключит питание от AP. После этого AAOS переходит в состояние STR, хотя никакой код не выполняется.
  • Если VHAL не завершится и водитель вернется, головное устройство должно сразу перейти в режим ожидания VHAL.
Приостановка работы в оперативной памяти (STR)
  • Автомобиль и точка доступа выключены, никакие коды не выполняются, и питание оперативной памяти точки доступа подается постоянно.
Приостановка на диске (STD)
  • Автомобиль и точка доступа выключены, никакие коды не выполняются, и питание процессора и оперативной памяти точки доступа не подается.

Как определяется энергетическая политика?

Разработчики определяют политики энергопотребления в /vendor/etc/automotive/power_policy.xml , которые:

  • Определяет энергетическую политику.
  • Определяет группы политик управления питанием, которые включают политику управления питанием по умолчанию и автоматически применяются при переходах между состояниями питания.
  • Отменяет политику энергосбережения системы.

Энергетическая политика

Политика энергопотребления представляет собой набор ожидаемых состояний энергопотребления аппаратных и программных компонентов. AAOS поддерживает следующие компоненты в рамках политики энергопотребления:

АУДИО
СМИ
ОТОБРАЖАТЬ
BLUETOOTH
WI-FI
КЛЕТОЧНЫЙ
ЭЛТЕРНЕТ
ПРОЕКЦИЯ
НФК
ВХОД
ГОЛОСОВОЕ ВЗАИМОДЕЙСТВИЕ
ВИЗУАЛЬНОЕ ВЗАИМОДЕЙСТВИЕ
ОБНАРУЖЕНИЕ НАДЕЖНОГО УСТРОЙСТВА
РАСПОЛОЖЕНИЕ
МИКРОФОН
Процессор

Поставщики также могут определять собственные пользовательские компоненты управления питанием для использования с политиками управления питанием. Пользовательские компоненты управления питанием определяются в том же 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 На Нет
Клеточный На Нет
ЭН На Нет
Проекция Выключенный Нет
НФК Выключенный Да
Вход Выключенный Нет
Помощник Выключенный Нет
Взаимодействие с пользователем Выключенный Нет
Обнаружение доверенных устройств при входе пользователя в систему На Да
Расположение Выключенный Нет
Микрофон Выключенный Нет
Процессор На Нет

приостановить подготовку

В этой таблице описано поведение политики управления питанием системы подготовки к приостановке :

Компоненты Состояние мощности Возможность настройки производителем оборудования
Аудио Выключенный Нет
СМИ Н/Д Нет
Отображать Н/Д Нет
Bluetooth Выключенный Нет
Wi-Fi Выключенный Нет
Клеточный Н/Д Нет
ЭН Н/Д Нет
Проекция Н/Д Нет
НФК Н/Д Нет
Вход Н/Д Нет
Помощник Н/Д Нет
Взаимодействие с пользователем Н/Д Нет
Обнаружение доверенных устройств при входе пользователя в систему Н/Д Нет
Расположение Выключенный Нет
Микрофон Выключенный Нет
Процессор Выключенный Нет

Взаимодействие с VHAL

Демон управления энергопотреблением автомобиля, работающий на системном уровне, подписывается на два параметра для прослушивания запросов от VHAL:

  • В свойстве POWER_POLICY_REQ VHAL записывает идентификатор политики управления питанием.
  • Свойство POWER_POLICY_GROUP_REQ записывает идентификатор группы политик управления питанием в это свойство VHAL.

Текущая политика энергосбережения в системе может быть изменена модулями, отличными от VHAL. В этом случае демон политики энергосбережения автомобиля обновляет свойство CURRENT_POWER_POLICY , чтобы уведомить VHAL об изменении.

Взаимодействие с собственными процессами

Служба управления питанием автомобиля (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); }

ICarPowerPolicyChangCallback.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