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

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

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

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

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

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

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

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

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