Araç Donanım Soyutlama Katmanı (VHAL) arayüzü, OEM'lerin uygulayabileceği özellikleri tanımlar ve mülk meta verilerini (ör. mülkün int olup olmadığı ve hangi değişiklik modlarına izin verildiği) içerir. VHAL arayüzü, belirli bir işlev için soyutlama olan bir mülke erişmeye (okuma, yazma, abone olma) dayanır.
HAL arayüzleri
VHAL aşağıdaki arayüzleri kullanır:
getAllPropConfigs()
,(vec<VehiclePropConfig>propConfigs)
değerini döndürür
VHAL tarafından desteklenen tüm mülklerin yapılandırmasını listeleyin. CarService yalnızca desteklenen özellikleri kullanır.getPropConfigs(vec<int32_t> props)
,(StatusCode status,vec<VehiclePropConfig> propConfigs);
değerini döndürür
Seçilen mülklerin yapılandırmasını döndürür.set(VehiclePropValue propValue)
,(StatusCodestatus);
değerini döndürür
Mülke bir değer yazın. Yazma sonucu mülk başına tanımlanır.subscribe(IVehicleCallback callback, vec<SubscribeOptions> options)
,(StatusCode status);
değerini oluşturur
Bir mülk değeri değişikliğini izlemeye başlayın. Bölgelendirilmiş mülk içinunsubscribe(IVehicleCallback callback, int32_t propId)
(StatusCode status);
değerini döndürür
VHAL aşağıdaki geri çağırma arayüzlerini kullanır:
oneway onPropertyEvent(vec<VehiclePropValue>propValues);
Araç mülkünün değer değişikliğini bildirir. Yalnızca abone olunan tesisler için yapılmalıdır.oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
Genel VHAL düzeyinde hata veya mülk başına hata döndürür. Genel hata, HAL'in yeniden başlatılmasına neden olur. Bu da uygulamalar da dahil olmak üzere diğer bileşenlerin yeniden başlatılmasına yol açabilir.
Araç özellikleri
Özellikler salt okunur, salt yazılabilir (bilgileri VHAL düzeyine iletmek için kullanılır) veya okuma ve yazma olabilir (çoğu özelliğin desteği isteğe bağlıdır). Her özellik, int32 anahtarıyla benzersiz şekilde tanımlanır ve önceden tanımlanmış bir türe (value_type
) sahiptir:
BYTES
BOOLEAN
EPOCH_TIME
FLOAT
FLOAT[]
INT32
INT32[]
INT64
INT64[]
STRING
MIXED
Bölgelere ayrılmış bir mülkün, mülk tarafından desteklenen bölge sayısına bağlı olarak birden fazla değeri olabilir.
Alan türleri
VHAL birden fazla alan türünü tanımlar:
Alan Türü | Açıklama |
---|---|
GLOBAL |
Bu mülk tekildir ve birden fazla alanı yoktur. |
WINDOW |
Pencerelere dayalı alan, VehicleAreaWindow enum kullanır. |
MIRROR |
Aynalar temelli alan, VehicleAreaMirror enum kullanır. |
SEAT |
Koltuğa dayalı alan, VehicleAreaSeat enum kullanır. |
DOOR |
Kapılara dayalı alan, VehicleAreaDoor enum kullanır. |
WHEEL |
Tekerleklere dayalı alan, VehicleAreaWheel enum kullanır. |
Her imar planı bölgesi, önceden tanımlanmış bir alan türü kullanmalıdır. Her alan türünün, alan türü için bir enum'da tanımlanan bir dizi bit işareti vardır. Örneğin, SEAT
alanı VehicleAreaSeat
enum'larını tanımlar:
ROW_1_LEFT = 0x0001
ROW_1_CENTER = 0x0002
ROW_1_RIGHT = 0x0004
ROW_2_LEFT = 0x0010
ROW_2_CENTER = 0x0020
ROW_2_RIGHT = 0x0040
ROW_3_LEFT = 0x0100
- ...
Alan kimlikleri
Bölgeye ayrılmış mülkler, alan kimlikleri aracılığıyla adreslenir. Her bölgeye ayrılmış mülk, bir veya daha fazla alan kimliğini destekleyebilir. Alan kimliği, ilgili enum'daki bir veya daha fazla işaretten oluşur. Örneğin, VehicleAreaSeat
kullanan bir mülk aşağıdaki alan kimliklerini kullanabilir:
Öğe | Açıklama |
---|---|
ROW_1_LEFT | ROW_1_RIGHT |
Alan kimliği her iki ön koltuk için de geçerlidir. |
ROW_2_LEFT |
Yalnızca arka sol koltuk için geçerlidir. |
ROW_2_RIGHT |
Yalnızca sağ arka koltuk için geçerlidir. |
Tesis durumu
Her mülk değeri bir VehiclePropertyStatus
değeriyle birlikte gelir.
Bu, tesisin mevcut durumunu gösterir:
Öğe | Açıklama |
---|---|
AVAILABLE |
Mülk müsait ve değer geçerli. |
UNAVAILABLE |
Tesis değeri şu anda kullanılamıyor. Desteklenen bir mülkte geçici olarak devre dışı bırakılan özellikler için kullanılır. |
ERROR |
Bu tesisle ilgili bir sorun var. |
Mülkleri yapılandırma
Her mülk için yapılandırma bilgileri sağlamak üzere VehiclePropConfig
öğesini kullanın. Bilgiler şunları içerir:
Değişken | Açıklama |
---|---|
access |
r , w , rw |
changeMode |
Bir mülkün nasıl izlendiğini (değişiklik veya sürekli) gösterir. |
areaConfigs |
areaId , min ve max değerleri. |
configArray |
Ek yapılandırma parametreleri. |
configString |
Dize olarak iletilen ek bilgiler. |
minSampleRate |
maxSampleRate |
prop |
Mülk kimliği, int |
Alt bölge özelliklerini işleme
Bölgelere ayrılmış mülk, her alt mülke belirtilen alan kimliği değeriyle erişilebilen birden fazla mülkten oluşan bir koleksiyona eşdeğerdir.
get
çağrısı, bölgelendirilmiş mülk için her zaman istekteki Alan Kimliği'ni içerir. Bu nedenle, yalnızca istenen alan kimliğinin mevcut değeri döndürülür. Mülk küreselse alan kimliği 0 olur.- Bölgelendirilmiş mülk için
set
çağrısı, istekte her zaman Alan Kimliği'ni içerir. Bu nedenle, yalnızca istenen alan kimliği değiştirilir. subscribe
çağrısı, mülkün tüm alan kimlikleri için etkinlik oluşturur.
Arama alma
Eşleşen araç ağı mesajı henüz alınmadığından, başlatma sırasında mülkün değeri henüz kullanılamayabilir. Bu tür durumlarda, get
çağrısı -EAGAIN
döndürmelidir. Bazı mülklerde (HVAC gibi) ayrı açma/kapatma düğmesi bulunur. Bu tür bir mülk için get
çağrısı yapıldığında (kapalıyken), hata yerine UNAVAILABLE
durumu döndürülmelidir. Örneğin, Isıtma, Havalandırma ve Soğutma Sıcaklığı'nı alın.
Şekil 1. HVAC sıcaklığını alma (CS = CarService, VHAL = Araç HAL'i)
Aramaları ayarlama
Tipik bir işlemde, set
çağrısı araç ağında bir değişiklik isteği yapılmasına neden olur. set
çağrısı ideal olarak mümkün olan en kısa sürede döndürülen eşzamansız bir işlemdir ancak eşzamanlı da olabilir. Bazı set
çağrıları için ilk verilerin hazır olması gerekebilir ancak bu veriler, başlatma sırasında henüz hazır olmayabilir. Bu tür durumlarda, set
çağrısı StatusCode#TRY_AGAIN
döndürmelidir. Açma ve kapama düğmeleri ayrı olan bazı tesisler, set
yapılamadığında ve tesis kapalıyken StatusCode#NOT_AVAILABLE
veya StatusCode#NOT_AVAILABLE_DISABLED
döndürmelidir. set
etkinleştirilene kadar get
, ayarlanan değerle aynı değeri döndürmez. Örneğin, set HVAC Temperature
.
Şekil 2. HVAC sıcaklığını ayarlama (CS = CarService, VHAL = Vehicle HAL)
Özel özellikleri işleme
VHAL, iş ortaklarına özgü ihtiyaçları desteklemek için sistem uygulamalarıyla sınırlı olan özel mülklere izin verir. Özel mülklerle çalışırken aşağıdaki yönergeleri kullanın:
- Mülk kimliği aşağıdaki alanlar kullanılarak oluşturulmalıdır:
VehiclePropertyGroup:VENDOR
VENDOR
grubu yalnızca özel mülkler için kullanılır.VehicleArea
Uygun bir alan türü seçin.VehiclePropertyType
Uygun veri türünü seçin.BYTES
türü, çoğu durumda yeterli olan ham verilerin iletilmesine olanak tanır. Özel mülkler aracılığıyla sık sık büyük veri göndermek, araç ağının erişimini tamamen yavaşlatabilir. Büyük bir yük eklerken dikkatli olun.Property ID
Özel mülk için dört nibble kimliği seçin.
- Ekosistemin parçalanmasını önlemek için, (VehiclePropertyIds SDK'sında) mevcut olan araç özelliklerini kopyalamak amacıyla özel özellikler kullanılmamalıdır.
- Özel mülkün kısa bir açıklamasını
VehiclePropConfig.configString
içine girin. Bu sayede, mantık kontrolü araçları mevcut araç özelliklerinin yanlışlıkla kopyalanmasını işaretleyebilir. Örneğin, "araç ikaz ışığı durumu". CarPropertyManager
(Java bileşenleri için) veya Vehicle Network Service API (yerel için) üzerinden erişin. Diğer araç API'lerini değiştirmeyin. Aksi takdirde gelecekte uyumluluk sorunlarıyla karşılaşabilirsiniz.- Tedarikçi firma özelliklerini uyguladıktan sonra, tedarikçi firma özellikleri için
VehicleVendorPermission
enum'undayalnızca izin listesini seçin. Tedarikçi firma izinlerini sistem özellikleriyle eşlemek CTS ve VTS'yi bozar.
Isıtma, havalandırma ve soğutma sistemi özelliklerini işleme
Isıtma, havalandırma ve soğutma ile ilgili özellikleri ayarlayarak VHAL'ı kullanarak Isıtma, havalandırma ve soğutma'yı kontrol edebilirsiniz. Çoğu Isıtma, Havalandırma ve Soğutma mülkü bölgelendirilmiş mülk olsa da birkaçı bölgelendirilmemiş (global) mülktür. Tanımlanmış örnek özellikler arasında şunlar bulunur:
Özellik | Amaç |
---|---|
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET |
Sıcaklığı bölgeye göre ayarlayın. |
VEHICLE_PROPERTY_HVAC_RECIRC_ON |
Bölge başına yeniden dolaşımı kontrol edin. |
Isıtma, havalandırma ve soğutma mülklerinin tam listesini görmek için types.hal
içinde VEHICLE_PROPERTY_HVAC_*
'ü arayın. HVAC mülkü VehicleAreaSeat
kullanırken, bölgelendirilmiş bir HVAC mülkünü alan kimlikleriyle eşlemeyle ilgili ek kurallar geçerli olur. Araçtaki her müsait koltuk, Alan Kimliği dizisindeki bir Alan Kimliği'nin parçası olmalıdır.
Örnek Bir. Bir aracın iki ön koltuğu (ROW_1_LEFT, ROW_1_RIGHT
) ve üç arka koltuğu (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT
) vardır. Araçta iki sıcaklık kontrol birimi vardır: sürücü tarafı ve yolcu tarafı.
HVAC_TEMPERATURE SET
için geçerli bir alan kodu eşleme grubu:ROW_1_LEFT | ROW_2_LEFT
ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
- Aynı donanım yapılandırması için alternatif bir eşleme:
ROW_1_LEFT | ROW_2_LEFT | ROW_2_CENTER
ROW_1_RIGHT | ROW_2_RIGHT
İkinci örnek. Bir araçta ön sırada iki koltuk (ROW_1_LEFT, ROW_1_RIGHT
), ikinci sırada üç koltuk (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT
) ve üçüncü sırada üç koltuk (ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT
) bulunur. Araçta üç sıcaklık kontrol birimi vardır: sürücü tarafı, yolcu tarafı ve arka. HVAC_TEMPERATURE_SET
değerini alan kimlikleriyle eşlemenin makul bir yolu, üç öğeli bir dizi kullanmaktır:
ROW_1_LEFT
ROW_1_RIGHT
ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT
Sensör özelliklerini işleme
VHAL sensör özellikleri, gerçek sensör verilerini veya sürüş durumu gibi politika bilgilerini temsil eder. Güvenli bir araç uygulaması oluşturmak için zorunlu olan bazı sensör bilgilerine (ör. sürüş durumu ve gündüz/gece modu) tüm uygulamalar kısıtlama olmadan erişebilir. Diğer sensör bilgileri (araç hızı gibi) daha hassastır ve kullanıcıların yönetebileceği belirli izinler gerektirir.
Desteklenen sensör özelliklerine (types.hal
içinde) bakın.
Araç Harita Hizmeti
Araç Harita Hizmeti (VMS), İleri Seviye Sürücü Yardım Sistemleri (ADAS) gibi yaygın araç özelliklerini desteklemek için istemciler arasında harita verilerini bir pub/sub arayüzü üzerinden alışveriş yapma mekanizması sağlar. İstemciler, VHAL'deki VMS mülkü aracılığıyla arayüz oluşturan araç sistemlerini veya ayrıcalıklı Android uygulamalarını içerebilir. AHH'de paylaşılan verilerin, araç sistemleri ve destekleyici uygulamalar tarafından kullanılacak harita verileriyle sınırlı olması amaçlanmıştır.
VMS yalnızca Android Automotive uygulamalarında kullanılmak üzere tasarlanmıştır. AOSP, VMS yayınlayan veya VMS'ye abone olan varsayılan istemciler içermez. VHAL'daki VMS mülkü için mesaj türleri ve veri yapıları, desteklenen VMS mesajlarının türlerini listeleyen VmsMessageType
enum'unda VHAL 2.0'da açıklanmaktadır. Bu enum, araç mülkü tam sayı dizisindeki ilk tam sayı olarak kullanılır ve mesajın geri kalanının nasıl kodu çözüleceğini belirler.