Penerapan referensi

Kami menyediakan implementasi referensi untuk VHAL AIDL. Thread layanan utama diterapkan di VehicleService.cpp. Implementasi antarmuka VHAL terletak di DefaultVehicleHal.cpp.

Implementasi referensi didasarkan pada arsitektur dua lapisan. Di lapisan atas, DefaultVehicleHal, mengimplementasikan antarmuka VHAL AIDL dan menyediakan logika VHAL generik ke semua perangkat hardware. Di lapisan bawah, FakeVehicleHardware, mengimplementasikan antarmuka IVehicleHardware. Class ini menyimulasikan logika VHAL untuk berinteraksi dengan hardware atau bus kendaraan yang sebenarnya dan bersifat khusus perangkat. Secara opsional, vendor dapat menyesuaikan arsitektur yang sama ini, menggunakan kembali class DefaultVehicleHal yang sama (memperluasnya untuk menimpa metode), dan menyediakan implementasi IVehicleHardware mereka sendiri.

Implementasi referensi VHAL
Gambar 1. Implementasi referensi VHAL

DefaultVehicleHal berisi logika berikut, yang dianggap generik dan dapat diterapkan ke penerapan VHAL apa pun.

  • Mengimplementasikan antarmuka IVehicle.
  • Melakukan pemeriksaan input dasar, termasuk pemeriksaan ID duplikat.
  • Mengalokasikan objek klien (misalnya, GetValuesClient) untuk setiap operasi untuk 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 tertunda saat kita menerima hasilnya atau menampilkan error saat salah satu permintaan yang tertunda habis waktunya.
  • Melakukan serialisasi dan deserialisasi LargeParcelable (lihat ParcelableUtils.h).
  • Mengelola langganan (lihat SubscriptionManager.h).
  • Memeriksa izin. (Lihat fungsi checkReadPermission dan checkWritePermission).
  • Memanggil IVehicleHardware.checkHealth secara berkala dan mengirim sinyal detak jantung (lihat fungsi checkHealth).

IVehicleHardware adalah antarmuka generik yang digunakan untuk merepresentasikan implementasi khusus 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. Aplikasi ini dimaksudkan untuk berjalan di emulator dan tidak memiliki dependensi khusus hardware. Implementasi vendor tidak boleh menggunakannya apa adanya dan harus menambahkan logika khusus bus kendaraan.

Di Android 14, FakeVehicleHardware membaca konfigurasi properti yang didukung saat runtime selama inisialisasi dari folder /vendor/etc/automotive/vhalconfig/ perangkat, yang berisi file konfigurasi bergaya 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 tersebut 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 di-hardcode dan dapat diputuskan secara dinamis pada waktu mulai. Konfigurasi properti kendaraan harus statis setelah perangkat dimulai.