하드웨어 및 소프트웨어 구성요소(디스플레이, 오디오, 음성 상호작용 등)가 필요에 따라 선택적으로 켜지고 꺼지도록 AAOS에서는 하드웨어 및 소프트웨어 구성요소에 관한 일련의 예상 전원 켜기/끄기 상태로 구성된 전원 정책을 제공합니다. VHAL 또는 시스템 권한이 있는 공급업체 서비스는 Android 전원 상태가 전환되거나 대기 중인 조건이 충족될 때 새 전원 정책을 적용할 수 있습니다.
Wait for VHAL 및 On 상태에서 전원 정책을 적용할 수 있습니다. Shutdown Prepare에서는 차고 모드가 실행되고 전원 상태 변경으로 인해 방해받아서는 안 됩니다. 일반 전원 정책은 적용할 수 없지만 '사용자 상호작용 없음'이라는 시스템 전원 정책인 특수 전원 정책은 Shutdown Prepare에서 적용됩니다.
AAOS 전원 상태
AAOS 기기는 다음과 같은 전원 상태 다이어그램을 따릅니다.
그림 1. AAOS 전원 상태 다이어그램
각 전원 상태는 아래에 설명되어 있습니다.
값 | 설명 |
---|---|
Off | 전원이 애플리케이션 프로세서(AP), 메모리, 주변기기에 물리적으로 제공되지 않습니다. |
Wait for VHAL |
|
On |
|
Shutdown Prepare |
|
Wait for VHAL to Finish |
|
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
에 등록하면 됩니다.