참조 구현

AIDL VHAL의 참조 구현이 제공됩니다. 기본 서비스 스레드는 VehicleService.cpp에 구현됩니다. VHAL 인터페이스 구현은 DefaultVehicleHal.cpp에 있습니다.

참조 구현은 2계층 아키텍처에 기반합니다. 상위 계층 DefaultVehicleHal에서는 VHAL AIDL 인터페이스를 구현하고 모든 하드웨어 기기에 일반적인 VHAL 로직을 제공합니다. 하위 계층 FakeVehicleHardware에서는 IVehicleHardware 인터페이스를 구현합니다. 이 클래스는 실제 하드웨어 또는 차량 버스와 상호작용하는 VHAL 로직을 시뮬레이션하며 기기별로 다릅니다. 원하는 경우 공급업체는 이 동일한 아키텍처를 조정하고 동일한 DefaultVehicleHal 클래스를 재사용하고(메서드를 덮어쓰도록 확장) 자체 IVehicleHardware 구현을 제공할 수 있습니다.

VHAL 참조 구현
그림 1. VHAL 참조 구현

DefaultVehicleHal에는 일반적이라고 간주되며 VHAL 구현에 적용할 수 있는 다음 로직이 포함되어 있습니다.

  • IVehicle 인터페이스를 구현합니다.
  • 중복 ID 확인 등 기본 입력 확인을 실행합니다.
  • 각 바인더 클라이언트의 각 작업에 관해 클라이언트 객체(예: GetValuesClient)를 할당하고 각각을 전역 풀에 추가합니다.
  • 대기 중인 요청을 대기 중인 요청 풀에 추가하는 등 비동기 콜백 로직을 관리합니다. 결과를 수신할 때 대기 중인 요청을 해결하거나 대기 중인 요청 중 하나가 타임아웃될 때 오류를 반환합니다.
  • LargeParcelable을 직렬화하거나 역직렬화합니다(ParcelableUtils.h 참고).
  • 구독을 관리합니다(SubscriptionManager.h 참고).
  • 권한을 확인합니다. checkReadPermissioncheckWritePermission 함수를 참고하세요.
  • 주기적으로 IVehicleHardware.checkHealth를 호출하고 하트비트 신호를 전송합니다(checkHealth 함수 참고).

IVehicleHardware는 VHAL의 하드웨어별 구현을 나타내는 데 사용되는 일반 인터페이스입니다. IVehicleHardware의 참조 구현은 인메모리 맵을 사용하여 속성 값을 저장하고 실제 차량 버스와 통신하지 않는 FakeVehicleHardware입니다. 에뮬레이터에서 실행되기 위한 것이며 하드웨어 관련 종속 항목이 없습니다. 공급업체 구현에서는 이를 그대로 사용하면 안 되며 차량 버스 관련 로직을 추가해야 합니다.

Android 14에서 FakeVehicleHardware는 초기화 중 런타임에 JSON 스타일 구성 파일이 포함된 기기의 /vendor/etc/automotive/vhalconfig/ 폴더에서 지원되는 속성 구성을 읽습니다. 구성 파일 형식 및 구성 파일 콘텐츠는 참조 VHAL 리드미 파일을 확인하세요.

FakeVehicleHardware는 테스트를 위한 구성 파일 재정의도 지원합니다. 시스템 속성 persist.vendor.vhal_init_value_override가 설정된 경우 기기의 /vendor/etc/automotive/vhaloverride/ 폴더에 있는 구성 파일을 사용하여 기존 구성을 재정의합니다. 공급업체 구현에서는 VHAL 지원 속성 구성이 하드 코딩되지 않고 시작 시간에 동적으로 결정될 수 있도록 유사한 접근 방식을 사용할 수 있습니다. 차량 속성 구성은 기기가 시작되고 나면 정적이어야 합니다.