參考實現

我們提供了 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 支援的屬性配置不是硬編碼的,並且可以在啟動時動態決定。設備啟動後,車輛屬性配置必須是靜態的。