Memperluas deskripsi properti VHAL di emulator

Android Automotive OS (AAOS) berisi properti VHAL umum yang dapat dilihat di jendela VHAL emulator. Akibatnya, Anda dapat melihat banyak informasi tentang VHAL, termasuk nama, deskripsi, dan makna nilai. Informasi ini diekstrak dari metadata properti VHAL, yang di-hardcode ke dalam emulator QEMU.

Saat menambahkan properti VHAL Anda sendiri untuk penggunaan eksklusif di perangkat, Anda harus mengubah kode dan mem-build emulator QEMU yang disesuaikan untuk melihat metadata VHAL di jendela VHAL. Untuk mengatasi hal ini, Anda dapat menulis deskripsi Anda sendiri dalam format JSON dan menempelkannya ke image sistem.

Ringkasan

Halaman ini menjelaskan cara memperluas deskripsi properti VHAL di emulator AAOS.

Membuat metadata JSON untuk memperluas properti VHAL

Emulator mencari metadata tambahan di semua file yang diakhiri dengan -types-meta.json di jalur Perangkat Virtual Android (AVD). File JSON diharapkan terdiri dari array objek Enum seperti yang ditunjukkan di bawah.

Objek enum

Objek Enum dengan nama VehicleProperty adalah kasus khusus dalam Yang Anda dapat menganggapnya sebagai root. Kontennya ditambahkan ke peta properti kendaraan. Enums lainnya (dengan nama selain VehicleProperty) menentukan peta nama nilai kustom.

Enum: {
  "name" : String,
  "values" : Array of { ValueObject }
}  

ValueObject

ValueObject: {
  "name" : String,
  "value" : Integer,
  "data_enum" : String, VehicleProperty only, optional,
}

Untuk VehicleProperty, nama Enum menjelaskan cara properti ini ditampilkan di jendela VHAL emulator. Nilainya adalah property_id properti yang dijelaskan oleh ValueObject. data_enum mengaitkan ValueObject dengan Enum lain. Atribusi ini digunakan untuk memetakan nilai ke string yang dapat dibaca manusia dan hanya ada untuk ValueObjects di Enum untuk VehicleProperty. Contoh VehicleProperty ditampilkan di bawah ini:

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

Dalam contoh ini, property_id dengan value 289408001 disediakan sebagai name untuk CURRENT_GEAR. Di emulator, properti ini sudah di-hardcode sebagai nama, Current Gear. (Anda tidak dapat mereproduksi skenario ini karena halaman ini dibuat setelah menghapus semua properti hard code untuk tujuan demonstrasi.)

Gambar 1. VehicleProperty ditentukan dengan nama dan nilai.

Di tab Properti VHAL emulator, nama akan dimuat ulang untuk membaca CURRENT_GEAR seperti yang diharapkan.

data_enum

Pada contoh di atas, nilai yang ditampilkan adalah 4 saat gigi disetel ke P.

Gambar 2. Nilai ditampilkan sebagai 4.

Seperti yang diinginkan, pada tab VHAL Properties di emulator, namanya akan muncul sebagai CURRENT_GEAR. Hal ini berbeda dengan emulator yang ada, yang ditampilkan sebagai 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,
}

Untuk mempelajari lebih lanjut, lihat definisi AIDL.

Seperti yang ditentukan dalam AIDL, nilai roda gigi Park adalah 4, yang berarti Anda perlu menerjemahkan nilai 4 menjadi P. Hal ini terjadi saat Anda menggunakan data_enum, yang memetakan nilai properti ini ke string yang dapat dibaca manusia di Enum lain. Emulator menggunakan peta ini untuk menerjemahkan nilai properti. Contoh:

[
    {
        "name": "VehicleProperty",
        "values": [
            {
                "name": "CURRENT_GEAR",
                "value": 289408001,
                "data_enum": "VehicleGear"
            }
        ]
    },
    {
        "name": "VehicleGear",
        "values": [
            {
                "name": "GEAR_UNKNOWN",
                "value": 0
            },
            {
                "name": "GEAR_PARK",
                "value": 4
            }
        ]
    }

]

Tambahkan "data_enum": "VehicleGear", sehingga emulator menggunakan Enum bernama VehicleGear untuk menerjemahkan nilai properti. Tambahkan Enum lain bernama VehicleGear dengan nilai berupa array ValueObject, dengan nilai properti (dengan nilai) harus ditampilkan sebagai nama.

Gambar 3. Nilai ditampilkan sebagai GEAR_PARK.

Di tab VHAL Properties untuk emulator, nama akan dimuat ulang untuk membaca CURRENT_GEAR, seperti yang diharapkan. Nilai properti 4 ditampilkan sebagai GEAR_PARK.

Menggunakan metadata JSON untuk memperluas properti VHAL

Untuk menggunakan metadata JSON guna memperluas properti VHAL, jalankan skrip Python ini (terdapat dalam sumber Android) untuk membuat JSON properti yang diperluas dari informasi di AIDL.

JSON yang dihasilkan menyertakan beberapa nilai yang berlebihan, seperti change_mode, access, dan unit. Meskipun informasi ini adalah bagian dari properti VHAL, nilai JSON ini tidak memengaruhi apa yang ditampilkan di jendela properti VHAL emulator.

Menambahkan metadata JSON ke image sistem

Perhatikan bahwa nama file harus diakhiri dengan -types-meta.json. Jika tidak, file akan diabaikan.

Menambahkan target build

Tambahkan file -types-meta.json ke PRODUCT_COPY_FILE. Contoh:

PRODUCT_COPY_FILES += \
    device/generic/car/common/vehicle-types-meta.json:vehicle-types-meta.json

Kode ini menyalin file ke out/target/product/{your_target_path}/, root output target yang di-build.