AIDL VHAL, android.hardware.automotive.vehicle namespace
içinde tanımlanır.
VHAL arayüzü IVehicle.aidl
adresinde tanımlanır.
Aksi belirtilmedikçe tüm yöntemler uygulanmalıdır.
Yöntem | |
---|---|
VehiclePropConfigs getAllPropConfigs()
|
|
VehiclePropConfigs getPropConfigs(in int[] props)
|
|
void getValues(IVehicleCallback callback, in GetValueRequests requests)
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)
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)
maxSharedMemoryFileCount kullanılmıyor. |
|
void unsubscribe(in IVehicleCallback callback, in int[] propIds)
|
|
returnSharedMemory(in IVehicleCallback callback, long sharedMemoryId)
|
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)
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)
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)
CONTINUOUS mülkünde, Hz cinsinden abone ö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.SharedMemoryFileCount her zaman 0 olur. |
|
oneway void onPropertySetError(in VehiclePropErrors errors)
onSetValues kullanılmalıdır. |
Daha fazla bilgi için IVehicle.aidl ve IVehicleCallback.aidl dosyalarına bakın.
VHAL uygulaması, VtsHalAutomotiveVehicle_TargetTest.cpp dosyasında 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.
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ğer bu alandaki bir veya daha fazla alanda saklanı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. |
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ığında 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çerir.
payloads
boş değilse mülk yapılandırması olan gerçek verilerin listesini depolar.sharedMemoryFd
null değilseVehiclePropConfigs
değerinin serileştirilmiş yapısını depolayan bir paylaşılan hafıza dosyası içerir. Yapı, bir paketi serileştirmek içinwriteToParcel
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::vectorresults = getResults(); GetValueResults parcelableResults; ScopedAStatus status = vectorToStableLargeParcelable(std::move(results), &parcelableResults); if (status.isOk()) { // Send parcelableResults through callback. } else { // Handle error. }