전원 관리

Android는 완전 절전이라는 새로운 상태를 전원 관리 상태 시스템에 도입했습니다. 최대 절전을 구현하기 위해 Android는 CarPowerManagementService 서비스와 CarPowerManager 인터페이스를 제공합니다.

상태 전환은 VMCU(Vehicle Master Control Unit)가 트리거합니다. VMCU와 통신하기 위해 통합자는 여러 구성요소를 구현해야 합니다. VHAL(Vehicle Hardware Abstraction Layer) 및 커널 구현과의 통합은 통합자의 책임입니다. 또한 소스 절전 모드 해제를 사용 중지하고 시스템 종료가 무기한으로 연기되지 않도록 해야 합니다.

용어

다음 용어는 이 문서 전체에서 사용됩니다.

용어 설명
AP(애플리케이션 프로세서) SoC(단일 칩 시스템)의 일부
BSP(Board Support Processor) 제품이 작동하는 데 필요한 모든 칩 및 하드웨어 관련 코드. 일반적으로 SoC 공급업체 및 하드웨어 제조업체에서 제공합니다. 여기에는 기기 드라이버, PMIC 시퀀싱 코드, SoC bringup 등의 항목이 포함됩니다.
CPM(CarPowerManager) 애플리케이션이 전원 상태 변경을 등록하도록 API를 노출합니다.
CPMS(CarPowerManagementService) 자동차 전원 상태 시스템을 구현하고, VHAL과 접속하고, suspend()shutdown()에 대한 마지막 호출을 수행합니다.
CSHS(CarServiceHelperService) Car Service인 경우 OK를 얻기 위해 SystemServer에 후크를 제공합니다.
GPIO(범용 입력/출력) 범용 디지털 신호 핀입니다.
최대 절전 모드 Suspend to Disk(S2D/S4)라고도 합니다. SoC는 S4 전원 모드(최대 절전 모드)로 설정되고 RAM 콘텐츠는 플래시나 디스크와 같은 비 휘발성 미디어에 기록되며 전체 시스템의 전원이 꺼집니다. Android는 현재 최대 절전 모드를 구현하지 않습니다.
MP(미디어 프로세서) SoC(단일 칩 시스템)를 참조하세요.
PMIC(Power Management Integrated Circuit) 칩은 호스트 시스템의 전원 요구사항을 관리하는 데 사용됩니다.
SoC(단일 칩 시스템) 일반적으로 Intel, MediaTek, Nvidia, Qualcomm, Renesas 및 Texas Instruments와 같은 제조업체에서 제공하는 Android를 실행하는 메인 프로세서.
정지 Suspend to RAM(S2R 또는 STR)이라고도 합니다. SoC는 S3 전원 모드로 설정되고 RAM 전원이 켜져 있는 동안 CPU의 전원은 꺼집니다.
VHAL(차량 HAL) Vehicle 네트워크와의 접속에 사용되는 Android API입니다. Tier 1 파트너 또는 OEM은이 모듈을 작성할 책임이 있습니다. 차량 네트워크는 CAN, LIN, MOST, 이더넷 등 모든 물리적 레이어를 사용할 수 있습니다. VHAL은 차량 네트워크를 추상화하여 Android가 차량과 상호 작용할 수 있도록 합니다.
VIP(차량 인터페이스 프로세서) 차량 MCU를 참조하세요.
VMCU(Vehicle Master Control Unit) 차량 네트워크와 SoC 간의 인터페이스를 제공하는 마이크로 컨트롤러입니다. SoC는 USB, UART, SPI 및 GPIO 신호를 통해 VMCU와 통신합니다.

시스템 설계

이 섹션에서는 Android가 애플리케이션 프로세서의 전원 상태를 나타내는 방식과 전원 관리 시스템을 구현하는 모듈에 대해 설명합니다. 또한 이 자료에서는 이러한 모듈이 함께 작동하는 방식과 일반적으로 상태 전환이 발생하는 방식을 설명합니다.

자동차 전원 상태 시스템

Android는 상태 시스템을 사용하여 AP의 전원 상태를 나타냅니다. 상태 시스템은 다음과 같은 상태를 제공합니다.

자동차 전원 상태 시스템

그림 1. 자동차 전원 상태 시스템

이 상태 시스템의 초기 상태는 OFF입니다. 이 상태는 ON: DISP OFF 및 ON: FULL, 이렇게 두 상태로 전환할 수 있습니다. 두 상태 모두 AP가 켜져 있음을 나타냅니다. 차이점은 디스플레이의 전원 상태에 있습니다. ON: DISP OFF는 AP가 실행 중이며 디스플레이가 꺼져 있음을 나타냅니다. 디스플레이가 켜지면 ON: DISP OFF 상태가 ON: FULL로 바뀝니다. 그 반대의 경우도 마찬가지입니다.

AP는 두 가지 경우 모두 꺼집니다. 두 경우 모두 상태 시스템은 먼저 SHUTDOWN PREPARE 상태로 바뀐 다음 OFF 또는 DEEP SLEEP으로 전환합니다.

  • 종료
  • RAM에 정지됨

전원 관리 상태 시스템이 DEEP SLEEP 상태가 되면 AP는 Suspend to RAM을 실행합니다. 예를 들어 AP는 RAM에서 상태를 정지합니다(예: 저장된 값 등록). AP의 절전 모드가 해제되면 모든 상태가 복원됩니다.

전원 관리 모듈

전원 관리 시스템은 다음 모듈로 구성됩니다.

모듈 이름 설명
CarPowerManager Java/C++ API.
CarPowerManagementService 절전/정지 전원 상태를 조정합니다.
차량 HAL VMCU에 접속합니다.
libsuspend 기기를 정지 상태로 만드는 네이티브 라이브러리입니다.
커널 RAM 구현으로 정지합니다.

완전 절전 기능(Android를 RAM으로 정지)은 커널에서 구현됩니다. 이 기능은 /sys/power/state 에있는 특수 파일로 사용자 공간에 노출됩니다. 이 파일에 mem을 쓰면 Android Auto가 정지됩니다.

libsuspendforcesuspend()를 구현하는 네이티브 라이브러리입니다. 이 함수는 /sys/power/state를 사용하여 Android Auto를 정지합니다. forcesuspend()는 CPMS를 비롯한 시스템 서비스에서 호출할 수 있습니다.

CPMS는 다른 서비스 및 HAL과 함께 전원 상태를 조정합니다. CPMS는 위에 설명된 상태 시스템을 구현하고 전원 상태 전환이 발생할 때 모든 관찰자에게 알림을 보냅니다. 이 서비스는 libsuspend 및 VHAL을 사용하여 하드웨어로 메시지를 전송합니다.

일부 속성은 VHAL에 정의되어 있습니다. VMCU와 통신하기 위해 CPMS는 이러한 속성을 읽고 씁니다. 애플리케이션은 CPM에 정의된 인터페이스를 사용하여 전원 상태 변경사항을 모니터링할 수 있습니다. 또한 이 인터페이스를 통해 애플리케이션은 부팅 이유를 획득하고 종료 요청을 보낼 수 있습니다. 이 API는 Java 및 C ++에서 호출할 수 있으며 @hide / @System API로 주석 처리되어 권한이 있는 응용 프로그램에서만 사용할 수 있음을 의미합니다. 5개의 모듈, 애플리케이션 및 서비스 간의 관계는 다음과 같습니다.

전력 구성요소 참조 다이어그램

그림 2. 전력 구성요소 참조 다이어그램

메시지 시퀀스

이전 섹션에서는 전원 관리 시스템을 구성하는 모듈에 대해 설명했습니다. 이 섹션에서는 완전 절전으로 전환완전 절전 종료 예제를 사용하여 모듈과 애플리케이션 간의 통신 방법을 설명합니다.

완전 절전으로 전환

VMCU만 완전 절전을 시작할 수 있습니다. 완전 절전이 시작되면 VMCU는 VHAL을 통해 CPMS로 알림을 전송합니다. CPMS는 상태를 SHUTDOWN PREPARE로 변경하고 CPM에서 제공하는 새 상태 ID로 onStateChanged() 메서드를 호출하여 모든 관찰자(CPMS를 모니터링하는 애플리케이션 및 서비스)에게 상태 전환을 전달합니다.

CPM은 애플리케이션/서비스와 CPMS 사이에서 중재합니다. 애플리케이션/서비스에 대한 onStateChanged() 메서드는 CPM의 onStateChanged() 메서드에서 동기식으로 호출됩니다. CPMS의 완료된 메서드는 타겟 애플리케이션 또는 서비스가 중지될 준비가 되었음을 CPMS에 통지하기 위해 호출됩니다. CPM의 onStateChanged() 메서드는 비동기적으로 실행됩니다. 따라서 모든 CPM 객체에 대한 onStateChanged() 메서드 호출하고 이러한 모든 객체에서 완료된 메시지를 수신하는 사이에 약간의 지연이 발생합니다. 이 시간 동안 CPMS는 VHAL에 대한 종료 연기 요청을 계속 전송합니다.

CPMS가 모든 CPM 객체로부터 완료된 메시지를 수신하면 CPMS는 AP_POWER_STATE_REPORT를 VHAL로 전송한 다음 AP가 정지될 준비가 되었음을 VMCU에 알립니다. 또한 CPMS는 libsuspend에서 제공하는 기능을 사용해 커널을 정지하는 자체 정지 메서드를 호출합니다.

위에서 설명한 순서는 다음과 같습니다.

완전 절전으로 전환

그림 3. 완전 절전으로 전환

완전 절전 종료

정지를 종료하는 시퀀스도 VMCU가 시작합니다. VMCU가 AP를 켜고 AP가 정지된 Android를 RAM에서 복원합니다. CPMS는 절전 모드 해제 시 onStateChanged 메서드를 사용해 애플리케이션 및 서비스에 SUSPEND_EXIT 메시지를 전송합니다.

이유에 액세스하기 위해 애플리케이션 및 서비스는 CPM에서 제공하는 getBootReason() 메서드를 호출할 수 있습니다. 이 메서드는 VMCU에서 VHAL에 알린 대로 다음 값을 반환합니다.

  • BOOT_REASON_USER_POWER_ON
  • BOOT_REASON_DOOR_UNLOCK
  • BOOT_REASON_TIMER
  • BOOT_REASON_DOOR_OPEN
  • BOOT_REASON_REMOTE_START

완전 절전 종료

그림 4. 완전 절전 종료

CPM에서 제공하는 프로그래밍 인터페이스

이 섹션에서는 CPM에서 시스템 애플리케이션 및 서비스를 위해 제공하는 Java 및 C ++ API에 대해 설명합니다. C++에서 CPM을 호출하는 프로세스는 Java API에서 사용하는 프로세스와 동일합니다. 이 API를 사용하면 시스템 소프트웨어에서 다음 작업을 수행할 수 있습니다.

  • AP의 전원 상태 변경사항을 모니터링합니다.
  • CPMS에서 부팅 이유를 획득합니다.
  • VMCU에 다음 정지 명령에서 AP를 종료하도록 요청합니다.

com.google.android.car.kitchensink.powerPowerTestFragment.java는 이러한 API를 자바에서 사용하는 방법을 보여줍니다. 다음 단계에 따라 CPM에서 제공하는 API를 호출합니다.

  1. CPM 인스턴스를 획득하려면 자동차 API를 호출합니다.
  2. 1단계에서 만든 객체에 대해 적절한 메서드를 호출합니다.

CarPowerManager 객체 만들기

CPM 객체를 만들려면 자동차 객체의 getCarManager() 메서드를 호출합니다. 이 메서드는 CM 객체를 만드는 데 사용되는 파사드입니다. android.car.Car.POWER_SERVICE를 인수로 지정하여 CPM 객체를 만듭니다.

    Car car = Car.createCar(this, carCallbacks);
    car.connect();
    CarPowerManager powerManager =
      (CarPowerManager)car.getCarManager(android.car.Car.POWER_SERVICE);
    

CarPowerStateListener 및 등록

시스템 애플리케이션과 서비스는 CarPowerManager.CarPowerStateListener를 구현하여 전원 상태 변경 알림을 수신할 수 있습니다. 이 인터페이스는 CPMS의 전원 상태가 변경될 때 호출되는 콜백 함수인 onStateChanged() 메서드 하나를 정의합니다. 다음 예제에서는 인터페이스를 구현하는 새로운 익명 클래스를 정의합니다.

    private final CarPowerManager.CarPowerStateListener listener =
      new CarPowerManager.CarPowerStateListener () {
        @Override
         public void onStateChanged(int state) {
           Log.i(TAG, "onStateChanged() state = " + state);
         }
    };
    

이 리스너 객체가 전원 상태 변환을 모니터링하도록 지시하려면 새 실행 스레드를 만들고 PM 객체에 해당 리스너와 이 스레드를 등록합니다.

    executer = new ThreadPerTaskExecuter();
    powerManager.setListener(powerListener, executer);
    

전원 상태가 변경되면 리스너 객체의 onStateChanged() 메서드가 새 전원 상태를 나타내는 값과 함께 호출됩니다. 실제 값과 전원 상태 간의 연관성은 CarPowerManager.CarPowerStateListener에서 정의되며 다음 표에 나와 있습니다.

이름 설명
SHUTDOWN_CANCELED 종료가 취소되고 전원 상태가 정상 상태로 돌아갑니다.
SHUTDOWN_ENTER 종료 상태로 전환됩니다. 애플리케이션은 정리되어 종료할 준비가 되어야 합니다.
SUSPEND_ENTER 정지 상태로 전환합니다. 애플리케이션은 정리되어 정지할 준비가 되어야 합니다.
SUSPEND_EXIT 정지 상태에서 해제되거나 취소된 정지 상태에서 다시 시작합니다.

CarPowerStateListener 등록 취소

CPM에 등록된 모든 리스너 객체를 등록 취소하려면 clearListener 메서드를 호출합니다.

    powerManager.clearListener();
    

부팅 이유 획득

부팅 이유를 획득하려면 CPMS와 통신하는 getBootReason 메서드를 호출하고 다음 5가지 부팅 이유 중 하나를 반환합니다.

이름 설명
BOOT_REASON_USER_POWER_ON 사용자가 전원 키를 누르거나 점화 스위치를 돌려 기기를 부팅합니다.
BOOT_REASON_DOOR_UNLOCK 도어가 잠금 해제되어 기기가 부팅됩니다.
BOOT_REASON_TIMER 타이머가 만료되고 차량이 AP의 절전 모드를 해제합니다.
BOOT_REASON_DOOR_OPEN 도어가 열려 기기가 부팅됩니다.
BOOT_REASON_REMOTE_START 사용자가 원격 시작을 활성화합니다.

이러한 부팅 이유는 CPM에 정의되어 있습니다. 다음 샘플 코드는 부팅 이유 획득을 보여줍니다.

    try{
      int bootReason = carPowerManager.getBootReason();
      if (bootReason == CarPowerManager.BOOT_REASON_TIMER){
        doSomething;
      }else{
        doSomethingElse();
      }
    }catch(CarNotConnectedException e){
       Log.e("Failed to getBootReason()" + e);
    }
    

이 메서드는 CPMS와 통신에 실패할 때 CarNotConnectedException을 발생시킵니다.

다음 정지 시 종료 요청

requestShutdownOnNextSuspend() 메서드는 다음 기회에 완전 절전 대신 종료하도록 CPMS에 지시합니다.

Android 구현 시 시스템 통합

통합자는 다음 항목을 구현해야 합니다.

  • Android를 정지하는 커널 인터페이스
  • 다음 작업을 수행하는 VHAL:
    • 자동차에서 Android로 정지 또는 종료의 시작을 전파합니다.
    • Android에서 자동차로 종료 준비 메시지를 보냅니다.
    • Linux 커널 인터페이스를 통해 Android의 종료 또는 정지를 시작합니다.
    • 정지 상태에서 다시 시작할 때 자동차에서 Android로 절전 모드 해제 이유를 전파합니다.
  • 기기가 정지 상태 일 때 사용 중지되는 Wakesource
  • 종료 프로세스를 무기한 연기하지 않도록 충분히 빠르게 종료하는 애플리케이션

커널 인터페이스: /sys/power/state

먼저, Linux 정지 전원 상태를 구현합니다. 애플리케이션 또는 서비스가 /sys/power/state.에 있는 파일에 mem을 쓸 때 Android는 기기를 정지 모드로 전환합니다. 이 함수에는 VMCU로 GPIO 전송이 포함되어 있어 VMCU에 기기가 완전히 종료되었음을 알릴 수 있습니다. 통합자는 최종 메시지를 VMCU로 전송하는 VHAL과 정지 또는 종료 모드로 전환되는 시스템 간의 경합 상태도 삭제합니다.

VHAL의 책임

VHAL은 차량 네트워크와 Android 간의 인터페이스를 제공합니다. VHAL은 다음 작업을 수행합니다.

  • 자동차에서 Android로 정지 또는 종료 시작을 전파합니다.
  • Android에서 자동차로 종료 준비 완료 메시지를 보냅니다.
  • Linux 커널 인터페이스를 통해 Android 종료 또는 정지를 시작합니다.
  • 정지 상태에서 다시 시작할 때 자동차에서 Android로 절전 모드 해제 이유를 전파합니다.

CPMS가 VHAL에 종료 준비가 되었음을 알리면 VHAL은 VMCU에 종료 준비 완료 메시지를 보냅니다. 일반적으로 UART, SPI 및 USB와 같은 단일 칩 주변기기가 메시지를 전송합니다. 메시지가 전송되면 VHAL은 커널 명령을 호출하여 기기를 정지하거나 종료합니다. 그 전에 종료하는 경우 VHAL 또는 BSP가 GPIO를 전환하여 VMCU에 기기에서 전원을 제거하는 것이 안전하다고 알릴 수 있습니다.

VHAL은 VHAL을 통해 전원 관리를 제어하는 다음 속성을 지원해야 합니다.

이름 설명
AP_POWER_STATE_REPORT Android는 VehicleApPowerStateSet enum 값을 사용하여 이 속성과 함께 VMCU에 상태 전환을 보고합니다.
AP_POWER_STATE_REQ VMCU는 VehicleApPowerStateReq enum 값과 이 속성을 사용하여 Android를 다른 전원 상태로 전환하도록 지시합니다.
AP_POWER_BOOTUP_REASON VMCU는 VehicleApPowerBootupReason enum 값을 사용하여 Android에 절전 모드 해제 이유를 보고합니다.

AP_POWER_STATE_REPORT

이 속성을 사용하여 Android의 현재 전원 관리 상태를 보고합니다. 이 속성에는 다음 두 개의 정수가 포함됩니다.

  • int32Values[0]: 현재 상태의 VehicleApPowerStateReport enum입니다.
  • int32Values[1]: 연기하거나 절전/종료할 시간을 밀리초 단위로 표시합니다. 이 값은 첫 번째 값에 따라 다릅니다.

첫 번째 값은 다음 값 중 하나를 사용할 수 있습니다. Types.hal에는 보다 구체적인 설명이 들어 있는데, 이러한 설명은 hardware/interfaces/automotive/vehicle/2.0.에 저장되어 있습니다.

값 이름 설명 두 번째 값
BOOT_COMPLETE AP가 부팅을 완료했으며 종료를 시작할 수 있습니다.
DEEP_SLEEP_ENTRY AP가 완전 절전 상태로 전환됩니다. 설정해야 함
DEEP_SLEEP_EXIT AP가 완전 절전 상태를 종료합니다.
SHUTDOWN_POSTPONE Android에서 종료 연기를 요청하는 중입니다. 설정해야 함
SHUTDOWN_START AP가 종료를 시작합니다. VMCU는 두 번째 값에 지정된 시간이 지나면 AP를 켤 수 있습니다. 설정해야 함
DISPLAY_OFF 사용자가 헤드 유닛의 디스플레이를 끄도록 요청했습니다.
DISPLAY_ON 사용자가 헤드 유닛의 디스플레이를 켜도록 요청했습니다.

상태는 비동기식으로 설정하거나(BOOT_COMPLETE의 경우) VMCU를 통해 요청에 응답하여 설정할 수 있습니다. 상태가 SHUTDOWN_START, DEEP_SLEEP_ENTRY, 또는 SHUTDOWN_POSTPONE으로 설정된 경우 AP에서 종료 또는 절전을 지연해야 하는 기간을 VMCU에 알리기 위해 정수(밀리초 단위)로 전송합니다.

AP_POWER_STATE_REQ

이 속성은 VMCU에서 Android를 다른 전원 상태로 전환하기 위해 전송하며, 다음 두 개의 정수를 포함합니다.

  • int32Values[0]: VehicleApPowerStateReq enum 값. 전환할 새 상태를 나타냅니다.
  • int32Values[1]: VehicleApPowerStateShutdownParam enum 값. 이 값은 SHUTDOWN_PREPARE 메시지에 대해서만 전송되며 Android에 이 값이 포함된 옵션을 전송합니다.

첫 번째 정수 값은 Android가 전환할 새 상태를 나타냅니다. 의미는 types.hal에 정의되어 있으며, 다음과 같습니다.

값 이름 설명
OFF AP가 꺼져 있습니다.
DEEP_SLEEP AP가 완전 절전 상태입니다.
ON_DISP_OFF AP가 켜져 있지만 디스플레이는 꺼져 있습니다.
ON_FULL AP 및 디스플레이가 켜져 있습니다.
SHUTDOWN_START AP가 종료를 시작합니다. 두 번째 값에 지정된 시간이 지나면 VMCU가 AP를 켤 수 있습니다.
SHUTDOWN_PREPARE VMCU가 AP에 종료를 요청했습니다. AP는 절전 모드로 전환되거나 완전 종료를 시작할 수 있습니다.

VehicleApPowerStateShutdownParamtypes.hal에도 정의되어 있습니다. 이 enum에는 세 가지 요소가 포함되어 있는데, 그 설명은 아래에 나와 있습니다.

값 이름 설명
SHUTDOWN_IMMEDIATELY AP는 즉시 종료해야 합니다. 연기는 허용되지 않습니다.
CAN_SLEEP AP가 완전히 종료하는 대신 완전 절전 모드로 전환할 수 있습니다.
SHUTDOWN_ONLY AP는 연기가 허용된 경우에만 종료할 수 있습니다.

AP_POWER_BOOTUP_REASON

이 속성은 Android가 부팅되거나 정지 상태에서 다시 시작될 때마다 VMCU에서 설정합니다. 이 속성은 어떤 이벤트가 절전 모드 해제를 트리거하는지 Android에 알립니다. Android가 재부팅되거나 정지/절전 모드 해제 주기를 완료할 때까지 이 값은 정적 상태로 남아 있습니다. 이 속성은 types.hal에 다음과 같이 정의되어 있는 VehicleApPowerBootupReason 값을 사용할 수 있습니다.

값 이름 설명
USER_POWER_ON 사용자가 전원 키를 누르거나 시동 스위치를 돌렸기 때문에 전원이 켜집니다.
USER_UNLOCK 사용자가 도어를 잠금 해제하여(또는 다른 유형의 자동 사용자 감지로 인해) 자동 전원 켜기가 트리거됩니다.
TIMER 타이머에 의해 트리거되는 자동 전원 켜기. VehicleApPowerSetState#SHUTDOWN_START에 지정된 특정 기간이 지난 후 AP가 절전 모드 해제를 요청한 경우에만 발생합니다.

절전 모드 해제 소스

통합자를 사용하여 기기가 정지 모드일 때 적절한 절전 모드 해제 소스를 사용 중지합니다. 일반적인 절전 모드 해제 소스에는 하트비트, 모뎀,wifi 및 블루투스 등이 있습니다. 유일하게 유효한 절전 모드 해제 소스는 SoC의 절전 모드를 해제하기 위한 VMCU의 인터럽트입니다. 이 경우에는 VMCU가 원격 엔진 시작과 같은 원격 절전 모드 해제 이벤트에 대해 모뎀을 수신할 수 있다고 가정합니다. 이 기능이 AP에 푸시되면 모뎀을 서비스하는 또 다른 절전 모드 해제 소스를 추가해야 합니다. 현재 설계에서 통합자는 꺼야 할 절전 모드 해제 소스 목록과 함께 파일을 제공합니다. CPMS는이 파일을 반복하고 정지 시 절전 모드 해제 소스를 껐다가 켭니다.

애플리케이션

OEM은 신속하게 종료하고 프로세스를 무기한 연기할 수 없도록 애플리케이션을 주의 깊게 작성해야 합니다.

부록

소스 코드 트리의 디렉터리

콘텐츠 디렉토리
CarPowerManager 관련 코드 packages/services/Car/car-lib/src/android/car/hardware/power
CarPowerManagementService 등 packages/services/Car/service/src/com/android/car
VehicleHalHAlClient 등 VHAL을 처리하는 서비스 packages/services/Car/service/src/com/android/car/hal
VHAL 인터페이스 및 속성 정의 hardware/interfaces/automotive/vehicle/2.0
CarPowerManager에 대한 몇 가지 아이디어를 제공하는 샘플 앱 packages/services/Car/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink
이 디렉토리에 상주하는 libsuspend system/core/libsuspend

클래스 다이어그램

다음 클래스 다이어그램은 전원 관리 시스템의 Java 클래스와 인터페이스를 보여줍니다.

전원 클래스 다이어그램

그림 5. 전원 클래스 다이어그램

객체 관계

다음 그래프는 다른 객체에 대한 참조가 있는 객체를 보여줍니다. 에지는 소스 객체가 타겟 객체에 대한 참조를 보유한다는 것을 의미합니다. 예를 들어 VehicleHAL에는 PropertyHalService 객체에 대한 참조가 있습니다.

객체 참조 다이어그램

그림 6. 객체 참조 다이어그램