VHAL arayüzü

AIDL VHAL, android.hardware.automotive.vehicle namespace içinde tanımlanır. VHAL arayüzü IVehicle.aidl adresinde tanımlanır. Belirtilmediği sürece tüm yöntemler belirli bir VHAL sürümü için uygulanmalıdır.

Sürümler

Android sürümü En son VHAL sürümü En son VHAL mülk sürümü Minimum uyumlu VHAL sürümü
Android 16 V4 V4 V1
Android 15 V3 V3 V1
Android 14 V2 V2 V1
Android 13 V1 (VHAL mülk arayüzü bölünmemiş) V1

Belirli bir Android sürümü için en son VHAL sürümünün uygulanması ÖNERİLİR.

İşlevler ve geri çağırma işlevleri

VHAL işlevleri IVehicle.aidl adresinde tanımlanır.

Yöntem
VehiclePropConfigs getAllPropConfigs()
Bu araç HAL'ı tarafından desteklenen tüm mülk yapılandırmalarının listesini döndürür.
VehiclePropConfigs getPropConfigs(in int[] props)
Belirli mülk kimlikleri için mülk yapılandırmalarının listesini döndürür.
void getValues(IVehicleCallback callback, in GetValueRequests requests)
Araç özelliği değerlerini asynkron olarak alın. GetValueRequest toplu işlemlerini eşzamansız olarak işler. Sonuç, onGetValues geri çağırma yöntemi aracılığıyla gönderilir.
void setValues(IVehicleCallback callback, in SetValueRequests requests)
Araç özelliği değerlerini eşzamansız olarak ayarlayın. SetValueRequest öğelerini eşzamansız olarak işler. Sonuç, onSetValues geri çağırma yöntemi aracılığıyla gönderilir.
void subscribe(in IVehicleCallback callback, in SubscribeOptions[] options, int maxSharedMemoryFileCount)
Belirtilen seçeneklerle mülk etkinliklerine abone olur. Abone olma seçenekleri arasında mülk kimliği, mülk alanı kimliği ve Hz cinsinden örnekleme hızı (sürekli bir mülk için) bulunur. maxSharedMemoryFileCount kullanılmıyor.
void unsubscribe(in IVehicleCallback callback, in int[] propIds)
Belirtilen mülkler için daha önce abone olunan mülk etkinliklerinin aboneliğini iptal eder.
returnSharedMemory(in IVehicleCallback callback, long sharedMemoryId)
Kullanılmaz ve işlem yapmaz olarak uygulanabilir.
(Android 16'da yeni)
SupportedValuesListResults getSupportedValuesLists(in List propIdAreaIds)
Belirtilen mülk kimliği ve alan kimliği çiftleri için desteklenen değerler listelerini alır.
VHAL V4'te kullanıma sunulmuştur.
(Android 16'da yeni)
MinMaxSupportedValueResults getMinMaxSupportedValue(in List propIdAreaIds)
Belirtilen mülk kimliği ve alan kimliği çiftleri için desteklenen minimum ve maksimum değerleri alır.
VHAL V4'te kullanıma sunulmuştur.
void registerSupportedValueChangeCallback(in IVehicleCallback callback, in List propIdAreaIds)
Desteklenen değerler değiştiğinde çağrılacak bir geri çağırma işlevi kaydeder.
VHAL V4'te kullanıma sunulmuştur.
void unregisterSupportedValueChangeCallback(in IVehicleCallback callback, in List propIdAreaIds)
Desteklenen değer değişikliği geri çağırma işlevinin kaydını siler.
VHAL V4'te kullanıma sunulmuştur.

Geri çağırma işlevleri IVehicleCallback.aidl bölümünde tanımlanır ve bu yöntemleri içerir.

Yöntem
oneway void onGetValues(in GetValueResults responses)
Değer alma sonuçlarını döndürmek için getValues işlevinin geri çağırma işlevi. Getirilecek değerlerden bazıları hazır olduğunda çağrılır.
oneway void onSetValues(in SetValueResults responses)
Ayarlanan değer sonuçlarını döndürmek için setValues işlevi için geri çağırma işlevi. VHAL, mülk kümesi isteklerinin bazılarını işlemeye son verdiğinde çağrılır.
oneway void onPropertyEvent(in VehiclePropValues propValues, int sharedMemoryFileCount)
Tesis güncelleme etkinliklerini bildirmek için geri çağırma.
CONTINUOUS mülkünde, Hz cinsinden abonelik örnekleme hızına veya araç veri yolu mesaj sıklığına göre bir mülk etkinliği gerçekleşir. Mülk etkinliği, bir mülkün durumu değiştiğinde de gerçekleşebilir. Örneğin, "Kullanılamıyor" durumundan "Kullanılabilir" durumuna.
ON_CHANGE mülkü için mülk etkinliği, mülkün değeri veya durumu değiştiğinde gerçekleşir.
Bu, mülk durumu değişikliği etkinliklerini yayınlamak için de kullanılmalıdır. Örneğin, mülk kullanılamaz hale geldiğinde veya okuma hatası oluştuğunda, kullanılamaz veya hata durumu ve boş değer içeren bir VehiclePropValue gönderilmelidir.
SharedMemoryFileCount her zaman 0 olur.
oneway void onPropertySetError(in VehiclePropErrors errors)
Karşılık gelen ayar isteği olmayan eşzamansız mülk kümesi hatalarını bildirmek için geri çağırma işlevi. Hatanın hangi set isteğiyle ilgili olduğunu biliyorsak bunun yerine hata sonucu içeren onSetValues kullanılmalıdır.
oneway void onSupportedValueChange(in List propIdAreaIds)
Minimum ve maksimum desteklenen değer veya desteklenen değer listesi değişikliklerini bildirmek için geri çağırma işlevi. Arayanın güncellenmiş değerleri almak için getMinMaxSupportedValue veya getSupportedValuesLists'ı araması gerekir.

VHAL uygulaması, VtsHalAutomotiveVehicle_TargetTest.cpp tarihinde VHAL VTS tarafından doğrulandı.

Test, temel yöntemlerin doğru şekilde uygulandığını ve desteklenen mülk yapılandırmalarının doğru olduğunu doğrular. Test, cihazdaki tüm VHAL örneklerine karşı çalışır ancak AAOS yalnızca varsayılan örneği (android.hardware.automotive.vehicle.IVehicle/default) kullanır.

Araç özelliği değeri

Her bir mülkün değerini açıklamak için şu alanları içeren VehiclePropValue yapısını kullanın:

Alan Açıklama
timestamp Etkinliğin gerçekleştiği zamanı temsil eden ve saatle senkronize edilen zaman damgası. SystemClock.elapsedRealtimeNano()
prop Bu değerin mülk kimliği.
areaid Bu değerin alan kimliği. Alan, bölge kimliği yapılandırmasında listelenen desteklenen alanlardan biri veya genel mülkler için 0 olmalıdır.
value Gerçek mülk değerini içeren bir veri yapısı. Mülk türüne bağlı olarak, gerçek değeri depolamak için bu alandaki bir veya daha fazla alan kullanılır. Örneğin, value.int32Values'teki ilk öğe, Int32 türündeki özellikler için kullanılır. Ayrıntılar için Mülk Yapılandırmaları başlıklı makaleyi inceleyin.
status Tesisin okunabilirlik durumu. Okuma/yazma özelliği için bu durum yazma için de geçerli olabilir ancak garanti edilmez. Örneğin, mülk okuma için kullanılabilir ancak yazma için kullanılamayabilir. Bu durumda durum AVAILABLE olur ve değer alanı geçerli bilgiler içerir. Olası durumlar için VehiclePropertyStatus bölümüne bakın.

Eşzamansız getValues ve setValues

getValues ve setValues işlemleri eşzamansız olarak gerçekleştirilir. Bu, işlevin gerçek alma veya ayarlama işlemi tamamlanmadan önce döndürülebileceği anlamına gelir. İşlem sonuçları (örneğin, getValues için mülk değeri ve setValues için başarı veya hata durumu), bağımsız değişken olarak iletilen geri çağırma işlevleri aracılığıyla sağlanır.

Uygulama, isteği işleyen bağlayıcı iş parçacığındaki sonuçta tıkanıklık oluşturmamalıdır. Bunun yerine, isteği bir istek kuyruğunda saklamanızı ve istekleri eşzamansız olarak işlemek için ayrı bir işleyici iş parçacığı kullanmanızı öneririz. Ayrıntılar için Referans Uygulama bölümüne bakın.

Şekil 1. Eşzamansız işlem.

Büyük ayrıştırılabilir öğeler

VehiclePropConfigs, SetValueRequests ve VehiclePropValues gibi XXXs adlı tüm yapılar LargeParcelable (veya StableLargeParcelable) olarak adlandırılır. Her biri, bağlayıcı sınırlarını (LargeParcelable kitaplığı uygulamasında 4 KB) aşabilecek büyük verileri bağlayıcı sınırları arasında iletmek için kullanılan bir değer listesini temsil eder. Her birinin aşağıdaki alanları içeren benzer bir yapı tanımı vardır.

Rehberlik Açıklama
payloads Değer boyutu bir bağlayıcı bellek sınırına sığdığındaki değerlerin listesi veya boş bir liste.
sharedMemoryFd Değer listesi çok büyükse serileştirilmiş yükleyicileri depolayan paylaşılan bir bellek dosyasını işaret eden boş dosya tanımlayıcısı.

Örneğin, VehiclePropConfigs şu şekilde tanımlanır:

parcelable VehiclePropConfigs {
    // The list of vehicle property configs if they fit the binder memory
    // limitation.
    VehiclePropConfig[] payloads;
    // Shared memory file to store configs if they exceed binder memory
    // limitation. Created by VHAL, readable only at client. Client could keep
    // the fd opened or keep the FD mapped to access configs.
    @nullable ParcelFileDescriptor sharedMemoryFd;
}

VehiclePropConfigs, boş olmayan yük verileri veya null olmayan bir sharedMemoryFd içeriyor.

  • payloads boş değilse mülk yapılandırması olan gerçek verilerin listesini depolar.
  • sharedMemoryFd null değilse VehiclePropConfigs değerinin serileştirilmiş yapısını depolayan bir paylaşılan hafıza dosyası içerir. Yapı, bir paketi serileştirmek için writeToParcel işlevini kullanır.

VHAL için Java istemcisi olan Car Service, LargeParcelable için serileştirme ve seri bozma işlemlerini yönetir. VHAL uygulamaları ve yerel istemciler için LargeParcelable, LargeParcelable kitaplığı veya ParcelableUtils.h'teki kitaplık için kullanışlı bir sarmalayıcı sınıfıyla serileştirilmeli ve seri dışına çıkarılmalıdır.

Örneğin, bir bağlayıcıdan alınan getValues isteklerini ayrıştıran yerel istemci aşağıdaki gibidir:

// 'requests' are from the binder.
GetValueRequests requests;
expected<LargeParcelableBase::BorrowedOwnedObject, ScopedAStatus> deserializedResults = fromStableLargeParcelable(requests);
if (deserializedResults.ok()) {
    const std::vector& getValueRequests = deserializedResults.value().getObject()->payloads;
    // Use the getValueRequests.
  } else {
    // handle error.
}

Bağlayıcı üzerinden getValues sonuçları gönderen örnek bir VHAL uygulaması aşağıda gösterilmiştir:

std::vector results = getResults();
GetValueResults parcelableResults;
ScopedAStatus status = vectorToStableLargeParcelable(std::move(results), &parcelableResults);
if (status.isOk()) {
    // Send parcelableResults through callback.
} else {
    // Handle error.
}