VHAL arayüzü

AIDL VHAL, android.hardware.automotive.vehicle namespace alanında tanımlanır. VHAL arayüzü IVehicle.aidl adresinde tanımlanmıştır. Belirtilmediği sürece tüm yöntemler uygulanmalıdır.

Yöntem
VehiclePropConfigs getAllPropConfigs()
Bu araç HAL'i tarafından desteklenen tüm Özellik Yapılandırmalarının bir listesini döndürür.
VehiclePropConfigs getPropConfigs(in int[] props)
Verilen özellik kimlikleri için Özellik Yapılandırmalarının bir listesini döndürür.
void getValues(IVehicleCallback callback, in GetValueRequests requests)
Araç özelliği değerlerini eşzamansız olarak alın. GetValueRequest toplu işlemini zaman uyumsuz olarak işler. Sonuç, onGetValues ​​geri çağırma yöntemi aracılığıyla iletilir.
void setValues(IVehicleCallback callback, in SetValueRequests requests)
Araç özelliği değerlerini eşzamansız olarak ayarlayın. SetValueRequest toplu işlemini eşzamansız olarak işler. Sonuç, onSetValues ​​geri çağırma yöntemi aracılığıyla iletilir.
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 özellik için) bulunur. maxSharedMemoryFileCount kullanılmaz.
void unsubscribe(in IVehicleCallback callback, in int[] propIds)
Belirtilen mülkler için önceden abone olunan mülk etkinliklerinin aboneliğini iptal eder.
returnSharedMemory(in IVehicleCallback callback, long sharedMemoryId)
Kullanılmaz ve işlem yapılmadan uygulanabilir.

Geri aramalar IVehicleCallback.aidl dosyasında tanımlanır ve bu yöntemleri içerir.

Yöntem
oneway void onGetValues(in GetValueResults responses)
Değer elde etme sonuçları sunmak için getValues ​​işlevinin geri çağrılması. Alınacak değerlerden bazıları hazır olduğunda çağrılır.
oneway void onSetValues(in SetValueResults responses)
Ayarlanan değer sonuçlarını sunmak için setValues ​​işlevinin geri çağrılması. VHAL bazı özellik seti isteklerini işlemeyi bitirdiğinde çağrılır.
oneway void onPropertyEvent(in VehiclePropValues propValues, int sharedMemoryFileCount)
Özellik güncelleme olaylarını raporlamak için geri arama.
CONTINUOUS özellik, Hz cinsinden abone örnekleme hızına veya araç veri yolu mesaj frekansına bağlı olarak bir özellik olayı gerçekleşir. Bir mülkün durumu değiştiğinde de bir mülk olayı gerçekleşebilir. Örneğin, mevcut olmayandan mevcut olana.
ON_CHANGE özelliği için, bir özelliğin değeri veya durumu değiştiğinde bir özellik olayı meydana gelir.
SharedMemoryFileCount her zaman 0 .
oneway void onPropertySetError(in VehiclePropErrors errors)
İlgili ayar isteği olmayan eşzamansız özellik kümesi hatalarını raporlamak için geri arama. Eğer hatanın hangi set isteğine ait olduğunu biliyorsak bunun yerine hata sonucu veren onSetValues ​​kullanılmalıdır.

Daha fazla bilgi için bkz. IVehicle.aidl ve IVehicleCallback.aidl .

VHAL uygulaması, VtsHalAutomotiveVehicle_TargetTest.cpp adresindeki VHAL VTS tarafından doğrulanır. Test, temel yöntemlerin doğru şekilde uygulandığını ve desteklenen özellik yapılandırmalarının doğru olduğunu doğrular.

Araç mülkiyet değeri

Aşağıdaki alanlara sahip her özelliğin değerini tanımlamak için VehiclePropValue yapısını kullanın:

Alan Tanım
timestamp Olayın gerçekleştiği ve SystemClock.elapsedRealtimeNano() saati ile senkronize edildiği zamanı temsil eden zaman damgası.
prop Bu değerin özellik kimliği.
areaid Bu değerin alan kimliği. Alan, alan kimliği yapılandırmasında listelenen desteklenen alanlardan biri veya genel özellikler için 0 olmalıdır.
value Gerçek özellik değerini içeren bir veri yapısı. Özellik türüne bağlı olarak bu alandaki bir veya daha fazla alan, gerçek değeri saklamak için kullanılır. Örneğin, value.int32Values ​​dosyasındaki ilk öğe Int32 türü özellikleri için kullanılır. Ayrıntılar için bkz. Özellik Yapılandırmaları .

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 geri dönebileceği anlamına gelir. İşlem sonuçları (örneğin, getValues ​​için özellik değeri ve setValues ​​için başarı veya hata durumu), argüman olarak iletilen geri çağırmalar aracılığıyla iletilir.

Uygulama, isteği işleyen bağlayıcı iş parçacığında 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.

Şekil 1. Asenkron süreç.

Büyük parsellenebilirler

VehiclePropConfigs , SetValueRequests ve VehiclePropValues ​​gibi XXXs adlı tüm yapılara LargeParcelable (veya StableLargeParcelable ) adı verilir. Her biri, ciltleyici sınırlamalarını ( LargeParcelable kitaplık uygulamasında 4 KB) aşabilecek büyük verileri ciltleyici sınırları boyunca geçirmek için kullanılan değerlerin bir listesini temsil eder. Her birinin aşağıdaki alanları içeren benzer bir yapı tanımı vardır.

Rehberlik Tanım
payloads Değer boyutu ciltleyici belleği sınırlamasına veya boş bir listeye sığdığında değerlerin listesi.
sharedMemoryFd Değer listesi çok büyükse serileştirilmiş yükleri depolayan paylaşılan bellek dosyasına işaret eden null yapılabilir dosya tanımlayıcı.

Ö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 veriler veya boş olmayan bir sharedMemoryFd içerir.

  • payloads boş değilse, özellik yapılandırması olan gerçek verilerin bir listesini saklar.
  • sharedMemoryFd null değilse, VehiclePropConfigs serileştirilmiş yapısını saklayan paylaşılan bir bellek dosyası içerir. Yapı, bir Parseli serileştirmek için writeToParcel işlevini kullanır.

VHAL için bir Java istemcisi olan 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ığıyla veya ParcelableUtils.h içindeki kitaplık için kullanışlı bir sarmalayıcı sınıfıyla serileştirilmesi ve seri durumdan çıkarılması gerekir.

Örneğin, bir ciltleyiciden alınan getValues ​​isteklerini ayrıştıran yerel bir istemci aşağıdaki gibidir:

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

getValues ​​sonuçlarını bağlayıcı aracılığıyla 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.
}