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
オブジェクトの配列で構成されていることが想定されます。
列挙型オブジェクト
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 } ] } ]
この例では、289408001 という value
を持つ property_id
が CURRENT_GEAR
の name
として提供されています。エミュレータでは、このプロパティはすでに Current Gear という名前としてハードコードされています(デモ用にハードコードされたプロパティをすべて削除した後にこのページは作成されたため、このシナリオを再現することはできません)。
図 1. 名前と値で定義された VehicleProperty。
エミュレータの [VHAL Properties] タブで、名前が想定どおりに CURRENT_GEAR
に更新されます。
data_enum
上の例では、ギアが P に設定されているときに値が 4 と表示されます。
図 2. 4 として表示されている値。
意図したとおり、エミュレータの [VHAL Properties] タブで、名前が 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 に変換する必要があります。data_enum
を使用し、このプロパティ値を別の 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
を使ってプロパティ値を変換するようにします。VehicleGear
という名前の別の Enum
を追加し、値は ValueObject
の配列とします。プロパティ値(値を含む)は名前として表示される必要があります。
図 3. GEAR_PARK として表示された値。
エミュレータの [VHAL Properties] タブで、想定どおり名前が 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}/
にファイルを複製します。