전원 정책

하드웨어 및 소프트웨어 구성요소(디스플레이, 오디오, 음성 상호작용 등)가 필요에 따라 선택적으로 켜지고 꺼지도록 AAOS에서는 하드웨어 및 소프트웨어 구성요소에 관한 일련의 예상 전원 켜기/끄기 상태로 구성된 전원 정책을 제공합니다. VHAL 또는 시스템 권한이 있는 공급업체 서비스는 Android 전원 상태가 전환되거나 대기 중인 조건이 충족될 때 새 전원 정책을 적용할 수 있습니다.

Wait for VHAL 및 On 상태에서 전원 정책을 적용할 수 있습니다. Shutdown Prepare에서는 차고 모드가 실행되고 전원 상태 변경으로 인해 방해받아서는 안 됩니다. 일반 전원 정책은 적용할 수 없지만 '사용자 상호작용 없음'이라는 시스템 전원 정책인 특수 전원 정책은 Shutdown Prepare에서 적용됩니다.

AAOS 전원 상태

AAOS 기기는 다음과 같은 전원 상태 다이어그램을 따릅니다.

AAOS 전원 상태 다이어그램

그림 1. AAOS 전원 상태 다이어그램

각 전원 상태는 아래에 설명되어 있습니다.

설명
Off 전원이 애플리케이션 프로세서(AP), 메모리, 주변기기에 물리적으로 제공되지 않습니다.
Wait for VHAL
  • 운전자가 차량과 상호작용할 때(문을 여는 등) VMCU는 AP, 메모리, 주변기기에 전원을 공급합니다.
  • AAOS는 세 가지 상태(Off, Suspend-to-RAM(STR), Wait for VHAL Finish) 중 하나에서 전환한 후 Wait for VHAL로 전환되어 VHAL과의 조정을 기다립니다.
On
  • VHAL은 AAOS에 On 상태로 전환하라고 지시합니다. 이 상태에서 AAOS는 완전히 실행 중이며 운전자와 상호작용합니다.
  • 디스플레이는 다른 폼 팩터의 Android 디스플레이 켜기/끄기 호출이 아닌 전원 정책에 따라 제어됩니다.
Shutdown Prepare
  • 운전자가 운전을 멈추면 VHAL은 AAOS에 Shutdown Prepare로 전환하라고 지시합니다. 이 상태에서 디스플레이와 오디오는 꺼지고 AAOS는 운전자와 상호작용하지 않습니다. Android 시스템은 여전히 실행 중이며 앱과 Android 시스템을 업데이트할 수 있습니다. 업데이트가 완료되면 Android 시스템은 Wait for VHAL Finish로 전환합니다.
Wait for VHAL to Finish
  • AAOS는 VHAL에 종료할 수 있다고 알립니다. 차량 마이크로 컨트롤러 단위(VMCU)는 단일 칩 시스템(SoC)을 완전 절전 상태로 전환하고 AP에서 전원을 차단할 것으로 예상됩니다. 그러면 실행 중인 코드는 없지만 AAOS는 STR 상태가 됩니다.
  • VHAL이 완료되지 않고 운전자가 돌아오면 헤드 단위(HU)가 Wait for VHAL로 직접 전환되어야 합니다.
Suspend-to-RAM(STR) 차량과 AP가 꺼져 있고 실행되는 코드가 없으며 전원이 AP RAM에 유지됩니다.

소프트웨어 아키텍처

전원 정책 아키텍처는 아래에 나와 있으며 다음 섹션에서 정의됩니다.

그림 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

전원 정책 그룹

기본 전원 정책은 전원 정책 그룹에 지정된 전원 상태 전환 시 자동으로 적용됩니다. 공급업체는 Wait For VHAL, On, Wait for VHAL Finish(Deep Sleep Entry 또는 Shutdown Start)의 기본 전원 정책을 정의할 수 있습니다.

시스템 전원 정책

AAOS는 '사용자 상호작용 없음'이라는 시스템 전원 정책만 지원합니다. 시스템 전원 정책은 기기가 차고 모드로 전환될 때 적용됩니다.

시스템 전원 정책의 각 구성요소 동작은 아래 표에 나와 있습니다. 구현자는 시스템 전원 정책에서 블루투스, NFC, 신뢰할 수 있는 기기 감지를 재정의할 수 있습니다. 재정의는 /vendor/etc/power_policy.xml에서 적용됩니다.

구성요소 전원 상태 구성 가능
오디오 꺼짐 아니요
미디어 꺼짐 아니요
디스플레이 기본 꺼짐 아니요
디스플레이 클러스터 꺼짐 아니요
디스플레이 앞좌석 꺼짐 아니요
디스플레이 뒷좌석 꺼짐 아니요
블루투스 꺼짐
Wi-Fi 켜짐 아니요
모바일 데이터 켜짐 아니요
이더넷 켜짐 아니요
프로젝션 꺼짐 아니요
NFC 꺼짐
입력 꺼짐 아니요
음성 상호작용 꺼짐 아니요
시각적 상호작용 꺼짐 아니요
신뢰할 수 있는 기기 감지 켜짐
위치 꺼짐 아니요
마이크 꺼짐 아니요
CPU 켜짐 아니요

VHAL과의 상호작용

시스템 레이어에서 실행되는 자동차 전원 정책 데몬은 VHAL의 요청을 리슨하기 위해 두 가지 속성을 구독합니다.

  • POWER_POLICY_REQ - VHAL이 전원 정책 ID를 이 속성에 씁니다.
  • POWER_POLICY_GROUP_REQ - VHAL이 전원 정책 그룹 ID를 이 속성에 씁니다.

시스템의 현재 전원 정책은 VHAL이 아닌 모듈에서 변경할 수 있습니다. 이 경우 자동차 전원 정책 데몬은 VHAL의 변경사항을 알리도록 CURRENT_POWER_POLICY 속성을 업데이트합니다.

네이티브 프로세스와의 상호작용

위에서 언급했듯이 자동차 전원 정책 데몬은 시스템 레이어에서 실행되고 전원 정책 관리 측면에서 프레임워크 레이어에서 실행되는 CPMS와 거의 같은 기능을 제공합니다. 또한 자동차 전원 정책 데몬과 CPMS는 완전히 동기화되었다고 가정합니다.

자동차 전원 정책 데몬은 HAL과 기타 네이티브 프로세스에서 사용할 AIDL 인터페이스를 내보냅니다. 새 전원 정책이 변경되면 알림을 받을 수 있습니다. 즉, 각각 전원 상태를 변경해야 하는 때입니다.

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);
}

자바 모듈과의 상호작용

CarPowerManager는 다음과 같이 전원 정책 관리를 사용 설정하는 메서드를 제공합니다.

  • 현재 전원 정책을 가져옵니다.
  • 현재 전원 정책 그룹을 가져옵니다.
  • 새 전원 정책을 적용합니다.
  • 새 전원 정책 그룹을 설정합니다.

시스템 권한이 있는 모듈만 메서드를 사용할 수 있습니다. 전원 정책이 적용될 때 알림을 받으려는 모듈은 전원 정책 변경 리스너를 CarPowerManager에 등록하면 됩니다.