Referans uygulaması

AIDL VHAL için bir referans uygulama sunuyoruz. Ana hizmet iş parçacığı VehicleService.cpp adresinde uygulanır. VHAL arayüzü uygulaması DefaultVehicleHal.cpp adresinde bulunur.

Referans uygulama, iki katmanlı bir mimariye dayanır. Üst katmanda DefaultVehicleHal, VHAL AIDL arayüzünü uygular ve tüm donanım cihazları için genel VHAL mantığı sağlar. Alt katman olan FakeVehicleHardware, IVehicleHardware arayüzünü uygular. Bu sınıf, gerçek donanım veya araç veri yolu ile etkileşim kurma VHAL mantığını simüle eder ve cihaza özgüdür. İsteğe bağlı olarak tedarikçiler bu mimariyi uyarlayabilir, aynı DefaultVehicleHal sınıfını yeniden kullanabilir (bir yöntemin üzerine yazması için sınıfı genişleterek) ve kendi IVehicleHardware uygulamalarını sağlayabilir.

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

DefaultVehicleHal, genel olarak kabul edilen ve tüm VHAL uygulamaları için geçerli olabilecek aşağıdaki mantığı içerir.

  • IVehicle arayüzünü uygular.
  • Yinelenen kimliklerin kontrolünü de içeren temel giriş kontrollerini gerçekleştirir.
  • Her bağlayıcı istemcisi için her işleme istemci nesneleri (örneğin, GetValuesClient) ayırır ve her birini global bir havuza ekler.
  • Beklemedeki istek havuzuna bekleyen istek ekleme gibi ayarsız geri çağırma 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 değerini serileştirir ve seri dışına çıkarır (ParcelableUtils.h bölümüne bakın).
  • Aboneliği yönetir (SubscriptionManager.h bölümüne bakın).
  • İzinleri kontrol eder. (checkReadPermission ve checkWritePermission işlevlerine bakın.)
  • IVehicleHardware.checkHealth işlevini düzenli olarak çağırır ve kalp atışı sinyalleri gönderir (checkHealth işlevine bakın).

IVehicleHardware bir VHAL'ın donanıma özgü uygulamasını temsil etmek için kullanılan genel bir arayüzdür. IVehicleHardware için referans uygulama, mülk değerini depolamak için bellek içi bir harita kullanan ve gerçek bir araç otobüsü ile iletişim kurmayan FakeVehicleHardware'dir. Bir emülatörde çalışacak şekilde tasarlanmıştır ve donanıma özgü bağımlılıklara sahip değildir. Tedarikçi firmaların uygulamaları bu protokolü olduğu gibi kullanmamalı ve araç otobüsüne özgü mantık eklemelidir.

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

FakeVehicleHardware, test için yapılandırma dosyasını geçersiz kılmayı da destekler. persist.vendor.vhal_init_value_override sistem özelliği 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. Tedarikçi firma uygulamasında, VHAL tarafından desteklenen mülk yapılandırmasının sabit kodlanmaması ve başlangıç zamanında dinamik olarak karar verilebilmesi için benzer bir yaklaşım kullanılabilir. Cihaz başlatıldıktan sonra araç özelliği yapılandırması statik olmalıdır.