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