使用高可用性算繪器 (HAR) 顯示 Android 無法顯示的車輛資訊。這可能是因為啟動、可用性、安全性或法規等問題。HAR 是以 Rust 編寫的可攜式內建應用程式。
HAR (又稱 HAR 架構) 包含用於建構應用程式的程式碼。以 HAR 建構的應用程式稱為「以 HAR 為基礎的應用程式」。HAR 架構包含不同平台的程式碼區段。舉例來說,在 Linux 系統上,您可以使用 tinyalsa 等程式庫來處理音效。QNX 有專屬的音訊程式庫。
平台包括硬體、作業系統、系統程式庫和其他因素。平台專屬程式碼包含稱為子系統的部分。每個子系統都會處理一項平台功能,例如音訊、EVS 攝影機或車輛資料。如要支援平台,HAR 架構必須實作所有子系統。
平台專屬子系統程式碼可能會在與 HAR 型應用程式相同的程序中執行,也可能在不同的程序中執行。如果分開處理,這段程式碼會處理程序間通訊 (IPC),協助驗證平台是否支援應用程式。複雜的 IPC 機制必須屬於平台專屬程式碼。
HAR 測試套件會針對平台實作的所有子系統執行測試。使用這套工具檢查平台是否符合 HAR 需求,並找出任何新問題。
術語
本頁面包含以下條款:
- 以 HAR 為基礎的應用程式
- 使用 HAR 架構建構的 OEM 或特定功能專用應用程式。應用程式會因應用程式狀態和其他可自訂的層面而有所不同。
- HAR 架構
- 提供用於建構應用程式的核心工具集。
- HAR 平台抽象化
- HAR 架構的一部分,提供所有目標平台都必須實作的已知 API。
- HAR 測試套件
- 針對平台實作項目進行一系列已知測試,協助驗證平台實作項目是否支援特定平台上的 HAR 架構。
不在範圍內
HAR 未解決下列問題:
所有目標平台的個別實作:目標平台的實作。本頁面說明平台實作項目必須滿足的介面,以及測試套件必須符合的條件。
測試案例:所有介面的特定測試案例。本頁面會說明介面的個別函式,包括引數、傳回值、預期行為和預期副作用。本頁面說明測試套件,您可以在其中導入及執行測試案例。
平台抽象化高階 Crate 結構
Rust 專案是由 Crate 組成。圖 1 顯示 HAR 平台抽象層的 Crate 結構。平台抽象層會影響兩個以上的 Rust Crate:
抽象化 (Rust
trait說明) 位於 HAR 架構 Crate 中。平台實作項目會使用獨立的
har-platform-xCrate。例如har-platform-linux或har-platform-android。
如未指定平台實作項目,就無法建構或測試 HAR Crate。這是刻意設計,因為 HAR 架構就是架構。
指定平台的應用程式必須使用這個架構建構,才能運作及測試。下圖說明 HAR 架構與平台之間的連結:
圖 1. HAR Crate。
display-safety 中的一般結構
這個設計會在 display_safety 存放區中新增一系列 Crate,如圖 2 所示:
圖 2. 抽象模組。
測試套件的結構與應用程式類似,但只依賴指定的平台實作 Crate。測試套件必須參照 HAR 架構中定義的特徵和結構,但不得參照更複雜的實作項目。
平台抽象層高階說明
下表說明 HAR 平台抽象層定義的平台專屬子系統。
| 抽象名稱 | 相關函式 | 說明 | 附註 |
|---|---|---|---|
OpenGL |
2D 算繪 | 為 HAR 架構 Crate 提供 OpenGLES 2.0/3.0 算繪功能。 | |
Audio |
音訊算繪 | 提供 Android SoundPool 介面,用於管理及播放系統音訊。 | |
Camera |
車輛攝影機畫面 | 提供類似 EVS HAL 的介面,可管理及顯示車輛攝影機資訊。 | |
Looper |
應用程式主迴圈和顯示設定 | 提供類似 Android Looper 的介面,用於管理平台專屬的應用程式主迴圈和顯示設定。 | |
UserInput |
觸控、鍵盤、方向盤或旋轉控制器,以及其他平台專屬輸入方式 | 提供介面,可為以 HAR 為基礎的應用程式提供觸控和鍵盤輸入功能。以 Linux evdev 為基礎的參考實作 har-user-input-evdev。 |
|
VehicleData |
車輛狀態輸入 | 提供介面,可為以 HAR 為基礎的應用程式提供任意車輛資料串流,例如 Android VHAL 或 CAN 匯流排提供的資料。 | |
ResourceManager |
應用程式專屬的快取設計文件 | 提供 HAR 啟動所需的資源 (例如快取圖片和設計文件) 記憶體內快取。目前尚未實作磁碟快取。 | |
Logging |
系統記錄和遙測 | 使用追蹤系統提供平台專屬的記錄支援。這項功能可收集平台所需的遙測資料。 | |
Tracing |
系統追蹤 | 提供抽象機制,可與追蹤和剖析系統整合。 | |
Monitoring |
系統監控 | 這個工具包可監控 HAR 架構內的效能和延遲時間。 | |
Commlib |
車輛資料 | 使用 protobuf 序列化的參考實作。
已淘汰:請使用 reference/harry-control-api 中定義的 API,並實作 harry-grpcio-server 和 harry-tonic-server (參考實作)。 |
|
TestSupport |
測試支援掛鉤 | 支援測試案例的建構和拆解、測試事件的產生,以及測試構件的建立。例如,產生模擬觸控事件來測試 UserInput,以及產生螢幕截圖以供分析。 |
Rust 會鎖定這項功能,避免納入正式版建構作業。 |
命名慣例和架構結構
下表列出這些名稱和結構:
HAR 架構提供的預期子系統
trait例項。每個trait代表必須實作的平台專屬子系統。任何平台 Crate 中平台專屬子系統實作項目的預期名稱。以 HAR 為基礎的應用程式會預期實作這些特定名稱。
相關的 HAR 架構
enum和struct執行個體通常用於將資訊從平台相關實作項目傳遞至 HAR 架構。
| 特徵名稱 | 實作名稱 | HAR 架構列舉和結構體 |
|---|---|---|
GlContextFactory |
OpenGL |
trait harry::Rendererharry::DisplayRotation |
AudioApiFactory |
Audio |
harry::AudioApiharry::AudioDeviceharry::VolumeMillibel |
ICameraManager |
Camera |
harry::ICameraDeviceharry::CameraDescriptor |
Looper |
Looper |
harry::LooperMessageharry::LooperOptionsharry::DisplayId |
PlatformVehicleData |
VehicleData |
harry::VehicleDataTypeharry::VehicleDataListener |
ResourceManager (結構) |
ResourceManager |
harry::ResourceManagerMessageharry::ResourceTokenharry::RawImageData |
PlatformTracing |
Tracing |
不適用 |
HarPerformanceMonitor |
Monitoring |
harry::Rendererharry::ResolveLatencyToken |
PlatformTestSupport |
TestSupport |
harry::TestConfigharry::TestDisplayConfig |
錯誤與錯誤處理機制
建議的 API 使用 Rust Result<> 型別。Rust 會要求您檢查攜帶錯誤的型別。Result否則,編譯器會產生警告或錯誤。建構時間檢查會強制執行平台專屬程式碼的錯誤檢查。
平台實作項目傳回的錯誤屬於 harry::error::Error 類型。如要確認平台錯誤類型不會洩漏到應用程式程式碼中,請使用 HAR 架構提供的標準錯誤類型。
harry::error::Error 型別會擴充,納入所有子系統的特定錯誤:
// 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),
}
無法復原的錯誤主要會透過定義的介面和回呼傳回。
測試套件詳細設計
本節說明測試套件的設計,該套件會驗證抽象概念的平台專屬實作項目。
建構測試套件測試
如果是 Soong 建構作業 (由 Android.bp 檔案定義),測試會編譯為 Android 平台建構系統的一部分,並由 atest 管理執行作業。
執行測試套件
如要測試個別平台:
使用 atest 指令搭配相關測試目標 (例如 atest <module_name>)。這項指令會在 Android 裝置或模擬器上部署及執行測試。