AIDL VHAL için referans uygulama sağlıyoruz. Ana hizmet iş parçacığı,
VehicleService.cpp konumunda uygulanır.
VHAL arayüzü uygulaması DefaultVehicleHal.cpp konumunda 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 olan VHAL mantığını sağlar. Alt katmanda FakeVehicleHardware, IVehicleHardware arayüzünü uygular. Bu sınıf, gerçek donanım veya araç veri yolu ile etkileşim kurmanın VHAL mantığını simüle eder ve cihaza özeldir. İsteğe bağlı olarak, tedarikçiler aynı mimariyi uyarlayabilir, aynı DefaultVehicleHal sınıfını yeniden kullanabilir (bir yöntemin üzerine yazacak şekilde genişleterek) ve kendi IVehicleHardware uygulamasını sağlayabilir.
DefaultVehicleHal
aşağıdaki mantığı içerir. Bu mantık genel olarak kabul edilir ve herhangi bir VHAL uygulaması için geçerli olabilir.
IVehiclearayüzünü uygular.- Yinelenen kimlik kontrolü de dahil olmak üzere temel giriş kontrollerini gerçekleştirir.
- Her bağlayıcı istemcisi için her işlem için istemci nesneleri (ör.
GetValuesClient) ayırır ve her birini genel bir havuza ekler. - Bekleyen istek havuzuna bekleyen istek 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ı olduğunda 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. (
checkReadPermissionvecheckWritePermissionişlevlerine bakın). - Periyodik olarak
IVehicleHardware.checkHealthişlevini çağırır ve kalp atışı sinyalleri gönderir (checkHealthiş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'dir. Bir emülatörde çalışması ve donanıma özgü bağımlılıklarının olmaması amaçlanmıştır. Sağlayıcı uygulamaları bunu 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 README dosyasına bakın.
FakeVehicleHardware, test için yapılandırma dosyasını 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 sanal makinede ç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.