Memperluas deskripsi properti VHAL di emulator

Android Automotive OS (AAOS) berisi properti VHAL umum yang dapat dilihat di jendela VHAL emulator. Hasilnya, Anda dapat melihat banyak informasi tentang VHAL termasuk nama, deskripsi, dan arti nilai-nilainya. Informasinya diekstrak dari {i>metadata<i} properti VHAL, yang dikodekan khusus ke dalam Emulator QEMU.

Saat menambahkan properti VHAL Anda sendiri untuk penggunaan eksklusif di perangkat, melihat metadata VHAL di jendela VHAL mengharuskan Anda mengubah kode dan membangun emulator QEMU yang disesuaikan. Kepada mengatasi ini, Anda dapat menulis deskripsi Anda sendiri dalam format JSON dan ke sistem Anda gambar.

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 berakhiran -types-meta.json di jalur Android Virtual Device (AVD). File JSON diharapkan terdiri dari array Enum seperti yang ditunjukkan di bawah ini.

Objek enum

Objek Enum dengan nama VehicleProperty adalah kasus khusus untuk Anda dapat menganggapnya sebagai {i>root<i}. Isinya ditambahkan ke peta properti kendaraan. Yang lain Enums (dengan nama selain VehicleProperty) menentukan peta nama nilai kustom.

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

ObjekNilai

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

Untuk VehicleProperty, nama Enum mendeskripsikan cara ditampilkan di jendela VHAL emulator. Nilainya adalah property_id properti yang dijelaskan oleh ValueObject. data_enum mengaitkan ValueObject dengan Enum lainnya. Pengaitan ini digunakan untuk memetakan nilai menjadi string yang dapat dibaca manusia dan hanya ada untuk ValueObjects dalam 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-hard code sebagai nama, Current Gear. (Anda tidak dapat mereproduksi skenario ini karena halaman ini ditulis setelah menghapus semua kode hard code properti untuk tujuan demonstrasi.)

Gambar 1. VehicleProperty yang ditentukan dengan nama dan nilai.

Di tab VHAL Properties pada emulator, nama akan dimuat ulang agar dapat dibaca CURRENT_GEAR seperti yang diharapkan.

enum_data

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

Gambar 2. Nilai ditampilkan sebagai 4.

Sebagaimana diinginkan, pada tab VHAL Properties di emulator, nama 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 AIDL definisi.

Seperti yang ditentukan dalam AIDL, nilai roda gigi Park adalah 4, yang berarti Anda perlu menerjemahkan nilai 4 ke P. Ini adalah saat Anda gunakan data_enum, yang memetakan nilai properti ini ke string yang dapat dibaca manusia Enum. 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
            }
        ]
    }

]

Menambahkan "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.

Pada tab VHAL Properties untuk emulator, nama akan dimuat ulang agar dapat dibaca 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 Anda, jalankan perintah ini Skrip Python (ada dalam sumber Android) untuk membuat JSON properti yang diperluas dari informasi di AIDL.

JSON yang dihasilkan mencakup beberapa nilai redundan, 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

Perlu diingat bahwa nama file harus diakhiri dengan -types-meta.json. Jika tidak, file tersebut 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 dibuat.