VHAL arayüzü

AIDL VHAL, android.hardware.automotive.vehicle namespace içinde tanımlanır. VHAL arayüzü IVehicle.aidl adresinde tanımlanmıştı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 yeni VHAL sürümü En son VHAL özelliği sürümü Uyumlu minimum VHAL sürümü
Android 16 V4 V4 V1
Android 15 V3 V3 V1
Android 14 V2 V2 V1
Android 13 V1 (VHAL özelliği arayüzü bölünmemiş) V1

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

İşlevler ve geri çağırmalar

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

Yöntem
VehiclePropConfigs getAllPropConfigs()
Bu araç HAL'si tarafından desteklenen tüm Özellik 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ı listesini döndürür.
void getValues(IVehicleCallback callback, in GetValueRequests requests)
Araç özelliği değerlerini eşzamansız olarak alın. Bir toplu GetValueRequest işlemini eşzamansız olarak işler. Sonuç, geri çağırma onGetValues yöntemiyle iletilir.
void setValues(IVehicleCallback callback, in SetValueRequests requests)
Araç özelliği değerlerini eşzamansız olarak ayarlayın. SetValueRequest toplu işini eşzamansız olarak işler. Sonuç, geri çağırma onSetValues yöntemiyle iletilir.
void subscribe(in IVehicleCallback callback, in SubscribeOptions[] options, int maxSharedMemoryFileCount)
Belirtilen seçeneklerle mülk etkinliklerine abone olur. Abonelik 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) yer alır. 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 yapılmadan uygulanabilir.
(Android 16'da yeni)
SupportedValuesListResults getSupportedValuesLists(in List propIdAreaIds)
Belirtilen mülk kimliği ve alan kimliği çiftleri için desteklenen değer 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 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ğırmasının kaydını siler.
VHAL V4'te kullanıma sunulmuştur.

Geri çağırmalar IVehicleCallback.aidl içinde tanımlanır ve şu yöntemleri içerir.

Yöntem
oneway void onGetValues(in GetValueResults responses)
Değer alma sonuçları sağlamak için getValues işlevinin geri çağırması. Getirilecek değerlerden bazıları hazır olduğunda çağrılır.
oneway void onSetValues(in SetValueResults responses)
Belirlenen değer sonuçlarını sunmak için setValues işlevinin geri çağırması. VHAL, özellik ayarlama isteklerinden bazılarını işlemeyi bitirdiğinde çağrılır.
oneway void onPropertyEvent(in VehiclePropValues propValues, int sharedMemoryFileCount)
Tesis güncelleme etkinliklerini bildirmek için geri arama.
CONTINUOUS özelliği için, Hz cinsinden abone örnekleme hızına veya araç yolu mesajı sıklığına göre bir özellik etkinliği gerçekleşir. Bir mülkün durumu değiştiğinde de mülk etkinliği gerçekleşebilir. Örneğin, kullanılamaz durumdan kullanılabilir duruma geçiş.
ON_CHANGE özelliği için, bir mülkün değeri veya durumu değiştiğinde mülk etkinliği 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 ya da hata durumu ve boş değer içeren bir VehiclePropValue yayınlanmalıdır.
SharedMemoryFileCount her zaman 0.
oneway void onPropertySetError(in VehiclePropErrors errors)
Karşılık gelen bir ayarlama isteği olmayan, eşzamansız mülk ayarlama hatalarını bildirmek için geri çağırma. Hatanın hangi küme isteğiyle ilgili olduğunu biliyorsak bunun yerine hata sonucu içeren onSetValues kullanılmalıdır.
oneway void onSupportedValueChange(in List propIdAreaIds)
Desteklenen minimum ve maksimum değer veya desteklenen değer listesi değişikliklerini bildirmek için geri çağırma. Arayanın, güncellenen değerleri almak için getMinMaxSupportedValue veya getSupportedValuesLists numaralı telefonu araması gerekir.

VHAL uygulaması, VtsHalAutomotiveVehicle_TargetTest.cpp adresindeki VHAL VTS tarafından doğrulanır.

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ıştırılır ancak AAOS yalnızca varsayılan örneği (android.hardware.automotive.vehicle.IVehicle/default) kullanır.

Araç özelliği değeri

Her özelliğin değerini açıklamak için aşağıdaki alanlara sahip olan VehiclePropValue yapısını kullanın:

Alan Açıklama
timestamp Etkinliğin gerçekleştiği ve SystemClock.elapsedRealtimeNano() saatiyle senkronize edildiği zamanı gösteren zaman damgası.
prop Bu değerin tesis kimliği.
areaid Bu değerin alan kimliği. Alan, alan kimliği yapılandırmasında listelenen desteklenen alanlardan biri veya küresel mülkler için 0 olmalıdır.
value Gerçek mülk değerini içeren bir veri yapısı. Özellik 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 içindeki ilk öğe Int32 türü özellikler için kullanılır. Ayrıntılar için Mülk Yapılandırmaları başlıklı makaleyi inceleyin.
status Özelliğin okuma durumu. Okuma/yazma özelliği için bu durum yazma işlemi için de geçerli olabilir ancak garanti edilmez. Örneğin, özellik okuma için kullanılabilir ancak yazma için kullanılamayabilir. Bu durumda durum AVAILABLE olur ve değer alanında geçerli bilgiler yer alır. 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 nedenle, işlev, gerçek get veya set işlemi tamamlanmadan önce döndürülebilir. İşlem sonuçları (ör. getValues için mülk değeri ve setValues için başarılı veya hata durumu) bağımsız değişken olarak iletilen geri çağırmalar aracılığıyla sağlanır.

Uygulama, isteği işleyen bağlayıcı iş parçacığındaki sonucu engellememelidir. 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 Uygulaması'na bakın.

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

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

XXXs olarak adlandırılan tüm yapılar (ör. VehiclePropConfigs, SetValueRequests ve VehiclePropValues) LargeParcelable (veya StableLargeParcelable) olarak adlandırılır. Her biri, bağlayıcı sınırlamaları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 benzer bir yapı tanımı vardır ve bu tanım aşağıdaki alanları içerir.

Rehberlik Açıklama
payloads Değer boyutu bağlayıcı bellek sınırlamasına uyduğunda değer listesi veya boş liste.
sharedMemoryFd Değer listesi çok büyükse serileştirilmiş yükleri depolayan paylaşılan bellek dosyasına işaret eden, boş değer atanabilir 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ükler veya boş olmayan bir sharedMemoryFd içerir.

  • payloads boş değilse gerçek verilerin listesini (özellik yapılandırması) depolar.
  • sharedMemoryFd boş değilse VehiclePropConfigs öğesinin serileştirilmiş yapısını depolayan bir paylaşılan bellek dosyası içerir. Yapı, bir paketi serileştirmek için writeToParcel işlevini kullanır.

VHAL için bir Java istemcisi olarak Car Service, LargeParcelable için serileştirme ve seri durumdan çıkarma işlemlerini gerçekleştirir. VHAL uygulamaları ve yerel istemciler için LargeParcelable, LargeParcelable kitaplığı veya ParcelableUtils.h içindeki kitaplık için yararlı bir sarmalayıcı sınıf ile serileştirilmeli ve seri durumdan çıkarılmalıdır.

Örneğin, bir bağlayıcıdan alınan getValues için istekleri ayrıştıran bir yerel istemci aşağıdaki gibi olabilir:

// '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.
}

Aşağıda, getValues için sonuçları bağlayıcı üzerinden gönderen örnek bir VHAL uygulaması gösterilmektedir:

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