Lapisan abstraksi platform HAR

Gunakan perender ketersediaan tinggi (HAR) untuk menampilkan informasi kendaraan yang tidak dapat ditampilkan oleh Android. Hal ini dapat terjadi karena masalah seperti start-up, ketersediaan, keselamatan, atau peraturan. HAR adalah aplikasi bawaan portabel yang ditulis dalam Rust.

HAR, yang juga disebut framework HAR, menyertakan kode yang Anda gunakan untuk membangun aplikasi. Aplikasi yang dibuat dengan HAR adalah aplikasi berbasis HAR. Framework HAR memiliki bagian kode untuk platform yang berbeda. Misalnya, di sistem Linux, Anda menggunakan library seperti tinyalsa untuk suara. QNX memiliki library audio uniknya sendiri.

Platform mencakup hardware, sistem operasi, library sistem, dan faktor lainnya. Kode khusus platform memiliki bagian yang disebut subsistem. Setiap subsistem menangani satu fitur platform, seperti audio, kamera EVS, atau data kendaraan. Untuk mendukung platform, framework HAR memerlukan semua subsistemnya diimplementasikan.

Kode subsistem khusus platform dapat berjalan dalam proses yang sama dengan aplikasi berbasis HAR atau dalam proses yang terpisah. Jika terpisah, kode ini menangani komunikasi antar-proses (IPC) untuk membantu memverifikasi bahwa platform mendukung aplikasi. Mekanisme IPC yang kompleks harus menjadi bagian dari kode khusus platform.

Suite pengujian HAR menjalankan pengujian pada semua subsistem yang diterapkan untuk platform. Gunakan rangkaian alat ini untuk memeriksa apakah platform memenuhi persyaratan HAR dan menemukan masalah baru.

Terminologi

Istilah berikut ada di halaman ini:

Aplikasi berbasis HAR
Aplikasi khusus fungsi atau OEM yang dibuat dengan framework HAR. Aplikasi berbeda menurut status aplikasi dan aspek lain yang dapat disesuaikan.
Framework HAR
Menyediakan serangkaian alat inti yang digunakan untuk membuat aplikasi.
Abstraksi platform HAR
Bagian dari framework HAR yang menyediakan API yang diketahui yang harus diimplementasikan oleh semua platform target.
Suite pengujian HAR
Serangkaian pengujian yang diketahui atas penerapan platform, yang membantu memverifikasi bahwa penerapan platform mendukung framework HAR di platform tertentu.

Di luar cakupan

HAR tidak membahas:

  • Penerapan individual untuk semua target platform: Penerapan untuk platform target. Sebagai gantinya, halaman ini menjelaskan antarmuka yang harus dipenuhi oleh implementasi platform dan suite pengujian yang harus dipenuhi.

  • Kasus pengujian: Kasus pengujian khusus untuk semua antarmuka. Sebagai gantinya, halaman ini menjelaskan fungsi individual untuk antarmuka, termasuk argumen, nilai yang ditampilkan, perilaku yang diharapkan, dan efek samping yang diharapkan. Halaman ini menjelaskan rangkaian pengujian tempat Anda dapat menerapkan dan menjalankan kasus pengujian.

Struktur crate tingkat tinggi abstraksi platform

Project Rust terdiri dari crate. Gambar 1 menunjukkan struktur crate untuk lapisan abstraksi platform HAR. Lapisan abstraksi platform memengaruhi dua crate Rust atau lebih:

  • Abstraksi (deskripsi trait Rust) ada di crate framework HAR.

  • Implementasi untuk platform dilakukan dengan crate har-platform-x terpisah. Misalnya, har-platform-linux atau har-platform-android.

Anda tidak dapat membuat atau menguji crate HAR tanpa implementasi platform yang ditentukan. Hal ini disengaja karena framework HAR adalah framework.

Aplikasi yang menentukan platform harus dibangun dengan framework ini agar berfungsi dan diuji. Koneksi antara framework HAR dan platform ada dalam diagram ini:

Petak HAR

Gambar 1. Petak HAR.

Struktur umum dalam display-safety

Desain ini menambahkan serangkaian crate baru ke repositori display_safety, seperti yang diilustrasikan pada Gambar 2:

HAR crate, framework, dan aplikasi

Gambar 2. Modul abstraksi.

Suite pengujian secara struktural mirip dengan aplikasi, tetapi hanya mengandalkan crate implementasi platform tertentu. Suite pengujian harus merujuk pada trait dan struktur yang ditentukan dalam framework HAR, tetapi tidak boleh merujuk pada penerapan yang lebih kompleks.

Deskripsi tingkat tinggi lapisan abstraksi platform

Tabel ini menjelaskan subsistem khusus platform yang ditentukan oleh lapisan abstraksi platform HAR.

Nama abstraksi Fungsi terkait Deskripsi Catatan
OpenGL Rendering 2D Menyediakan kemampuan rendering OpenGLES 2.0/3.0 ke crate framework HAR.
Audio Rendering audio Menyediakan antarmuka seperti Android SoundPool untuk mengelola dan memutar audio sistem.
Camera Tampilan kamera kendaraan Menyediakan antarmuka seperti EVS HAL untuk mengelola dan menampilkan informasi kamera kendaraan.
Looper Konfigurasi tampilan dan loop utama aplikasi Menyediakan antarmuka seperti Android Looper untuk mengelola loop utama aplikasi khusus platform dan konfigurasi tampilan.
UserInput Sentuhan, keyboard, roda kemudi atau tombol putar, dan input khusus platform lainnya Menyediakan antarmuka untuk memasok aplikasi berbasis HAR dengan input sentuh dan keyboard. Implementasi referensi berdasarkan evdev Linux di har-user-input-evdev.
VehicleData Input status kendaraan Menyediakan antarmuka untuk memasok aplikasi berbasis HAR dengan aliran data kendaraan arbitrer seperti yang disediakan oleh Android VHAL atau CAN bus.
ResourceManager Dokumen desain yang di-cache khusus aplikasi Menyediakan cache dalam memori untuk resource yang diperlukan untuk memulai HAR, seperti gambar yang di-cache dan dokumen desain. Belum ada cache disk yang diterapkan.
Logging Logging dan telemetri sistem Menyediakan dukungan logging khusus platform menggunakan sistem pelacakan. Hal ini memungkinkan pengumpulan telemetri sebagaimana diperlukan oleh platform.
Tracing Pelacakan sistem Menyediakan abstraksi untuk berintegrasi dengan sistem pelacakan dan pembuatan profil.
Monitoring Pemantauan sistem Toolkit untuk memantau performa dan latensi dalam framework HAR.
Commlib Data kendaraan Implementasi referensi menggunakan serialisasi protobuf. Tidak digunakan lagi: Gunakan API yang ditentukan dalam reference/harry-control-api dan implementasi harry-grpcio-server dan harry-tonic-server (implementasi referensi).
TestSupport Menguji hook dukungan Mendukung penyiapan dan penghentian kasus pengujian, pembuatan peristiwa pengujian, dan pembuatan artefak pengujian. Misalnya, membuat peristiwa sentuh simulasi untuk menguji UserInput dan membuat screenshot untuk analisis. Fitur ini dikunci oleh Rust untuk mencegah penyertaan dalam build produksi.

Konvensi penamaan dan struktur framework

Tabel ini menampilkan nama dan struktur berikut:

  • Instance subsistem trait yang diharapkan disediakan oleh framework HAR. Setiap trait mewakili subsistem khusus platform yang harus diterapkan.

  • Nama yang diharapkan dari implementasi subsistem khusus platform dalam crate platform apa pun. Aplikasi berbasis HAR mengharapkan nama tertentu ini diterapkan.

  • Instance framework HAR enum dan struct terkait biasanya digunakan untuk meneruskan informasi dari penerapan terkait platform ke framework HAR.

Nama karakteristik Nama penerapan Enum dan struct framework HAR
GlContextFactory OpenGL trait harry::Renderer
harry::DisplayRotation
AudioApiFactory Audio harry::AudioApi
harry::AudioDevice
harry::VolumeMillibel
ICameraManager Camera harry::ICameraDevice
harry::CameraDescriptor
Looper Looper harry::LooperMessage
harry::LooperOptions
harry::DisplayId
PlatformVehicleData VehicleData harry::VehicleDataType
harry::VehicleDataListener
ResourceManager (Struct) ResourceManager harry::ResourceManagerMessage
harry::ResourceToken
harry::RawImageData
PlatformTracing Tracing T/A
HarPerformanceMonitor Monitoring harry::Renderer
harry::ResolveLatencyToken
PlatformTestSupport TestSupport harry::TestConfig
harry::TestDisplayConfig

Penanganan error dan kesalahan

API yang diusulkan menggunakan jenis Result<> Rust. Rust mengharuskan Anda memeriksa jenis Result yang membawa error. Jika tidak, compiler akan menghasilkan peringatan atau error. Pemeriksaan waktu build menerapkan pemeriksaan error dari kode khusus platform.

Error yang ditampilkan oleh penerapan platform adalah jenis harry::error::Error. Untuk memverifikasi bahwa jenis error platform tidak bocor ke dalam kode aplikasi, gunakan jenis error standar yang disediakan oleh framework HAR.

Jenis harry::error::Error diperluas untuk menyertakan error spesifik untuk semua subsistem:

// This is Rust
pub enum Error {
  Msg(String), // A generic message string
  // Legacy error type, likely to be removed or merged into Msg
  Audio(String),
}

Error yang tidak dapat dipulihkan terutama ditampilkan melalui antarmuka dan callback yang ditentukan.

Desain mendetail suite pengujian

Bagian ini menjelaskan desain suite pengujian, yang memverifikasi penerapan abstraksi khusus platform.

Membangun pengujian suite pengujian

Untuk build Soong (ditentukan oleh file Android.bp), pengujian dikompilasi sebagai bagian dari sistem build platform Android, dan eksekusinya dikelola oleh atest.

Menjalankan suite pengujian

Untuk menguji platform satu per satu:

Gunakan perintah atest dengan target pengujian yang relevan (misalnya, atest <module_name>). Perintah ini men-deploy dan menjalankan pengujian di perangkat atau emulator Android.