하드웨어 및 소프트웨어 구성요소 (디스플레이, 오디오, 음성 상호작용 등)가 필요에 따라 선택적으로 켜지고 꺼지도록 AAOS에서는 하드웨어 및 소프트웨어 구성요소에 관한 일련의 예상 전원 켜기/끄기 상태로 구성된 전원 정책을 제공합니다. VHAL 또는 시스템 권한이 있는 공급업체 서비스는 Android 전원 상태가 전환되거나 대기 중인 조건이 충족될 때 새 전원 정책을 적용할 수 있습니다.
Wait for VHAL 및 On 상태에서 전원 정책을 적용할 수 있습니다 (일부 제한사항이 적용되는 경우 있음). Shutdown Prepare에서는 차고 모드가 실행되고 전원 상태 변경으로 인해 방해받아서는 안 됩니다. 일반 전원 정책은 적용할 수 없지만 '사용자 상호작용 없음'이라는 시스템 전원 정책인 특수 전원 정책은 Shutdown Prepare에서 적용됩니다.
AAOS 전원 상태
AAOS 기기는 다음과 같은 전원 상태 다이어그램을 따릅니다.
그림 1. AAOS 전원 상태 다이어그램
각 전원 상태는 아래에 설명되어 있습니다.
값 | 설명 |
---|---|
꺼짐 |
|
Wait for VHAL |
|
사용 |
|
종료 준비 |
|
VHAL이 완료될 때까지 기다립니다. |
|
Suspend-to-RAM(STR) |
|
Suspend-to-disk (STD) |
|
전원 정책은 어떻게 정의되나요?
구현자는 다음과 같이 /vendor/etc/automotive/power_policy.xml
에서 전원 정책을 정의합니다.
- 전원 정책을 정의합니다.
- 기본 전원 정책이 포함되고 전원 상태 전환이 발생할 때 자동으로 적용되는 전원 정책 그룹을 정의합니다.
- 시스템 전원 정책을 재정의합니다.
전원 정책
전원 정책은 하드웨어 및 소프트웨어 구성요소에 관한 일련의 예상 전원 상태로 구성됩니다. AAOS는 전원 정책에서 다음 구성요소를 지원합니다.
AUDIO MEDIA DISPLAY BLUETOOTH |
Wi-Fi 모바일 이더넷 프로젝션 |
NFC INPUT VOICE_INTERACTION VISUAL_INTERACTION |
TRUSTED_DEVICE_DETECTION LOCATION MICROPHONE CPU |
공급업체는 전원 정책과 함께 사용할 자체 맞춤 전원 구성요소를 정의할 수도 있습니다. 다음 예와 같이 전원 정책과 동일한 XML 파일에 맞춤 전원 구성요소를 정의합니다.
<customComponents>CUSTOM_COMPONENT_1000 CUSTOM_COMPONENT_SPECIAL_SENSOR CUSTOM_COMPONENT_AUX_INPUT </customComponents>
전원 정책 그룹
기본 전원 정책은 전원 정책 그룹에 지정된 전원 상태 전환 시 자동으로 적용됩니다. 공급업체는 Wait For VHAL, On, Wait for VHAL Finish (Deep Sleep Entry 또는 Shutdown Start)의 기본 전원 정책을 정의할 수 있습니다.
시스템 전원 정책
AAOS는 사용자 상호작용 없음 및 일시중지 준비라는 두 가지 시스템 전원 정책을 지원합니다. 시스템 전원 정책은 기기가 무음 모드, 차고 모드, Suspend-to-RAM 또는 Suspend-to-disk로 전환될 때 적용됩니다.
다음 표에는 시스템 전원 정책의 각 구성요소 동작이 나와 있습니다.
구현자는 사용자 상호작용 없음 시스템 전원 정책에서 블루투스, NFC, 신뢰할 수 있는 기기 감지를 재정의할 수 있습니다. 재정의는 /vendor/etc/power_policy.xml
에서 적용됩니다.
사용자 상호작용 없음
사용자 상호작용 없음 시스템 전원 정책의 동작은 이 표에 정의되어 있습니다.
구성요소 | 전원 상태 | 구성 가능 |
---|---|---|
오디오 | 꺼짐 | 아니요 |
미디어 | 꺼짐 | 아니요 |
디스플레이 | 꺼짐 | 아니요 |
블루투스 | 꺼짐 | 예 |
Wi-Fi | 사용 | 아니요 |
모바일 데이터 | 사용 | 아니요 |
이더넷 | 사용 | 아니요 |
프로젝션 | 꺼짐 | 아니요 |
NFC | 꺼짐 | 예 |
입력 | 꺼짐 | 아니요 |
어시스턴트 | 꺼짐 | 아니요 |
사용자 상호작용 | 꺼짐 | 아니요 |
사용자 로그인 시 신뢰할 수 있는 기기 감지 | 사용 | 예 |
위치 | 꺼짐 | 아니요 |
마이크 | 꺼짐 | 아니요 |
CPU | 켜짐 | 아니요 |
일시중지 준비
suspend prep 시스템 전원 정책의 동작은 이 표에 정의되어 있습니다.
구성요소 | 전원 상태 | OEM에서 구성 가능 |
---|---|---|
오디오 | 꺼짐 | 아니요 |
미디어 | 해당 사항 없음 | 아니요 |
디스플레이 | 해당 사항 없음 | 아니요 |
블루투스 | 꺼짐 | 아니요 |
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. * @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); }
자바 모듈과의 상호작용
CarPowerManager
는 다음과 같이 전원 정책 관리를 사용 설정하는 메서드를 제공합니다.
- 현재 전원 정책 가져오기
- 새 전원 정책을 적용합니다.
- 새 전원 정책 그룹을 설정합니다.
시스템 권한이 있는 모듈만 메서드를 사용할 수 있습니다. 전원 정책이 적용될 때 알림을 받으려는 모듈은 전원 정책 변경 리스너를 CarPowerManager
에 등록하면 됩니다.