Implementasi referensi

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

Implementasi referensi didasarkan pada arsitektur dua lapis. Di lapisan atas, DefaultVehicleHal , mengimplementasikan antarmuka VHAL AIDL dan menyediakan logika VHAL generik untuk semua perangkat keras. Di lapisan bawah, FakeVehicleHardware , mengimplementasikan antarmuka IVehicleHardware . Kelas ini mensimulasikan logika VHAL dalam berinteraksi dengan perangkat keras atau bus kendaraan sebenarnya dan khusus untuk perangkat. Secara opsional, vendor dapat mengadaptasi arsitektur yang sama, menggunakan kembali kelas 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 umum dan dapat diterapkan pada implementasi VHAL apa pun.

  • Mengimplementasikan antarmuka IVehicle .
  • Melakukan pemeriksaan masukan dasar, termasuk pemeriksaan ID duplikat.
  • Mengalokasikan objek klien (misalnya, GetValuesClient ) untuk setiap operasi untuk setiap klien pengikat, dan menambahkan masing-masing objek ke kumpulan global.
  • Mengelola logika callback asinkron, seperti menambahkan permintaan yang tertunda ke kumpulan permintaan yang tertunda. Menyelesaikan permintaan yang tertunda ketika kami menerima hasil atau mengembalikan kesalahan ketika salah satu permintaan yang tertunda habis.
  • Membuat 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 mengirimkan sinyal detak jantung (lihat fungsi checkHealth ).

IVehicleHardware adalah antarmuka umum yang digunakan untuk mewakili implementasi khusus perangkat keras VHAL. Implementasi referensi untuk IVehicleHardware adalah FakeVehicleHardware , yang menggunakan peta dalam memori untuk menyimpan nilai properti dan tidak berkomunikasi dengan bus kendaraan sebenarnya. Ini dimaksudkan untuk dijalankan pada emulator dan tidak memiliki ketergantungan khusus perangkat keras. Implementasi vendor tidak boleh menggunakannya apa adanya dan harus menambahkan logika khusus bus kendaraan.

Di Android 14, FakeVehicleHardware membaca konfigurasi properti yang didukung saat run-time selama inisialisasi dari folder /vendor/etc/automotive/vhalconfig/ perangkat, yang berisi file konfigurasi bergaya JSON. Lihat referensi file VHAL README 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 disetel, ia akan menggunakan file konfigurasi dari folder /vendor/etc/automotive/vhaloverride/ pada perangkat untuk mengganti konfigurasi yang ada. Implementasi vendor dapat menggunakan pendekatan serupa sehingga konfigurasi properti yang didukung VHAL tidak dikodekan secara keras dan dapat diputuskan secara dinamis pada waktu mulai. Konfigurasi properti kendaraan harus statis setelah perangkat dimulai.