Perluas 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 sekali informasi tentang VHAL termasuk nama, deskripsi, dan arti nilainya. Informasi tersebut diekstraksi dari metadata properti VHAL, yang dikodekan secara permanen ke dalam emulator QEMU .

Saat Anda menambahkan properti VHAL Anda sendiri untuk penggunaan eksklusif di perangkat Anda, melihat metadata VHAL di jendela VHAL mengharuskan Anda mengubah kode dan membuat emulator QEMU yang disesuaikan. Untuk mengatasinya, Anda dapat menulis deskripsi Anda sendiri dalam format JSON dan memasukkannya ke image sistem Anda.

Ringkasan

Halaman ini merinci bagaimana Anda dapat memperluas deskripsi properti VHAL di emulator AAOS.

Buat metadata JSON untuk memperluas properti VHAL

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

objek enum

Objek Enum dengan nama VehicleProperty adalah kasus khusus yang dapat Anda anggap sebagai root. Isinya ditambahkan ke peta properti kendaraan. Enums lainnya (dengan nama selain VehicleProperty ) menentukan peta nama nilai khusus.

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

NilaiObjek

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

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

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

Dalam contoh ini, property_id dengan value 289408001 diberikan sebagai name untuk CURRENT_GEAR . Di emulator, properti ini sudah dikodekan dengan 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 didefinisikan dengan nama dan nilai.

Di tab Properti VHAL emulator, nama disegarkan agar terbaca CURRENT_GEAR seperti yang diharapkan.

data_enum

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

Gambar 2. Nilai ditampilkan sebagai 4.

Sesuai keinginan, pada tab Properti VHAL di emulator, namanya 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 .

Sebagaimana didefinisikan dalam AIDL, nilai roda gigi Park adalah 4 , yang berarti Anda perlu menerjemahkan nilai 4 menjadi P . Ini adalah 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. Misalnya:

[
    {
        "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 , di mana nilai properti (dengan nilai) harus ditampilkan sebagai nama.

Gambar 3. Nilai ditampilkan sebagai GEAR_PARK.

Pada tab Properti VHAL untuk emulator, nama disegarkan agar terbaca CURRENT_GEAR , seperti yang diharapkan. Nilai properti 4 ditampilkan sebagai GEAR_PARK .

Gunakan metadata JSON untuk memperluas properti VHAL

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

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

Tambahkan metadata JSON ke citra sistem

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

Tambahkan target pembangunan

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

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}/ , akar dari output target yang Anda buat.