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()
|
|
VehiclePropConfigs getPropConfigs(in int[] props)
|
|
void getValues(IVehicleCallback callback, in GetValueRequests requests)
GetValueRequest işlemini eşzamansız olarak işler. Sonuç, geri çağırma onGetValues yöntemiyle iletilir. |
|
void setValues(IVehicleCallback callback, in SetValueRequests requests)
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)
maxSharedMemoryFileCount kullanılmıyor. |
|
void unsubscribe(in IVehicleCallback callback, in int[] propIds)
|
|
returnSharedMemory(in IVehicleCallback callback, long sharedMemoryId)
|
|
(Android 16'da yeni)SupportedValuesListResults getSupportedValuesLists(in List
|
|
(Android 16'da yeni)MinMaxSupportedValueResults getMinMaxSupportedValue(in List
|
|
void registerSupportedValueChangeCallback(in IVehicleCallback callback, in List
|
|
void unregisterSupportedValueChangeCallback(in IVehicleCallback callback, in List
|
Geri çağırmalar IVehicleCallback.aidl
içinde tanımlanır ve şu yöntemleri içerir.
Yöntem | |
---|---|
oneway void onGetValues(in GetValueResults responses)
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)
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)
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.VehiclePropValue yayınlanmalıdır.SharedMemoryFileCount her zaman 0 . |
|
oneway void onPropertySetError(in VehiclePropErrors errors)
onSetValues kullanılmalıdır. |
|
oneway void onSupportedValueChange(in List
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ğilseVehiclePropConfigs
öğesinin serileştirilmiş yapısını depolayan bir paylaşılan bellek dosyası içerir. Yapı, bir paketi serileştirmek içinwriteToParcel
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::vectorresults = getResults(); GetValueResults parcelableResults; ScopedAStatus status = vectorToStableLargeParcelable(std::move(results), &parcelableResults); if (status.isOk()) { // Send parcelableResults through callback. } else { // Handle error. }