HAR 平台抽象層

使用高可用性算繪器 (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-x Crate。例如 har-platform-linuxhar-platform-android

如未指定平台實作項目,就無法建構或測試 HAR Crate。這是刻意設計,因為 HAR 架構就是架構。

指定平台的應用程式必須使用這個架構建構,才能運作及測試。下圖說明 HAR 架構與平台之間的連結:

HAR Crate

圖 1. HAR Crate。

display-safety 中的一般結構

這個設計會在 display_safety 存放區中新增一系列 Crate,如圖 2 所示:

HAR Crate、架構和應用程式

圖 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 VHALCAN 匯流排提供的資料。
ResourceManager 應用程式專屬的快取設計文件 提供 HAR 啟動所需的資源 (例如快取圖片和設計文件) 記憶體內快取。目前尚未實作磁碟快取。
Logging 系統記錄和遙測 使用追蹤系統提供平台專屬的記錄支援。這項功能可收集平台所需的遙測資料。
Tracing 系統追蹤 提供抽象機制,可與追蹤和剖析系統整合。
Monitoring 系統監控 這個工具包可監控 HAR 架構內的效能和延遲時間。
Commlib 車輛資料 使用 protobuf 序列化的參考實作。 已淘汰:請使用 reference/harry-control-api 中定義的 API,並實作 harry-grpcio-serverharry-tonic-server (參考實作)。
TestSupport 測試支援掛鉤 支援測試案例的建構和拆解、測試事件的產生,以及測試構件的建立。例如,產生模擬觸控事件來測試 UserInput,以及產生螢幕截圖以供分析。 Rust 會鎖定這項功能,避免納入正式版建構作業。

命名慣例和架構結構

下表列出這些名稱和結構:

  • HAR 架構提供的預期子系統 trait 例項。每個 trait 代表必須實作的平台專屬子系統。

  • 任何平台 Crate 中平台專屬子系統實作項目的預期名稱。以 HAR 為基礎的應用程式會預期實作這些特定名稱。

  • 相關的 HAR 架構 enumstruct 執行個體通常用於將資訊從平台相關實作項目傳遞至 HAR 架構。

特徵名稱 實作名稱 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 (結構) ResourceManager harry::ResourceManagerMessage
harry::ResourceToken
harry::RawImageData
PlatformTracing Tracing 不適用
HarPerformanceMonitor Monitoring harry::Renderer
harry::ResolveLatencyToken
PlatformTestSupport TestSupport harry::TestConfig
harry::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 裝置或模擬器上部署及執行測試。