Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Properti Kendaraan

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

VHAL dapatkan contoh 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 .

VHAL mengatur contoh HVAC

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
      Grup VENDOR hanya digunakan untuk properti khusus.
    • VehicleArea
      Pilih Jenis Area yang sesuai.
    • VehiclePropertyType
      Pilih tipe data yang tepat. Jenis BYTES 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.