Araç Donanımı Soyutlama Katmanı (VHAL) arabirimi, OEM'lerin uygulayabileceği özellikleri tanımlar ve özellik meta verilerini içerir (örneğin, özelliğin bir int olup olmadığı ve hangi değişiklik modlarına izin verildiği). VHAL arabirimi, belirli bir işlev için soyutlama olan bir özelliğe erişmeye (okuma, yazma, abone olma) dayanır.
HAL arayüzleri
VHAL aşağıdaki arabirimleri kullanır:
-
getAllPropConfigs()
oluşturur(vec<VehiclePropConfig>propConfigs)
VHAL tarafından desteklenen tüm özelliklerin yapılandırmasını listeleyin. CarService yalnızca desteklenen özellikleri kullanır. -
getPropConfigs(vec<int32_t> props)
oluşturur(StatusCode status,vec<VehiclePropConfig> propConfigs);
Seçili özelliklerin yapılandırmasını döndür. -
set(VehiclePropValue propValue)
oluşturur(StatusCodestatus);
Özelliğe bir değer yazın. Yazma sonucu özellik başına tanımlanır. -
subscribe(IVehicleCallback callback, vec<SubscribeOptions> options)
(StatusCode status);
Bir özellik değeri değişikliğini izlemeye başlayın. Bölgeli özellik için,unsubscribe(IVehicleCallback callback, int32_t propId)
(StatusCode status);
VHAL, aşağıdaki geri arama arabirimlerini kullanır:
-
oneway onPropertyEvent(vec<VehiclePropValue>propValues);
Araç özelliğinin değer değişikliğini bildirir. Yalnızca abone olunan mülkler için yapılmalıdır. -
oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
Özellik başına global VHAL düzeyinde hata veya hata döndürün. Genel hata, HAL'nin yeniden başlatılmasına neden olur ve bu, diğer bileşenlerin (uygulamalar dahil) yeniden başlatılmasına neden olabilir.
Araç özellikleri
Özellikler salt okunur, salt yazılır (bilgiyi VHAL düzeyine iletmek için kullanılır) veya okuma ve yazma (çoğu özelliğin desteklenmesi isteğe bağlıdır) olabilir. Her özellik, bir int32 anahtarıyla benzersiz bir şekilde tanımlanır ve önceden tanımlanmış bir türe sahiptir ( value_type
):
-
BYTES
-
BOOLEAN
-
EPOCH_TIME
-
FLOAT
-
FLOAT[]
-
INT32
-
INT32[]
-
INT64
-
INT64[]
-
STRING
-
MIXED
Bölgeye ayrılmış bir mülk, mülk tarafından desteklenen bölge sayısına bağlı olarak birden fazla değere sahip olabilir.
Alan türleri
VHAL, birden çok alan türünü tanımlar:
Alan Türü | Tanım |
---|---|
GLOBAL | Bu özellik bir tektir ve birden fazla alanı yoktur. |
WINDOW | Pencerelere dayalı alan, VehicleAreaWindow kullanır. |
MIRROR | Aynalara dayalı alan, VehicleAreaMirror kullanır. |
SEAT | Koltuklara dayalı alan, VehicleAreaSeat kullanır. |
DOOR | Kapı bazında alan, VehicleAreaDoor enum kullanır. |
WHEEL | Tekerleklere dayalı alan, VehicleAreaWheel kullanır. |
Bölgeye ayrılmış her mülk, önceden tanımlanmış bir alan türü kullanmalıdır. Her alan türü, alan türü için bir numaralandırmada tanımlanmış bir dizi bit bayrağına sahiptir. Örneğin, SEAT
alanı VehicleAreaSeat
numaralandırmaları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ölgeli mülkler, Alan Kimlikleri aracılığıyla adreslenir. Her bölgeli mülk, bir veya daha fazla Alan Kimliğini destekleyebilir. Bir Alan Kimliği, ilgili numaralandırmasından bir veya daha fazla bayraktan oluşur. Örneğin, VehicleAreaSeat
kullanan bir mülk aşağıdaki Alan Kimliklerini kullanabilir:
Öğe | Tanım |
---|---|
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 arka sağ koltuk için geçerlidir. |
Mülk durumu
Her mülk değeri bir VehiclePropertyStatus
değeriyle birlikte gelir. Bu, mülkün mevcut durumunu gösterir:
Öğe | Tanım |
---|---|
AVAILABLE | Mülk mevcut ve değer geçerli. |
UNAVAILABLE | Mülk değeri şu anda kullanılamıyor. Desteklenen bir özellik için geçici olarak devre dışı bırakılan özellikler için kullanılır. |
ERROR | Bu mülkte bir sorun var. |
Bir özelliği yapılandırma
Her bir özellik için yapılandırma bilgilerini sağlamak için VehiclePropConfig
kullanın. Bilgi şunları içerir:
Değişken | Tanım |
---|---|
access | r , w , rw |
changeMode | Değişime karşı sürekli olarak bir özelliğin nasıl izlendiğini temsil eder. |
areaConfigs | areaId , min ve max değerleri. |
configArray | Ek yapılandırma parametreleri. |
configString | Ek bilgiler bir dize olarak iletildi. |
minSampleRate | maxSampleRate |
prop | Mülk kimliği, int |
İşleme bölgesi özellikleri
Bölgeli bir mülk, her bir alt mülke belirtilen Alan Kimliği değeriyle erişilebildiği birden çok mülk koleksiyonuna eşdeğerdir.
- bölgeli mülk
get
çağrıyı al, istekte her zaman Alan Kimliğini içerir. Bu nedenle, yalnızca istenen Alan Kimliği için geçerli değer döndürülür. Özellik global ise, Alan Kimliği 0'dır. - bölgeli mülk için
set
çağrısı, istekte her zaman Alan Kimliğini 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 etkinlikler oluşturur.
aramaları al
Başlatma sırasında, eşleşen araç ağı mesajı henüz alınmadığından özelliğin değeri henüz mevcut olmayabilir. Bu gibi durumlarda, get
çağrısı -EAGAIN
döndürmelidir. Bazı özelliklerin (HVAC gibi) ayrı açma/kapama özelliği vardır. Böyle bir özellik için get
çağrısı (kapalıyken) bir hata döndürmek yerine UNAVAILABLE
durumu döndürmelidir. Örneğin, HVAC Sıcaklığını alın
Şekil 1 . HVAC sıcaklığını alın (CS = CarService, VHAL = Araç HAL)
Aramaları ayarla
Bir set
çağrısı, istenen bir değişiklik yapıldıktan sonra olay bildirimini içeren eşzamansız bir işlemdir. Tipik bir işlemde, bir set
arama, araç ağı üzerinden bir değişiklik talebi yapılmasına yol açar. Bazı set
aramalar, başlangıç verilerinin hazır olmasını gerektirebilir, ancak başlatma sırasında bu tür veriler henüz mevcut olmayabilir. Bu gibi durumlarda, set
çağrısı -EAGAIN
döndürmelidir. Ayrı güç açma/kapama özelliğine sahip bazı özellikler, özellik kapatıldığında ve ayar yapılamadığında -ESHUTDOWN
döndürmelidir. set
etkin hale getirilene kadar get
, set edilenle aynı değeri döndürmez. Örneğin, set HVAC Temperature
.
Şekil 2 . HVAC sıcaklığını ayarlayın (CS = CarService, VHAL = Araç HAL)
Özel özellikleri işleme
İş ortağına özel ihtiyaçları desteklemek için VHAL, sistem uygulamalarıyla sınırlı özel özelliklere izin verir. Özel özelliklerle ç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 özellikler 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 geçişine izin verir. Özel özellikler aracılığıyla sık sık büyük veri göndermek, tüm araç ağı erişimini yavaşlatabilir - büyük bir yük eklerken dikkatli olun. -
Property ID
Özel özellik için dört kepçe kimliği seçin.
-
- Ekosistem parçalanmasını önlemek için, ( VehiclePropertyIds SDK 'da zaten var olan araç özelliklerini çoğaltmak için özel özellikler kullanılmamalıdır).
- Özel özelliğin kısa bir açıklamasıyla
VehiclePropConfig.configString
doldurun. Bu, akıl sağlığı kontrol araçlarının mevcut araç özelliklerinin yanlışlıkla çoğaltılmasını işaretlemesine olanak tanır. Örneğin, "tehlikeli ışık durumu." -
CarPropertyManager
(Java bileşenleri için) veya Araç Ağı Hizmeti API'si (yerel için) aracılığıyla erişim. Gelecekte uyumluluk sorunlarına yol açabileceğinden, diğer araç API'lerini değiştirmeyin. - Satıcı özelliklerini uyguladıktan sonra, yalnızca
VehicleVendorPermission
numaralandırmasında satıcı özellikleri için izinler listesini seçin. Satıcı izinlerinin sistem özelliklerine eşlenmesi CTS ve VTS'yi bozar.
HVAC özelliklerini işleme
HVAC ile ilgili özellikleri ayarlayarak HVAC'ı kontrol etmek için VHAL'ı kullanabilirsiniz. HVAC mülklerinin çoğu, bölgelere ayrılmış mülklerdir, ancak birçoğu bölgesiz (küresel) mülklerdir. Örnek tanımlı özellikler şunları içerir:
Mülk | Amaç |
---|---|
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET | Bölge başına sıcaklığı ayarlayın. |
VEHICLE_PROPERTY_HVAC_RECIRC_ON | Bölge başına devridaimi kontrol edin. |
HVAC özelliklerinin tam listesini görmek için, type.hal içinde types.hal
VEHICLE_PROPERTY_HVAC_*
için arama yapın. HVAC özelliği VehicleAreaSeat
kullandığında, bölgelere ayrılmış bir HVAC mülkünü Alan Kimliklerine eşlemek için ek kurallar uygulanır. Arabadaki mevcut her koltuk, Alan Kimliği dizisindeki bir Alan Kimliğinin 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 ünitesi bulunur: sürücü tarafı ve yolcu tarafı.
-
HVAC_TEMPERATURE SET
için geçerli bir Alan Kimlikleri eşleme seti:-
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
-
Örnek İki. Bir arabada, ö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 ) olmak üzere üç koltuk sırası ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT
. Araçta üç sıcaklık kontrol ünitesi bulunur: sürücü tarafı, yolcu tarafı ve arka. HVAC_TEMPERATURE_SET
Alan Kimlikleriyle eşlemenin makul bir yolu, üç öğeli bir dizidir:
-
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 veriler zorunlu olduğundan, bazı sensör bilgilerine (sürüş durumu ve gündüz/gece modu gibi) herhangi bir kısıtlama olmaksızın erişilebilir. Diğer sensör bilgileri (araç hızı gibi) daha hassastır ve kullanıcıların yönetebileceği özel izinler gerektirir.
Desteklenen sensör özelliklerine bakın ( types.hal
içinde).
Araç Harita Hizmeti
Araç Harita Hizmeti (VMS), Gelişmiş Sürücü Yardım Sistemleri (ADAS) gibi yaygın araç özelliklerini desteklemek için bir yayın/alt arabirim aracılığıyla istemciler arasında harita verisi alışverişi yapmak için bir mekanizma sağlar. İstemciler, VHAL veya ayrıcalıklı Android uygulamalarında VMS özelliği aracılığıyla arabirim oluşturan araç sistemlerini içerebilir. VMS'de paylaşılan verilerin, araç sistemleri ve destekleyici uygulamalar tarafından kullanılmak üzere harita verileriyle sınırlı olması amaçlanmıştır.
VMS, yalnızca Android Otomotiv uygulamalarında kullanılmak üzere tasarlanmıştır; AOSP, VMS'ye yayınlayan veya VMS'ye abone olan varsayılan istemcileri içermez. VHAL'deki VMS özelliği için, ileti türleri ve veri yapıları, desteklenen VMS iletilerinin türlerini listeleyen VmsMessageType
numaralandırmasında VHAL 2.0'da açıklanmıştır. Bu numaralandırma, araç özelliği tamsayıları dizisindeki ilk tamsayı olarak kullanılır ve mesajın geri kalanının nasıl çözüleceğini belirler.