Antarmuka Vehicle Hardware Abstraction Layer (VHAL) mendefinisikan properti yang dapat diterapkan oleh OEM dan berisi metadata properti (misalnya, apakah properti tersebut adalah int dan mode perubahan mana yang diizinkan). Antarmuka VHAL didasarkan pada akses (baca, tulis, berlangganan) properti, yang merupakan abstraksi untuk fungsi tertentu.
antarmuka HAL
VHAL menggunakan antarmuka berikut:
-
getAllPropConfigs()
menghasilkan(vec<VehiclePropConfig>propConfigs)
Daftar konfigurasi semua properti yang didukung oleh VHAL. CarService hanya menggunakan properti yang didukung. -
getPropConfigs(vec<int32_t> props)
menghasilkan(StatusCode status,vec<VehiclePropConfig> propConfigs);
Kembalikan konfigurasi properti yang dipilih. -
set(VehiclePropValue propValue)
menghasilkan(StatusCodestatus);
Tulis nilai untuk properti. Hasil tulis didefinisikan per properti. -
subscribe(IVehicleCallback callback, vec<SubscribeOptions> options)
menghasilkan(StatusCode status);
Mulai memantau perubahan nilai properti. Untuk properti yang dikategorikan,unsubscribe(IVehicleCallback callback, int32_t propId)
menghasilkan(StatusCode status);
VHAL menggunakan antarmuka panggilan balik berikut:
-
oneway onPropertyEvent(vec<VehiclePropValue>propValues);
Memberitahukan perubahan nilai properti kendaraan. Harus dilakukan hanya untuk properti yang berlangganan. -
oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
Kembalikan kesalahan atau kesalahan tingkat VHAL global per properti. Kesalahan global menyebabkan HAL restart, yang dapat menyebabkan restart komponen lain (termasuk aplikasi).
Properti kendaraan
Properti dapat menjadi hanya-baca, hanya-tulis (digunakan untuk meneruskan informasi ke tingkat VHAL), atau membaca dan menulis (dukungan sebagian besar properti bersifat opsional). Setiap properti secara unik diidentifikasi oleh kunci int32 dan memiliki tipe yang telah ditentukan ( value_type
):
-
BYTES
-
BOOLEAN
-
EPOCH_TIME
-
FLOAT
-
FLOAT[]
-
INT32
-
INT32[]
-
INT64
-
INT64[]
-
STRING
-
MIXED
Properti yang dikategorikan mungkin memiliki lebih dari satu nilai, berdasarkan jumlah zona yang didukung oleh properti tersebut.
Jenis daerah
VHAL mendefinisikan beberapa tipe area:
Tipe Area | Keterangan |
---|---|
GLOBAL | Properti ini adalah singleton dan tidak memiliki banyak area. |
WINDOW | Area berdasarkan windows, menggunakan VehicleAreaWindow enum. |
MIRROR | Area berdasarkan cermin, menggunakan VehicleAreaMirror enum. |
SEAT | Area berdasarkan kursi, menggunakan VehicleAreaSeat enum. |
DOOR | Area berdasarkan pintu, menggunakan VehicleAreaDoor enum. |
WHEEL | Area berdasarkan roda, menggunakan VehicleAreaWheel enum. |
Setiap properti yang dikategorikan harus menggunakan tipe area yang telah ditentukan sebelumnya. Setiap tipe area memiliki satu set bendera bit yang didefinisikan dalam enum untuk tipe area. Misalnya, area SEAT
mendefinisikan enum VehicleAreaSeat
:
-
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
- ...
ID Area
Properti yang dikategorikan ditangani melalui ID Area. Setiap properti yang dikategorikan dapat mendukung satu atau lebih ID Area. ID Area terdiri dari satu atau lebih flag dari masing-masing enum. Misalnya, properti yang menggunakan VehicleAreaSeat
mungkin menggunakan ID Area berikut:
Barang | Keterangan |
---|---|
ROW_1_LEFT | ROW_1_RIGHT | ID Area berlaku untuk kedua kursi depan. |
ROW_2_LEFT | Berlaku hanya untuk kursi belakang kiri. |
ROW_2_RIGHT | Berlaku hanya untuk kursi belakang kanan. |
Status properti
Setiap nilai properti dilengkapi dengan nilai VehiclePropertyStatus
. Ini menunjukkan status properti saat ini:
Barang | Keterangan |
---|---|
AVAILABLE | Properti tersedia dan nilainya valid. |
UNAVAILABLE | Nilai properti saat ini tidak tersedia. Digunakan untuk fitur yang dinonaktifkan sementara untuk properti yang didukung. |
ERROR | Ada yang salah dengan properti ini. |
Mengonfigurasi properti
Gunakan VehiclePropConfig
untuk memberikan informasi konfigurasi untuk setiap properti. Informasi meliputi:
Variabel | Keterangan |
---|---|
access | r , w , rw |
changeMode | Mewakili bagaimana properti dipantau, pada perubahan versus berkelanjutan. |
areaConfigs | areaId , min , dan nilai max . |
configArray | Parameter konfigurasi tambahan. |
configString | Informasi tambahan diteruskan sebagai string. |
minSampleRate | maxSampleRate |
prop | ID Properti, ke |
Menangani properti zona
Properti yang dikategorikan setara dengan kumpulan beberapa properti di mana setiap sub-properti dapat diakses dengan nilai ID Area yang ditentukan.
-
get
panggilan untuk properti yang dikategorikan selalu menyertakan ID Area dalam permintaan. Oleh karena itu, hanya nilai saat ini untuk ID Area yang diminta yang dikembalikan. Jika properti adalah global, maka ID Area adalah 0. - panggilan
set
untuk properti yang dikategorikan selalu menyertakan ID Area dalam permintaan. Oleh karena itu, hanya ID Area yang diminta yang diubah. - panggilan
subscribe
menghasilkan acara untuk semua ID Area untuk properti.
Dapatkan panggilan
Selama inisialisasi, nilai properti mungkin belum tersedia karena pesan jaringan kendaraan yang cocok belum diterima. Dalam kasus seperti itu, panggilan get
harus mengembalikan -EAGAIN
. Beberapa properti (seperti HVAC) memiliki properti daya hidup/mati yang terpisah. Memanggil get
untuk properti seperti itu (saat dimatikan) akan mengembalikan status UNAVAILABLE
daripada mengembalikan kesalahan. Misalnya, dapatkan Suhu HVAC
Gambar 1 . Dapatkan suhu HVAC (CS = CarService, VHAL = Vehicle HAL)
Setel panggilan
Panggilan yang set
adalah operasi asinkron yang melibatkan pemberitahuan peristiwa setelah perubahan yang diminta dibuat. Dalam operasi tipikal, panggilan yang set
mengarah pada pembuatan permintaan perubahan di seluruh jaringan kendaraan. Beberapa panggilan set
mungkin memerlukan data awal untuk siap tetapi selama inisialisasi, data tersebut mungkin belum tersedia. Dalam kasus seperti itu, panggilan yang set
harus mengembalikan -EAGAIN
. Beberapa properti dengan daya hidup/mati terpisah harus mengembalikan -ESHUTDOWN
ketika properti dimatikan dan disetel tidak dapat dilakukan. Sampai set
dibuat efektif, get
tidak selalu mengembalikan nilai yang sama dengan yang ditetapkan. Misalnya, set HVAC Temperature
.
Gambar 2 . Atur suhu HVAC (CS = CarService, VHAL = Vehicle HAL)
Menangani properti khusus
Untuk mendukung kebutuhan khusus mitra, VHAL mengizinkan properti khusus yang dibatasi untuk aplikasi sistem. Gunakan panduan berikut saat bekerja dengan properti kustom:
- ID properti harus dibuat menggunakan bidang berikut:
-
VehiclePropertyGroup:VENDOR
GrupVENDOR
hanya digunakan untuk properti khusus. -
VehicleArea
Pilih Jenis Area yang sesuai. -
VehiclePropertyType
Pilih tipe data yang tepat. JenisBYTES
memungkinkan lewatnya data mentah yang cukup dalam banyak kasus. Mengirim data besar secara sering melalui properti khusus dapat memperlambat akses seluruh jaringan kendaraan — berhati-hatilah saat menambahkan muatan besar. -
Property ID
Pilih ID empat gigitan untuk properti kustom.
-
- Untuk mencegah fragmentasi ekosistem, properti kustom tidak boleh digunakan untuk mereplikasi properti kendaraan yang sudah ada di ( VehiclePropertyIds SDK).
- Isi
VehiclePropConfig.configString
dengan deskripsi singkat tentang properti kustom. Ini memungkinkan alat pemeriksaan kewarasan untuk menandai replikasi yang tidak disengaja dari properti kendaraan yang ada. Misalnya, "keadaan lampu bahaya". - Akses melalui
CarPropertyManager
(untuk komponen Java) atau melalui Vehicle Network Service API (untuk native). Jangan memodifikasi API mobil lain karena hal itu dapat menyebabkan masalah kompatibilitas di masa mendatang. - Setelah menerapkan properti vendor, pilih hanya daftar izin di enum
VehicleVendorPermission
untuk properti vendor. Memetakan izin vendor ke properti sistem akan merusak CTS dan VTS.
Menangani properti HVAC
Anda dapat menggunakan VHAL untuk mengontrol HVAC dengan mengatur properti terkait HVAC. Sebagian besar properti HVAC adalah properti yang dikategorikan, meskipun beberapa properti non-zonasi (global). Contoh properti yang ditentukan meliputi:
Properti | Tujuan |
---|---|
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET | Atur suhu per zona. |
VEHICLE_PROPERTY_HVAC_RECIRC_ON | Kontrol resirkulasi per zona. |
Untuk melihat daftar lengkap properti HVAC, cari VEHICLE_PROPERTY_HVAC_*
di types.hal
. Saat properti HVAC menggunakan VehicleAreaSeat
, aturan tambahan untuk memetakan properti HVAC yang dikategorikan ke ID Area berlaku. Setiap kursi yang tersedia di dalam mobil harus menjadi bagian dari ID Area dalam susunan ID Area.
Contoh Satu. Sebuah mobil memiliki dua kursi depan ( ROW_1_LEFT, ROW_1_RIGHT
) dan tiga kursi belakang ( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT
). Mobil memiliki dua unit pengatur suhu: sisi pengemudi dan sisi penumpang.
- Satu set pemetaan ID Area yang valid untuk
HVAC_TEMPERATURE SET
adalah:-
ROW_1_LEFT | ROW_2_LEFT
-
ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
-
- Pemetaan alternatif untuk konfigurasi perangkat keras yang sama adalah:
-
ROW_1_LEFT | ROW_2_LEFT | ROW_2_CENTER
-
ROW_1_RIGHT | ROW_2_RIGHT
-
Contoh Dua. Sebuah mobil memiliki tiga baris kursi dengan dua kursi di baris depan ( ROW_1_LEFT, ROW_1_RIGHT
), tiga kursi di baris kedua ( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT
), dan tiga di baris ketiga ( ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT
). Mobil memiliki tiga unit pengatur suhu: sisi pengemudi, sisi penumpang, dan belakang. Cara yang masuk akal untuk memetakan HVAC_TEMPERATURE_SET
ke ID Area adalah sebagai larik tiga elemen:
-
ROW_1_LEFT
-
ROW_1_RIGHT
-
ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT
Menangani properti sensor
Properti sensor VHAL mewakili data sensor nyata atau informasi kebijakan seperti status mengemudi. Beberapa informasi sensor (seperti status mengemudi dan mode siang/malam) dapat diakses oleh aplikasi apa pun tanpa batasan karena data diperlukan untuk membangun aplikasi kendaraan yang aman. Informasi sensor lainnya (seperti kecepatan kendaraan) lebih sensitif dan memerlukan izin khusus yang dapat dikelola pengguna.
Lihat properti sensor yang didukung (di types.hal
).
Layanan Peta Kendaraan
Vehicle Map Service (VMS) menyediakan mekanisme untuk bertukar data peta antara klien melalui antarmuka pub/sub untuk mendukung fitur kendaraan umum, seperti Advanced Driver Assistance Systems (ADAS) . Klien dapat menyertakan sistem kendaraan yang berinteraksi melalui properti VMS di VHAL atau aplikasi Android istimewa. Data yang dibagikan di VMS dimaksudkan untuk dibatasi pada data peta untuk digunakan oleh sistem kendaraan dan aplikasi pendukung.
VMS dimaksudkan untuk digunakan hanya dalam implementasi Android Automotive; AOSP tidak berisi klien default yang menerbitkan atau berlangganan VMS. Untuk properti VMS di VHAL, jenis pesan dan struktur data dijelaskan dalam VHAL 2.0 di enum VmsMessageType
, yang mencantumkan jenis pesan VMS yang didukung. Enum ini digunakan sebagai bilangan bulat pertama dalam larik bilangan bulat properti kendaraan dan menentukan bagaimana sisa pesan didekodekan.