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