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);
oluşturur
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ç özelliğinin 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 diğer bileşenlerin (uygulamalar dahil) 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ölgelerin 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 tesis bir tekilliktir ve birden fazla alana sahip değildir. |
WINDOW |
Pencereye göre alan, VehicleAreaWindow numaralandırmasını 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 |
Alan, tekerleklere göre, VehicleAreaWheel numaralandırmasını kullanıyor. |
Bölgelere ayrılmış her mülk, ö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ölgelendirilmiş mülkler, alan kimlikleri aracılığıyla adreslenir. Alt bölgelere ayrılmış her 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 |
Özellik kullanılabilir 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ülk 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. Tesis küreselse alan kimliği 0 olur.set
ç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ği değiştirilir.subscribe
çağrısı, mülkün tüm alan kimlikleri için etkinlik oluşturur.
Arama alın
Eşleşen araç ağı mesajı henüz alınmadığından, başlatma sırasında mülkün değeri henüz mevcut olmayabilir. Bu tür durumlarda, get
çağrısı -EAGAIN
döndürmelidir. Bazı tesislerin (HVAC gibi) açma/kapatma güç özellikleri ayrıdır. Bu tür bir özellik için get
çağrıldığında (kapalıyken), hata döndürmek yerine UNAVAILABLE
durumu döndürülür. Örneğin, Isıtma, Havalandırma ve Soğutma sıcaklığını alın.
1. Şekil. 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 en kısa sürede döndüren eşzamansız bir işlemdir ancak eşzamanlı da olabilir. Bazı set
çağrıları için başlangıç verilerinin hazır olması gerekebilir ancak başlatma sırasında bu tür veriler henüz kullanılamayabilir. 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 iletilmesini sağlar. Ö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 amacıyla, (VehiclePropertyIds SDK'sında) zaten bulunan araç özelliklerini kopyalamak için özel mülkler kullanılmamalıdır.
VehiclePropConfig.configString
alanına, özel özelliğin kısa bir açıklamasını girin. Bu sayede, mevcut araç özelliklerinin yanlışlıkla kopyalandığını doğrulama araçları tarafından işaretlenebilir. Örneğin, "araç ikaz ışığı durumu".CarPropertyManager
(Java bileşenleri için) veya Vehicle Network Service API (yerel reklamlar için) üzerinden erişim. Diğer araç API'lerinde değişiklik yapmak gelecekte uyumluluk sorunlarına yol açabilir.- Tedarikçi firma özelliklerini uyguladıktan sonra, tedarikçi firma özellikleri için yalnızca
VehicleVendorPermission
sıralamasındaki 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
HVAC ile ilgili özellikleri ayarlayarak HVAC'yi kontrol etmek için VHAL'yi kullanabilirsiniz. HVAC özelliklerinin çoğu alt bölgeli mülklerdir, ancak bazıları alt bölgeli olmayan (genel) mülklerdir. Tanımlanan özellikler örnekleri 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
'da VEHICLE_PROPERTY_HVAC_*
'yi 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 arabanı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 bulunur: 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 bakın (types.hal
olarak).
Araç Harita Hizmeti
Araç Harita Hizmeti (VMS), Gelişmiş Sürüş Yardım Sistemleri (ADAS) gibi yaygın araç özelliklerini desteklemek için bir yayıncı/alt arayüzü aracılığıyla istemciler arasında harita verisi alışverişi yapmaya yönelik bir mekanizma 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ım amaçlıdır. AOSP, sanal makineler yayınlayan veya sanal makinelere abone olan varsayılan istemcileri 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 sıralama, araç özelliği tamsayılar dizisinde ilk tam sayı olarak kullanılır ve mesajın geri kalanının nasıl çözüldüğünü belirler.