Referans uygulama

AIDL VHAL için referans bir 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 katmanda FakeVehicleHardware, IVehicleHardware arayüzünü uygular. Bu sınıf, gerçek donanım veya araç veriyoluyla etkileşime geçmenin VHAL mantığını simüle eder ve cihaza özeldir. İsteğe bağlı olarak tedarikçi firmalar 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 aşağıdaki mantığı içerir. Bu mantık genel kabul edilir ve herhangi bir VHAL uygulaması için geçerli olabilir.

  • IVehicle arayüzünü uygular.
  • Kopya kimlikler olup olmadığını kontrol etmek de dahil olmak üzere temel giriş kontrolleri yapar.
  • 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 asenkron 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, çalıştırma zamanında başlatma sırası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 çalıştırıldıktan sonra araç mülkü yapılandırması statik olmalıdır.