Referans uygulaması

AIDL VHAL için bir referans uygulaması sağlıyoruz. Ana hizmet iş parçacığı, VehicleService.cpp adresinde uygulanır. VHAL arayüzü uygulaması DefaultVehicleHal.cpp konumunda bulunur.

Referans uygulaması iki katmanlı bir mimariye dayanmaktadır. Üst katmanda, DefaultVehicleHal , VHAL AIDL arayüzünü uygular ve tüm donanım aygıtları için genel VHAL mantığı sağlar. Alt katmanda FakeVehicleHardware , IVehicleHardware arayüzünü uygular. Bu sınıf, gerçek donanım veya araç veri yolu ile etkileşimin VHAL mantığını simüle eder ve cihaza özeldir. İsteğe bağlı olarak satıcılar aynı mimariyi uyarlayabilir, aynı DefaultVehicleHal sınıfını yeniden kullanabilir (bunu bir yöntemin üzerine yazacak şekilde genişletebilir) ve kendi IVehicleHardware uygulamasını sağlayabilir.

VHAL referans uygulaması
Şekil 1. VHAL referans uygulaması

DefaultVehicleHal , genel olarak kabul edilen ve herhangi bir VHAL uygulamasına uygulanabilecek aşağıdaki mantığı içerir.

  • IVehicle arayüzünü uygular.
  • Yinelenen kimliklerin kontrolü de dahil olmak üzere temel giriş kontrollerini gerçekleştirir.
  • Her ciltleyici istemcisinin her işlemi için istemci nesnelerini (örneğin, GetValuesClient ) ayırır ve her birini genel bir havuza ekler.
  • Bekleyen bir istek havuzuna bekleyen bir istek eklemek gibi eşzamansız geri arama mantığını yönetir. Sonuçları aldığımızda bekleyen istekleri çözer veya bekleyen isteklerden biri zaman aşımına uğradığında hata döndürür.
  • LargeParcelable serileştirir ve seri durumdan çıkarır (bkz. ParcelableUtils.h ).
  • Aboneliği yönetir (bkz. SubscriptionManager.h ).
  • İzinleri kontrol eder. ( checkReadPermission ve checkWritePermission işlevlerine bakın).
  • Periyodik olarak IVehicleHardware.checkHealth'i çağırır ve kalp atışı sinyalleri gönderir ( checkHealth işlevine bakın).

IVehicleHardware , VHAL'in donanıma özel uygulamasını temsil etmek için kullanılan genel bir arayüzdür. IVehicleHardware için referans uygulama, özellik değerini depolamak için bellek içi bir harita kullanan ve gerçek bir araç veri yolu ile iletişim kurmayan FakeVehicleHardware . Bir öykünücü üzerinde çalışması ve donanıma özgü bağımlılıkları olmaması amaçlanmıştır. Satıcı uygulamaları bunu olduğu gibi kullanmamalı ve araç veri yoluna özgü mantık eklemelidir.

Android 14'te FakeVehicleHardware , başlatma sırasında çalışma zamanında desteklenen özellik yapılandırmasını cihazın JSON tarzı bir yapılandırma dosyası içeren /vendor/etc/automotive/vhalconfig/ klasöründen okur. Yapılandırma dosyası formatı ve yapılandırma dosyası içeriği için referans VHAL README dosyasına bakın.

FakeVehicleHardware ayrıca test için yapılandırma dosyasının geçersiz kılınmasını da destekler. Sistem özelliği persist.vendor.vhal_init_value_override ayarlanmışsa, mevcut yapılandırmayı geçersiz kılmak için cihazdaki /vendor/etc/automotive/vhaloverride/ klasöründeki yapılandırma dosyasını kullanır. Bir satıcı uygulaması, VHAL destekli özellik yapılandırmasının sabit kodlanmaması ve başlangıç ​​zamanında dinamik olarak karar verilebilmesi için benzer bir yaklaşım kullanabilir. Cihaz başlatıldığında araç özelliği yapılandırması statik olmalıdır.