전원 정책

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

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

전원 정책 적용은 Wait for VHAL 및 On 상태에서 허용됩니다. Shutdown Prepare에서 Garage Mode는 실행 중이며 전원 상태 변경으로 인해 방해받지 않아야 합니다. 일반 전원 정책을 적용할 수는 없지만 Shutdown Prepare에는 "사용자 상호 작용 없음"이라는 시스템 전원 정책인 특수 전원 정책이 적용됩니다.

AAOS 전원 상태

AAOS 장치는 다음 전원 상태 다이어그램을 따릅니다.

AAOS 전원 상태 다이어그램

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

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

설명
끄다 애플리케이션 프로세서(AP), 메모리 및 주변 장치에 물리적으로 전원이 공급되지 않습니다.
VHAL 대기
  • 운전자가 차량과 상호 작용할 때(예: 문 열기) VMCU는 AP, 메모리에 전원을 공급합니다. 그리고 주변기기.
  • AAOS는 세 가지 상태(Off, Suspend-to-RAM(STR, Wait for VHAL Finish) 중 하나에서 전환한 다음 Wait for VHAL로 들어가 VHAL과의 조정을 기다립니다.
  • VHAL은 AAOS에 On 상태로 전환하도록 지시합니다. 이 상태에서 AAOS는 완전히 실행 중이며 드라이버와 상호 작용합니다.
  • 디스플레이는 다른 폼 팩터에 대한 Android 디스플레이 켜기/끄기 호출이 아닌 전원 정책에 의해 제어됩니다.
종료 준비
  • 운전자가 운전을 멈추면 VHAL은 AAOS에 Shutdown Prepare로 들어가도록 지시합니다. 이 상태에서는 디스플레이와 오디오가 꺼지고 AAOS가 드라이버와 상호 작용하지 않습니다. Android 시스템은 계속 실행 중이며 앱과 Android 시스템을 업데이트할 수 있습니다. 업데이트(있는 경우)가 완료되면 Android 시스템이 Wait for VHAL Finish로 들어갑니다.
VHAL이 완료될 때까지 대기
  • AAOS는 VHAL에 종료할 수 있음을 알립니다. VMCU(Vehicle Microcontroller Unit)는 SoC(System-on-Chip)를 딥 슬립 상태로 전환하고 AP에서 전원을 제거할 것으로 예상됩니다. AAOS는 코드가 실행되지 않더라도 STR 상태에 있습니다.
  • VHAL이 완료되지 않고 드라이버가 반환되면 헤드 유닛(HU)이 VHAL 대기로 직접 전환되어야 합니다.
STR(Suspend-to-RAM) 차량과 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는 "사용자 상호 작용 없음"인 하나의 시스템 전원 정책만 지원합니다. 장치가 무음 모드 또는 차고 모드로 전환되면 시스템 전원 정책이 적용됩니다.

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

구성품 전원 상태 구성 가능
오디오 끄다 아니
미디어 끄다 아니
디스플레이 메인 끄다 아니
디스플레이 클러스터 끄다 아니
조수석 표시 끄다 아니
뒷좌석 승객 표시 끄다 아니
블루투스 끄다
와이파이 켜짐 아니
셀룰러 켜짐 아니
이더넷 켜짐 아니
투사 끄다 아니
NFC 끄다
입력 끄다 아니
음성 상호 작용 끄다 아니
시각적 상호 작용 끄다 아니
신뢰할 수 있는 장치 감지 켜짐
위치 끄다 아니
마이크로폰 끄다 아니
CPU 아니

VHAL과의 상호 작용

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

  • POWER_POLICY_REQ , VHAL은 이 속성에 전원 정책 ID를 씁니다.
  • POWER_POLICY_GROUP_REQ , VHAL은 전원 정책 그룹 ID를 이 속성에 기록합니다.

시스템의 현재 전원 정책은 VHAL 이외의 모듈로 변경할 수 있습니다. 이 경우 자동차 전원 정책 데몬은 CURRENT_POWER_POLICY 속성을 업데이트하여 변경 사항을 VHAL에 알립니다.

기본 프로세스와의 상호 작용

위에서 언급했듯이 자동차 전원 정책 데몬은 시스템 계층에서 실행되며 전원 정책 관리 측면에서 프레임워크 계층에서 실행되는 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);
}

Java 모듈과의 상호 작용

CarPowerManager 는 전원 정책 관리를 활성화하는 방법을 제공합니다.

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

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