AIDL VHAL의 참조 구현이 제공됩니다. 기본 서비스 스레드는 VehicleService.cpp
에 구현됩니다.
VHAL 인터페이스 구현은 DefaultVehicleHal.cpp
에 있습니다.
참조 구현은 2계층 아키텍처에 기반합니다. 상위 계층 DefaultVehicleHal
에서는 VHAL AIDL 인터페이스를 구현하고 모든 하드웨어 기기에 일반적인 VHAL 로직을 제공합니다. 하위 계층 FakeVehicleHardware
에서는 IVehicleHardware
인터페이스를 구현합니다. 이 클래스는 실제 하드웨어 또는 차량 버스와 상호작용하는 VHAL 로직을 시뮬레이션하며 기기별로 다릅니다. 원하는 경우 공급업체는 이 동일한 아키텍처를 조정하고 동일한 DefaultVehicleHal
클래스를 재사용하고(메서드를 덮어쓰도록 확장) 자체 IVehicleHardware
구현을 제공할 수 있습니다.
DefaultVehicleHal
에는 일반적이라고 간주되며 VHAL 구현에 적용할 수 있는 다음 로직이 포함되어 있습니다.
IVehicle
인터페이스를 구현합니다.- 중복 ID 확인 등 기본 입력 확인을 실행합니다.
- 각 바인더 클라이언트의 각 작업에 관해 클라이언트 객체(예:
GetValuesClient
)를 할당하고 각각을 전역 풀에 추가합니다. - 대기 중인 요청을 대기 중인 요청 풀에 추가하는 등 비동기 콜백 로직을 관리합니다. 결과를 수신할 때 대기 중인 요청을 해결하거나 대기 중인 요청 중 하나가 타임아웃될 때 오류를 반환합니다.
LargeParcelable
을 직렬화하거나 역직렬화합니다(ParcelableUtils.h
참고).- 구독을 관리합니다(
SubscriptionManager.h
참고). - 권한을 확인합니다.
checkReadPermission
및checkWritePermission
함수를 참고하세요. - 주기적으로 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 지원 속성 구성이 하드 코딩되지 않고 시작 시간에 동적으로 결정될 수 있도록 유사한 접근 방식을 사용할 수 있습니다.
차량 속성 구성은 기기가 시작되고 나면 정적이어야 합니다.