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.
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
vecheckWritePermission
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.