Kami menyediakan
implementasi referensi
untuk VHAL AIDL. Thread layanan utama diimplementasikan
di
VehicleService.cpp
.
Implementasi antarmuka VHAL terletak di
DefaultVehicleHal.cpp
.
Implementasi referensi didasarkan pada arsitektur dua lapisan. Di lapisan atas,
DefaultVehicleHal
, mengimplementasikan antarmuka AIDL VHAL dan menyediakan logika VHAL
generik untuk semua perangkat keras. Di lapisan bawah, FakeVehicleHardware
,
menerapkan antarmuka IVehicleHardware
. Class ini menyimulasikan logika VHAL
untuk berinteraksi dengan hardware atau bus kendaraan yang sebenarnya dan khusus untuk perangkat. Secara opsional, vendor dapat mengadaptasi arsitektur yang sama ini, menggunakan kembali class DefaultVehicleHal
yang sama (memperluasnya untuk mengganti metode), dan menyediakan implementasi IVehicleHardware
mereka sendiri.
DefaultVehicleHal
berisi logika berikut, yang dianggap generik dan dapat diterapkan ke penerapan VHAL
apa pun.
- Mengimplementasikan antarmuka
IVehicle
. - Melakukan pemeriksaan input dasar, termasuk pemeriksaan untuk ID duplikat.
- Mengalokasikan objek klien (misalnya,
GetValuesClient
) untuk setiap operasi bagi setiap klien binder, dan menambahkan setiap objek ke kumpulan global. - Mengelola logika callback asinkron, seperti menambahkan permintaan yang tertunda ke kumpulan permintaan yang tertunda. Menyelesaikan permintaan yang menunggu persetujuan saat kita menerima hasil atau menampilkan error saat salah satu permintaan yang menunggu persetujuan kehabisan waktu.
- Melakukan serialisasi dan deserialisasi
LargeParcelable
(lihatParcelableUtils.h
). - Mengelola langganan (lihat
SubscriptionManager.h
). - Memeriksa izin. (Lihat fungsi
checkReadPermission
dancheckWritePermission
). - Memanggil
IVehicleHardware.checkHealth
secara berkala dan mengirim sinyal detak jantung (lihat fungsicheckHealth
).
IVehicleHardware
adalah antarmuka generik yang digunakan untuk merepresentasikan implementasi
spesifik hardware VHAL. Implementasi referensi untuk IVehicleHardware
adalah
FakeVehicleHardware
,
yang menggunakan peta dalam memori untuk menyimpan nilai properti dan
tidak berkomunikasi dengan bus kendaraan yang sebenarnya. Tujuannya adalah untuk dijalankan di emulator dan tidak memiliki
dependensi khusus hardware. Implementasi vendor tidak boleh menggunakannya apa adanya dan harus menambahkan logika khusus bus kendaraan.
Mulai Android 14, FakeVehicleHardware
membaca konfigurasi properti yang didukung saat runtime
selama inisialisasi dari folder /vendor/etc/automotive/vhalconfig/
perangkat,
yang berisi file konfigurasi gaya JSON. Lihat
file README VHAL referensi
untuk format file konfigurasi dan konten file konfigurasi.
FakeVehicleHardware
juga mendukung penggantian file konfigurasi untuk pengujian. Jika
properti sistem persist.vendor.vhal_init_value_override
ditetapkan (properti ini harus
ditetapkan pada waktu build atau sangat awal selama booting sebelum inisialisasi VHAL), properti ini akan menggunakan file
konfigurasi dari folder /vendor/etc/automotive/vhaloverride/
di perangkat untuk mengganti
konfigurasi yang ada. Implementasi vendor dapat menggunakan pendekatan serupa sehingga konfigurasi properti yang didukung VHAL tidak dikodekan secara permanen dan dapat ditentukan secara dinamis pada waktu mulai.
Daftar konfigurasi properti kendaraan harus statis setelah VHAL diinisialisasi.
Mulai Android 16, GRPCVehicleHardware
menyediakan penerapan IVehicleHardware
referensi lainnya. Implementasi ini
mengasumsikan ada server terpisah yang berjalan di mesin atau VM jarak jauh yang berisi logika penanganan
properti. VHAL yang berjalan di perangkat AAOS bertindak sebagai proxy yang meneruskan permintaan ke
server jarak jauh. Lihat grpc
untuk mengetahui detail selengkapnya.