擴充模擬器中的 VHAL 屬性說明

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 物件,如下所示。

列舉物件

名為 VehiclePropertyEnum 物件是特殊案例 可以視為根其內容會新增至車輛屬性地圖。其他 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_iddata_enum 會將 ValueObject 與另一個 Enum 建立關聯。 此關聯用於將值對應至人類可讀的字串,且只存在於 VehiclePropertyEnum 中的 ValueObjectsVehicleProperty 範例如下:

[
  {
      "name": "VehicleProperty",
      "values": [
          {
              "name": "CURRENT_GEAR",
              "value": 289408001
          }
      ]
  }
]

在這個範例中,property_idvalue 顯示為 289408001會以 CURRENT_GEARname 形式提供。 在模擬器中,這項屬性已經以硬式編碼的方式寫成 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_modeaccessunit。雖然這些資訊是 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}/ 建構目標輸出內容