Android Automotive OS (AAOS) 包含常見的 VHAL 屬性,如下所示: 在模擬器的 VHAL 視窗中查看方便您查看豐富的資訊 VHAL 的內容,包括名稱、說明,以及值的意義。資訊 從 VHAL 屬性的中繼資料擷取,然後以硬式編碼的方式寫入 QEMU 模擬器。
如果你為裝置新增專屬的 VHAL 屬性,即可查看 VHAL 中繼資料 您需要修改程式碼並建構自訂的 QEMU 模擬器,才能使用 VHAL 視窗。目的地: 解決這個問題,您可以 JSON 格式自行撰寫說明並傳送至系統 圖片。
總覽
本頁詳細說明如何在 AAOS 模擬器中擴充 VHAL 屬性說明。
建立 JSON 中繼資料以擴充 VHAL 屬性
模擬器會在所有結尾為 -types-meta.json
的檔案中尋找其他中繼資料
安裝在 Android 虛擬裝置 (AVD) 路徑中。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 } ] } ]
在這個範例中,property_id
的 value
顯示為
289408001會以 CURRENT_GEAR
的 name
形式提供。
在模擬器中,這項屬性已經以硬式編碼的方式寫成 Current Gear。
(請注意,您無法重現這個情況,因為我們先移除所有硬式編碼後的頁面
以便進行示範)。
圖 1. 已定義名稱和值的 VehicleProperty。
模擬器的「VHAL Properties」分頁會重新整理名稱,以便讀取
目前與預期為 CURRENT_GEAR
。
資料列舉
在上述範例中,當齒輪設為 4 P。
圖 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 所定義,Park 齒輪的值是 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"
,讓模擬器使用 Enum
名為 VehicleGear
的屬性值來翻譯屬性值。新增其他Enum
名為 VehicleGear
,且值是 ValueObject
的陣列,其中
屬性值 (具有值) 應顯示為名稱。
圖 3. 顯示為 GEAR_PARK 的值。
在模擬器的「VHAL Properties」分頁中,系統會重新整理名稱以便讀取
CURRENT_GEAR
,如預期。4
的屬性值會如下所示:
GEAR_PARK
。
使用 JSON 中繼資料擴充 VHAL 屬性
如要使用 JSON 中繼資料擴充 VHAL 屬性,請執行此 Python 指令碼 (包含在 Android 原始碼中) 使用 和依附元件一樣
產生的 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}/
建構目標輸出內容