參照實作

我們為 AIDL VHAL 提供參考實作項目。主要服務執行緒會在 VehicleService.cpp 中實作。VHAL 介面實作位於 DefaultVehicleHal.cpp

參考實作以雙層架構為基礎。在上層 (DefaultVehicleHal) 中,系統會實作 VHAL AIDL 介面,並為所有硬體裝置提供通用的 VHAL 邏輯。在較低層級,FakeVehicleHardware 會實作 IVehicleHardware 介面。這個類別會模擬與實際硬體或車輛匯流排互動的 VHAL 邏輯,並且依裝置而異。供應商可以選擇採用相同的架構、重複使用相同的 DefaultVehicleHal 類別 (擴充該類別以覆寫方法),並提供自己的 IVehicleHardware 實作。

VHAL 參考實作
圖 1. VHAL 參考實作

DefaultVehicleHal 包含下列邏輯,這些邏輯並無一般性,可套用至任何 VHAL 實作。

  • 實作 IVehicle 介面。
  • 執行基本輸入檢查,包括檢查重複的 ID。
  • 為每個繫結器用戶端的每個作業分配用戶端物件 (例如 GetValuesClient),並將每個用戶端物件新增至全域集區。
  • 管理非同步回呼邏輯,例如將待處理要求新增至待處理要求集區。在收到結果時解決待處理要求,或在其中一個待處理要求逾時時傳回錯誤。
  • 序列化和反序列化 LargeParcelable (請參閱 ParcelableUtils.h)。
  • 管理訂閱項目 (請參閱SubscriptionManager.h)。
  • 檢查權限。(請參閱 checkReadPermissioncheckWritePermission 函式)。
  • 定期呼叫 IVehicleHardware.checkHealth 並傳送活動訊號信號 (請參閱 checkHealth 函式)。

IVehicleHardware 是用來表示 VHAL 硬體專屬實作的通用介面。IVehicleHardware 的參考實作項目是 FakeVehicleHardware,它會使用記憶體內地圖儲存屬性值,且不會與實際車輛匯流排通訊。這類測試程式旨在模擬器上執行,且沒有硬體專屬的依附元件。供應商實作項目不得照原樣使用,必須加入車輛匯流特定的邏輯。

在 Android 14 中,FakeVehicleHardware 會在初始化期間從裝置的 /vendor/etc/automotive/vhalconfig/ 資料夾讀取支援的屬性設定,該資料夾包含 JSON 樣式的設定檔。如要瞭解設定檔格式和設定檔內容,請參閱 參考 VHAL README 檔案

FakeVehicleHardware 也支援設定檔覆寫功能,可用於測試。如果設定系統屬性 persist.vendor.vhal_init_value_override,系統會使用裝置上 /vendor/etc/automotive/vhaloverride/ 資料夾中的設定檔覆寫現有設定。供應商實作項目可以採用類似做法,讓 VHAL 支援的屬性設定不會硬式編碼,並可在啟動時動態決定。裝置啟動後,車輛屬性設定必須設為靜態。