VHAL arayüzü

AIDL VHAL, android.hardware.automotive.vehicle namespace VHAL arayüzü aşağıdaki adreste tanımlanır: IVehicle.aidl Aksi belirtilmedikçe tüm yöntemler uygulanmalıdır.

Yöntem
VehiclePropConfigs getAllPropConfigs().
Tüm Mülk Yapılandırmaları desteklenir bu araç HAL'si tarafından yapılıyor.
VehiclePropConfigs getPropConfigs(in int[] props).
Aşağıdakileri içeren bir liste döndürür: Belirli bir mülk için Mülk Yapılandırmaları mülk kimlikleridir.
void getValues(IVehicleCallback callback, in GetValueRequests requests).
Araç özelliği değerlerini eşzamansız olarak alın. Bir grubu işleme alır /GetValueRequest eşzamansız olarak. Sonuç, onGetValues geri çağırma yöntemi.
void setValues(IVehicleCallback callback, in SetValueRequests requests).
Araç özelliği değerlerini eşzamansız olarak ayarlayın. Bir grup iş parçacığının eşzamansız olarak SetValueRequest. Sonuç, onSetValues geri çağırma yöntemi.
void subscribe(in IVehicleCallback callback, in SubscribeOptions[] options, int maxSharedMemoryFileCount).
Belirtilen seçeneklerle mülk etkinliklerine abone olur. Abonelik seçenekleri şunlardır: Hz cinsinden (sürekli bir mülk için) mülk kimliği, mülk alanı kimliği ve örnek hızı. maxSharedMemoryFileCount kullanılmıyor.
void unsubscribe(in IVehicleCallback callback, in int[] propIds).
Belirtilen tesisler için daha önce abone olunan tesis etkinliklerinin e-posta listesinden çıkmanızı sağlar.
returnSharedMemory(in IVehicleCallback callback, long sharedMemoryId).
Kullanılmaz ve işlemsiz olarak uygulanabilir.

Geri çağırma işlevleri şurada tanımlanır: IVehicleCallback.aidl ve bu yöntemleri içerir.

Yöntem
oneway void onGetValues(in GetValueResults responses).
Değer sonuçları almak için getValues işlevi için geri çağırma. Telefon edildi hazır olduğunda bunu yapabilirsiniz.
oneway void onSetValues(in SetValueResults responses).
Ayarlanan değer sonuçlarını sunmak için setValues işlevi için geri çağırma. Şu durumda aranır: VHAL, mülk grubu isteklerinden bazılarını işlemeyi tamamladı.
oneway void onPropertyEvent(in VehiclePropValues propValues, int sharedMemoryFileCount).
Mülk güncelleme etkinliklerini raporlamak için geri çağırma.
ziyaret edin.
CONTINUOUS özelliği, bir tesis etkinliği abone olma örnek hızına göre gerçekleşir Hz veya araç veri yolu mesaj frekansı olarak ayarlayın. Tesis etkinliği, bir mülkün görebilirsiniz. Örneğin, "kullanılamıyor"dan "uygun"a.
ziyaret edin.
ON_CHANGE özelliğinde, özellik etkinliği, bir özelliğin değeri veya mülkün durumu değişir.
ziyaret edin.
SharedMemoryFileCount her zaman 0.
oneway void onPropertySetError(in VehiclePropErrors errors).
Karşılık gelen ayar olmayan eşzamansız mülk grubu hatalarını raporlama için geri çağırma isteği gönderin. Hatanın hangi küme isteği için olduğunu bilirsek, onSetValues yerine bir bunun yerine hata sonucu kullanılmalıdır.

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

VHAL uygulaması, şu adreste bulunan VHAL VTS tarafından doğrulanır: VtsHalAutomotiveVehicle_TargetTest.cpp hakkında daha fazla bilgi edinin. Test, temel yöntemlerin doğru şekilde uygulandığını ve desteklenen özelliğin emin olun.

Araç özelliği değeri

Şunu kullanın: VehiclePropValue her bir mülkün değerini açıklayan yapıyı ve aşağıdaki alanları içerir:

Alan Açıklama
timestamp Etkinliğin gerçekleştiği ve SystemClock.elapsedRealtimeNano() saat.
prop Bu değerin mülk kimliği.
areaid Bu değerin alan kimliği. Alan, bölgede listelenen desteklenen alanlardan biri olmalıdır Kimlik yapılandırması veya genel mülkler için 0.
value Gerçek özelliğin değerini içeren veri yapısı. Mülk türüne göre, gerçek değeri kaydetmek için bu alan içindeki daha fazla alan kullanılır. Örneğin, ilk olarak öğesi, Int32 türü mülkler için kullanılır.value.int32Values 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. Yani, işlev gerçek get veya set işlemi tamamlanmadan önce geri dönebilir. İşlem sonuçları (örneğin, getValues için özellik değeri ve başarı veya setValues için hata durumu) bağımsız değişkenler olarak iletilen geri çağırmalarla iletilir.

Uygulama, isteği işleyen bağlayıcı iş parçacığındaki sonucu engellememelidir. Bunun yerine, isteği bir istek sırasında depolamanızı ve ayrı bir işleyici ileti dizisi kullanmanızı öneririz. . Bkz. Şu referans için Referans Uygulama: bolca fırsat sunuyor.

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

Büyük parseller

VehiclePropConfigs gibi XXXs adlı tüm yapılar SetValueRequests ve VehiclePropValues olarak adlandırılır LargeParcelable (veya StableLargeParcelable). Her biri bağlayıcı sınırlamalarını aşabilecek büyük verileri iletmek için kullanılan değerleri ( LargeParcelable kitaplığı uygulaması) kapsamalıdır. Her birinin benzer bir yapı tanımıdır.

Rehberlik Açıklama
payloads Değer boyutu, bağlayıcı bellek sınırına veya boş bir listeye sığdığında değerlerin listesi.
sharedMemoryFd Serileştirilmiş verileri depolayan paylaşılan bir bellek dosyasına işaret eden boş değer atanabilir dosya tanımlayıcısı değer listesi çok büyükse yük oluşturacaktır.

Ö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 veya boş olmayan bir yük içeriyor sharedMemoryFd.

  • payloads boş değilse gerçek verilerin bir listesini saklar. özellik yapılandırmasını kullanabilirsiniz.
  • sharedMemoryFd, null değilse VehiclePropConfigs serileştirilmiş yapısı. Bu yapı, Parseli serileştirmek için writeToParcel işlevi.

VHAL için bir Java istemcisi olan Car Service, bu araçların serileştirme ve serileştirme işlemlerini LargeParcelable VHAL uygulamaları ve yerel istemciler için, LargeParcelable, LargeParcelable kitaplığına veya kullanışlı bir sarmalayıcı sınıfına ParcelableUtils.h.

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

// '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 için sonuçları bağlayıcı üzerinden 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.
}