我們為 AIDL VHAL 提供參考實作項目。主要服務執行緒會在 VehicleService.cpp
中實作。VHAL 介面實作位於 DefaultVehicleHal.cpp
。
參考實作以雙層架構為基礎。在上層 (DefaultVehicleHal
) 中,系統會實作 VHAL AIDL 介面,並為所有硬體裝置提供通用的 VHAL 邏輯。在較低層級,FakeVehicleHardware
會實作 IVehicleHardware
介面。這個類別會模擬與實際硬體或車輛匯流排互動的 VHAL 邏輯,並且依裝置而異。供應商可以選擇採用相同的架構、重複使用相同的 DefaultVehicleHal
類別 (擴充該類別以覆寫方法),並提供自己的 IVehicleHardware
實作。
DefaultVehicleHal
包含下列邏輯,這些邏輯並無一般性,可套用至任何 VHAL 實作。
- 實作
IVehicle
介面。 - 執行基本輸入檢查,包括檢查重複的 ID。
- 為每個繫結器用戶端的每個作業分配用戶端物件 (例如
GetValuesClient
),並將每個用戶端物件新增至全域集區。 - 管理非同步回呼邏輯,例如將待處理要求新增至待處理要求集區。在收到結果時解決待處理要求,或在其中一個待處理要求逾時時傳回錯誤。
- 序列化和反序列化
LargeParcelable
(請參閱ParcelableUtils.h
)。 - 管理訂閱項目 (請參閱
SubscriptionManager.h
)。 - 檢查權限。(請參閱
checkReadPermission
和checkWritePermission
函式)。 - 定期呼叫 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 支援的屬性設定不會硬式編碼,並可在啟動時動態決定。裝置啟動後,車輛屬性設定必須設為靜態。