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

Properti Kendaraan

Kendaraan Hardware Abstraction Layer (VHAL) antarmuka mendefinisikan sifat OEM dapat menerapkan dan mengandung metadata properti (misalnya, apakah properti adalah int dan yang mode perubahan diperbolehkan). 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 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 (mendukung sebagian besar properti adalah opsional). Setiap properti unik diidentifikasi oleh kunci int32 dan memiliki tipe yang telah ditetapkan ( 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 Daerah berdasarkan pada jendela, menggunakan VehicleAreaWindow enum.
MIRROR Daerah berdasarkan cermin, menggunakan VehicleAreaMirror enum.
SEAT Daerah berdasarkan kursi, menggunakan VehicleAreaSeat enum.
DOOR Daerah berdasarkan pintu, menggunakan VehicleAreaDoor enum.
WHEEL Daerah berdasarkan atas 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. Sebagai contoh, SEAT daerah mendefinisikan VehicleAreaSeat enum:

  • 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. Sebagai contoh, sebuah properti menggunakan VehicleAreaSeat mungkin menggunakan Area ID 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 VehiclePropertyStatus nilai. 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 max nilai-nilai.
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 dikategorikan selalu meliputi ID Lokasi 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.
  • set panggilan untuk properti dikategorikan selalu meliputi ID Lokasi dalam permintaan. Oleh karena itu, hanya ID Area yang diminta yang diubah.
  • subscribe panggilan menghasilkan acara untuk semua ID Lokasi untuk properti.

Dapatkan panggilan

Selama inisialisasi, nilai properti mungkin belum tersedia karena pesan jaringan kendaraan yang cocok belum diterima. Dalam kasus tersebut, get panggilan harus kembali -EAGAIN . Beberapa properti (seperti HVAC) memiliki properti daya hidup/mati yang terpisah. Memanggil get untuk properti seperti (ketika dimatikan) harus kembali UNAVAILABLE status daripada kembali kesalahan. Misalnya, dapatkan Suhu HVAC

VHAL dapatkan contoh HVAC

Gambar 1. Dapatkan suhu HVAC (CS = CarService, VHAL = Vehicle HAL)

Setel panggilan

Sebuah set panggilan adalah operasi asynchronous melibatkan pemberitahuan acara setelah perubahan yang diminta dibuat. Dalam operasi yang khas, seorang set panggilan mengarah ke membuat permintaan perubahan di seluruh jaringan kendaraan. Beberapa set panggilan mungkin memerlukan data awal untuk siap tapi selama inisialisasi, data tersebut mungkin tidak tersedia belum. Dalam kasus tersebut, set panggilan harus kembali -EAGAIN . Beberapa properti dengan daya terpisah on / off harus kembali -ESHUTDOWN ketika properti dimatikan dan set tidak bisa dilakukan. Sampai set dibuat efektif, get tidak selalu mengembalikan nilai yang sama seperti apa yang diatur. 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
      The VENDOR kelompok hanya digunakan untuk properti kustom.
    • VehicleArea
      Pilih Jenis Area yang sesuai.
    • VehiclePropertyType
      Pilih tipe data yang tepat. BYTES jenis memungkinkan lewat 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 sifat kendaraan mereplikasi yang sudah ada di ( VehiclePropertyIds SDK).
  • Isi VehiclePropConfig.configString dengan deskripsi singkat dari properti kustom. Ini memungkinkan alat pemeriksaan kewarasan untuk menandai replikasi properti kendaraan yang ada secara tidak sengaja. Misalnya, "keadaan lampu bahaya".
  • Akses melalui CarPropertyManager (untuk komponen Java) atau melalui API Kendaraan Layanan Jaringan (untuk pribumi). Jangan memodifikasi API mobil lain karena hal itu dapat menyebabkan masalah kompatibilitas di masa mendatang.
  • Setelah menerapkan sifat penjual, pilih saja daftar izin di VehicleVendorPermission enum untuk properti penjual. 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, mencari VEHICLE_PROPERTY_HVAC_* di types.hal . Ketika properti HVAC menggunakan VehicleAreaSeat , aturan tambahan untuk pemetaan properti HVAC dikategorikan ke ID Lokasi 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.

  • Sebuah pemetaan yang sah Area ID 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 tempat duduk di barisan depan ( ROW_1_LEFT, ROW_1_RIGHT ), tiga kursi di 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 ini memiliki tiga unit pengatur suhu: sisi pengemudi, sisi penumpang, dan belakang. Sebuah cara yang masuk akal untuk memetakan HVAC_TEMPERATURE_SET ke ID Lokasi adalah sebagai array 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.

Melihat properti sensor yang didukung (di types.hal ).

Layanan Peta Kendaraan

Kendaraan Map Service (VMS) menyediakan mekanisme untuk peta pertukaran data antara klien melalui sebuah pub / sub antarmuka untuk mendukung fitur kendaraan umum, seperti Lanjutan Driver Bantuan Sistem (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 VmsMessageType enum, yang daftar jenis pesan VMS didukung. Enum ini digunakan sebagai bilangan bulat pertama dalam larik bilangan bulat properti kendaraan dan menentukan bagaimana sisa pesan didekodekan.