Referans uygulama

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

Referans uygulama, iki katmanlı bir mimariye dayanır. Üst katmanda, DefaultVehicleHal, VHAL AIDL arayüzünü uygular ve tüm donanım cihazlarına yönelik 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şimde bulunmanın 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 (bir yöntemi geçersiz kılacak şekilde genişleterek) ve kendi IVehicleHardware uygulamalarını sağlayabilir.

VHAL referans uygulaması
1. şekil. VHAL referans uygulaması

DefaultVehicleHal aşağıdaki mantığı içerir. Bu mantık genel olarak kabul edilir ve herhangi bir VHAL uygulaması için geçerli olabilir.

  • IVehicle arayüzünü uygular.
  • Yinelenen kimlikleri kontrol etme de dahil olmak üzere temel giriş kontrolleri gerçekleştirir.
  • Her bağlayıcı istemcisi için her işlemde istemci nesneleri (ör. GetValuesClient) ayırır ve her birini genel bir havuza ekler.
  • Bekleyen bir isteği bekleyen istek havuzuna ekleme gibi eşzamansız geri çağırma mantığını yönetir. Sonuçları aldığımızda bekleyen istekleri çözer veya bekleyen isteklerden birinin zaman aşımına uğraması durumunda hata döndürür.
  • LargeParcelable öğesini serileştirir ve serileştirmeyi kaldırır (bkz. ParcelableUtils.h).
  • Aboneliği yönetir (SubscriptionManager.h).
  • İzinleri kontrol eder. (checkReadPermission ve checkWritePermission işlevlerine bakın).
  • Periyodik olarak IVehicleHardware.checkHealth işlevini çağırır ve kalp atışı sinyalleri gönderir (checkHealth işlevine bakın).

IVehicleHardware VHAL'nin 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 üzere bellek içi harita kullanan ve gerçek bir araç yoluyla iletişim kurmayan FakeVehicleHardware'dır. Bir emülatörde çalışması ve donanıma özgü bağımlılıklarının olmaması amaçlanmıştır. Tedarikçi uygulamaları bu kodu olduğu gibi kullanmamalı ve araca özel mantık eklemelidir.

Android 14'ten itibaren FakeVehicleHardware, başlatma sırasında cihazın /vendor/etc/automotive/vhalconfig/ klasöründen desteklenen özellik yapılandırmasını çalışma zamanında okur. Bu klasörde JSON tarzı bir yapılandırma dosyası bulunur. Yapılandırma dosyası biçimi ve yapılandırma dosyası içeriği için referans VHAL BENİOKU dosyasına bakın.

FakeVehicleHardware ayrıca test için yapılandırma dosyası geçersiz kılmayı da destekler. Sistem özelliği persist.vendor.vhal_init_value_override ayarlanmışsa (bu özellik, derleme sırasında veya VHAL başlatılmadan önce başlatma sırasında çok erken bir aşamada ayarlanmalıdır) 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ı, desteklenen VHAL- özellik yapılandırmasının sabit kodlanmaması ve başlangıç zamanında dinamik olarak belirlenebilmesi için benzer bir yaklaşım kullanabilir. VHAL başlatıldıktan sonra araç özelliği yapılandırmaları listesi statik olmalıdır.

Android 16'dan itibaren GRPCVehicleHardware başka bir IVehicleHardware referans uygulaması sunar. Bu uygulama, mülk işleme mantığını içeren uzak bir makinede veya VM'de çalışan ayrı bir sunucu olduğunu varsayar. AAOS cihazlarında çalışan VHAL, istekleri uzak sunucuya yönlendiren bir proxy görevi görür. Daha fazla bilgi için grpc sayfasına bakın.