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.