Android Automotive OS(AAOS)에는 에뮬레이터의 VHAL 창에서 확인할 수 있는 일반 VHAL 속성이 포함되어 있습니다. 따라서 이름과 설명, 값의 의미 등 VHAL에 관한 여러 정보를 확인할 수 있습니다. 이 정보는 QEMU 에뮬레이터에 하드 코딩된 VHAL 속성의 메타데이터에서 추출됩니다.
기기에서 독점으로 사용하기 위해 자체 VHAL 속성을 추가하는 경우 VHAL 창에서 VHAL 메타데이터를 확인하려면 코드를 수정하고 맞춤설정된 QEMU 에뮬레이터를 빌드해야 합니다. 이 문제를 해결하려면 JSON 형식으로 자체 설명을 작성하고 시스템 이미지에 추가하면 됩니다.
개요
이 페이지에서는 AAOS 에뮬레이터에서 VHAL 속성 설명을 확장하는 방법을 자세히 설명합니다.
JSON 메타데이터를 만들어 VHAL 속성 확장
에뮬레이터는 Android Virtual Device(AVD) 경로의 -types-meta.json
으로 끝나는 모든 파일에서 추가 메타데이터를 찾습니다. JSON 파일은 아래와 같이 Enum
객체 배열로 구성되어야 합니다.
Enum 객체
이름이 VehicleProperty
인 Enum
객체는 루트로 고려할 수 있다는 점에서 특별한 사례입니다. 이 객체의 콘텐츠는 차량 속성 맵에 추가됩니다. 다른 Enums
(VehicleProperty
이외의 이름)는 맞춤 값의 이름 맵을 정의합니다.
Enum: { "name" : String, "values" : Array of { ValueObject } }
ValueObject
ValueObject: { "name" : String, "value" : Integer, "data_enum" : String, VehicleProperty only, optional, }
VehicleProperty
의 경우 Enum
이름은 이 속성이 에뮬레이터의 VHAL 창에 표시되는 방식을 설명합니다. 값은 ValueObject
로 설명된 속성의 property_id
입니다.
data_enum
은 ValueObject
를 또 다른 Enum
과 연결합니다.
이 연결은 값을 인간이 읽을 수 있는 문자열에 매핑하는 데 사용되며 VehicleProperty
의 Enum
에서 ValueObjects
를 위해서만 존재합니다.
VehicleProperty
예는 다음과 같습니다.
[ { "name": "VehicleProperty", "values": [ { "name": "CURRENT_GEAR", "value": 289408001 } ] } ]
이 예에서 value
가 289408001인 property_id
가 CURRENT_GEAR
의 name
으로 제공됩니다.
에뮬레이터에서 이 속성은 이미 Current Gear라는 이름으로 하드 코딩되어 있습니다.
이 페이지는 데모 목적으로 모든 하드 코딩 속성을 삭제한 후 작성되었으므로 이 시나리오는 재현할 수 없습니다.
그림 1. 이름과 값으로 정의된 VehicleProperty
에뮬레이터의 VHAL 속성 탭에서 이름이 예상대로 CURRENT_GEAR
로 새로고침됩니다.
data_enum
위 예에서 표시된 값은 기어가 P로 설정될 때 4입니다.
그림 2. 4로 표시된 값
의도한 대로 에뮬레이터의 VHAL 속성 탭에 이름이 CURRENT_GEAR
로 표시됩니다. 이는 이름이 P로 표시되는 기존 에뮬레이터와 대조됩니다.
enum VehicleGear { GEAR_UNKNOWN = 0x0000, GEAR_NEUTRAL = 0x0001, GEAR_REVERSE = 0x0002, GEAR_PARK = 0x0004, GEAR_DRIVE = 0x0008, GEAR_1 = 0x0010, GEAR_2 = 0x0020, GEAR_3 = 0x0040, GEAR_4 = 0x0080, GEAR_5 = 0x0100, GEAR_6 = 0x0200, GEAR_7 = 0x0400, GEAR_8 = 0x0800, GEAR_9 = 0x1000, }
자세한 내용은 AIDL 정의를 참고하세요.
AIDL에 정의된 대로 주차 기어의 값은 4입니다. 즉, 값 4를 P로 변환해야 한다는 의미입니다. 이 속성 값을 다른 Enum
의 인간이 읽을 수 있는 문자열에 매핑하는 data_enum
을 사용하는 경우가 해당됩니다. 에뮬레이터는 이 맵을 사용하여 속성 값을 변환합니다. 예:
[ { "name": "VehicleProperty", "values": [ { "name": "CURRENT_GEAR", "value": 289408001, "data_enum": "VehicleGear" } ] }, { "name": "VehicleGear", "values": [ { "name": "GEAR_UNKNOWN", "value": 0 }, { "name": "GEAR_PARK", "value": 4 } ] } ]
"data_enum": "VehicleGear"
를 추가합니다. 그러면 에뮬레이터가 VehicleGear
라는 Enum
을 사용하여 속성 값을 변환할 수 있습니다. 값이 ValueObject
배열인 VehicleGear
라는 또 다른 Enum
을 추가합니다. 여기서 속성 값(값 포함)은 이름으로 표시되어야 합니다.
그림 3. GEAR_PARK로 표시된 값
에뮬레이터의 VHAL 속성 탭에서 이름이 예상대로 CURRENT_GEAR
로 새로고침됩니다. 속성 값 4
는 GEAR_PARK
로 표시됩니다.
JSON 메타데이터를 사용하여 VHAL 속성 확장
JSON 메타데이터를 사용하여 VHAL 속성을 확장하려면 이 Python 스크립트(Android 소스에 포함됨)를 실행하여 AIDL의 정보에서 확장된 속성 JSON을 생성합니다.
결과 JSON에는 change_mode
, access
, unit
과 같은 중복 값이 포함되어 있습니다. 이 정보는 VHAL 속성의 일부이지만 이러한 JSON 값은 에뮬레이터의 VHAL 속성 창에 표시되는 내용에 영향을 미치지 않습니다.
시스템 이미지에 JSON 메타데이터 추가
파일 이름은 -types-meta.json
으로 끝나야 합니다. 그렇지 않으면 파일이 무시됩니다.
빌드 타겟 추가
-types-meta.json
파일을 PRODUCT_COPY_FILE
에 추가합니다. 예를 들면 다음과 같습니다.
PRODUCT_COPY_FILES += \ device/generic/car/common/vehicle-types-meta.json:vehicle-types-meta.json
이 코드는 빌드된 타겟 출력의 루트인 out/target/product/{your_target_path}/
에 파일을 복사합니다.