車輛屬性

車輛硬件抽象層(VHAL)接口定義原始設備製造商可以實現的屬性,並包含屬性的元數據(例如,該屬性是否是一個int和變化模式被允許)。 VHAL 接口基於訪問(讀取、寫入、訂閱)屬性,該屬性是特定功能的抽象。

HAL 接口

VHAL 使用以下接口:

  • getAllPropConfigs()生成(vec<VehiclePropConfig>propConfigs)
    列出 VHAL 支持的所有屬性的配置。 CarService 僅使用受支持的屬性。
  • getPropConfigs(vec<int32_t> props)生成(StatusCode status,vec<VehiclePropConfig> propConfigs);
    返回所選屬性的配置。
  • set(VehiclePropValue propValue)生成(StatusCodestatus);
    將值寫入屬性。寫入結果按屬性定義。
  • subscribe(IVehicleCallback callback, vec<SubscribeOptions> options)生成(StatusCode status);
    開始監視屬性值更改。對於zoned屬性, unsubscribe(IVehicleCallback callback, int32_t propId)生成(StatusCode status);

VHAL 使用以下回調接口:

  • oneway onPropertyEvent(vec<VehiclePropValue>propValues);
    通知車輛屬性的值變化。應該僅對訂閱的屬性執行。
  • oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
    返回全局 VHAL 級別錯誤或每個屬性的錯誤。全局錯誤會導致 HAL 重新啟動,這可能會導致其他組件(包括應用程序)重新啟動。

車輛屬性

屬性可以是只讀、只寫(用於將信息傳遞到 VHAL 級別)或讀寫(對大多數屬性的支持是可選的)。每個屬性唯一地由一個Int32鍵標識和具有預定義的類型( value_type ):

  • BYTES
  • BOOLEAN
  • EPOCH_TIME
  • FLOAT
  • FLOAT[]
  • INT32
  • INT32[]
  • INT64
  • INT64[]
  • STRING
  • MIXED

一個分區屬性可能有多個值,具體取決於該屬性支持的區域數量。

區域類型

VHAL 定義了多種區域類型:

區域類型描述
GLOBAL此屬性是單例,沒有多個區域。
WINDOW基於windows區,使用VehicleAreaWindow枚舉。
MIRROR基於鏡子區,使用VehicleAreaMirror枚舉。
SEAT根據座椅區,使用VehicleAreaSeat枚舉。
DOOR基於門區,使用VehicleAreaDoor枚舉。
WHEEL基於車輪區,使用VehicleAreaWheel枚舉。

每個分區屬性必須使用預定義的區域類型。每個區域類型都有一組在該區域類型的枚舉中定義的位標誌。例如, SEAT區域限定VehicleAreaSeat枚舉:

  • ROW_1_LEFT = 0x0001
  • ROW_1_CENTER = 0x0002
  • ROW_1_RIGHT = 0x0004
  • ROW_2_LEFT = 0x0010
  • ROW_2_CENTER = 0x0020
  • ROW_2_RIGHT = 0x0040
  • ROW_3_LEFT = 0x0100
  • ...

區域 ID

分區屬性通過區域 ID 尋址。每個分區屬性可以支持一個或多個區域 ID。區域 ID 由來自其各自枚舉的一個或多個標誌組成。例如,使用屬性VehicleAreaSeat可能會使用以下區域ID:

物品描述
ROW_1_LEFT | ROW_1_RIGHT區域 ID 適用於兩個前排座椅。
ROW_2_LEFT僅適用於後左座椅。
ROW_2_RIGHT僅適用於右後座椅。

物業狀況

每個屬性值帶有一個VehiclePropertyStatus值。這表示該屬性的當前狀態:

物品描述
AVAILABLE屬性可用且值有效。
UNAVAILABLE屬性值當前不可用。用於支持屬性的暫時禁用功能。
ERROR此屬性有問題。

配置屬性

使用VehiclePropConfig提供每個屬性的配置信息。信息包括:

多變的描述
access r wrw
changeMode表示如何監視屬性,更改與連續。
areaConfigs areaIdmin ,和max的值。
configArray附加配置參數。
configString作為字符串傳遞的附加信息。
minSampleRate maxSampleRate
prop屬性 ID,整數

處理區域屬性

分區屬性相當於多個屬性的集合,其中可以使用指定的區域 ID 值訪問每個子屬性。

  • get呼籲分區的屬性總是包含請求的區域ID。因此,僅返回請求的區域 ID 的當前值。如果屬性是全局的,則區域 ID 為 0。
  • set呼叫對劃屬性總是包括在請求中的區域ID。因此,僅更改請求的區域 ID。
  • subscribe調用生成事件的所有區域ID的屬性。

接聽電話

在初始化期間,由於尚未收到匹配的車輛網絡消息,因此該屬性的值可能尚不可用。在這種情況下, get調用應該返回-EAGAIN 。某些屬性(例如 HVAC)具有單獨的開/關電源屬性。調用get的(關機時),這樣的屬性應該返回UNAVAILABLE狀態,而不是返回一個錯誤。例如,獲取 HVAC 溫度

VHAL 獲取 HVAC 示例

圖1。獲取 HVAC 溫度(CS = CarService,VHAL = Vehicle HAL)

設置通話

set通話涉及的事件通知請求更改後的異步操作。在一個典型的操作,一set呼叫導致進行跨車載網絡變更請求。一些set通話可能需要初始數據準備就緒,但在初始化過程中,這樣的數據可能無法使用呢。在這種情況下, set呼應該返回-EAGAIN 。開/關獨立的電源有些屬性應該返回-ESHUTDOWN當屬性斷電並設置無法做到的。直到set變為有效, get不一定返回相同的數值設置的內容。例如, set HVAC Temperature

VHAL 設置暖通空調示例

圖2。設置 HVAC 溫度(CS = CarService,VHAL = Vehicle HAL)

處理自定義屬性

為了支持特定於合作夥伴的需求,VHAL 允許僅限於系統應用程序的自定義屬性。使用自定義屬性時,請遵循以下準則:

  • 應使用以下字段生成屬性 ID:
    • VehiclePropertyGroup:VENDOR
      VENDOR組僅用於自定義屬性。
    • VehicleArea
      選擇合適的區域類型。
    • VehiclePropertyType
      選擇正確的數據類型。 BYTES類型允許其在大多數情況下,足夠的原始數據的傳遞。通過自定義屬性頻繁發送大數據會減慢整個車輛網絡的訪問速度 - 添加大負載時要小心。
    • Property ID
      為自定義屬性選擇一個四位字節 ID。
  • 為防止生態系統的碎片化,自定義屬性不能用於已在(存在重複車輛性能VehiclePropertyIds SDK)。
  • 填寫VehiclePropConfig.configString與自定義屬性的簡短說明。這允許健全性檢查工具標記現有車輛屬性的意外複製。例如,“危險燈狀態”。
  • 通過訪問CarPropertyManager (用於Java組件),或者通過車載網絡服務API(本機)。不要修改其他汽車 API,因為這樣做可能會導致未來的兼容性問題。
  • 實施供應商屬性後,選擇在權限列表VehicleVendorPermission枚舉為供應商屬性。將供應商權限映射到系統屬性會破壞 CTS 和 VTS。

處理 HVAC 屬性

您可以使用 VHAL 通過設置 HVAC 相關屬性來控制 HVAC。大多數 HVAC 屬性是分區屬性,儘管有一些是非分區(全局)屬性。示例定義的屬性包括:

財產目的
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET設置每個區域的溫度。
VEHICLE_PROPERTY_HVAC_RECIRC_ON控制每個區域的再循環。

要查看HVAC特性的完整列表,搜索VEHICLE_PROPERTY_HVAC_*types.hal 。當HVAC屬性使用VehicleAreaSeat ,對分區的HVAC屬性映射到區域ID特殊的規則。汽車中的每個可用座位都必須是區域 ID 數組中區域 ID 的一部分。

例一。汽車有兩個前座( ROW_1_LEFT, ROW_1_RIGHT )和三個後排座椅( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT )。汽車有兩個溫度控制單元:駕駛員側和乘客側。

  • 對設置的區域ID的有效映射HVAC_TEMPERATURE SET是:
    • ROW_1_LEFT | ROW_2_LEFT
    • ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
  • 相同硬件配置的替代映射是:
    • ROW_1_LEFT | ROW_2_LEFT | ROW_2_CENTER
    • ROW_1_RIGHT | ROW_2_RIGHT

例二。甲車具有與所述前排兩個座位(3排座位ROW_1_LEFT, ROW_1_RIGHT ),在第二個(三個座位ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT ),以及在第三行的三( ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT )。該車具有三個溫度控制單元:駕駛員側、乘客側和後部。映射一個合理的方式HVAC_TEMPERATURE_SET至區域ID是作為三元件陣列:

  • ROW_1_LEFT
  • ROW_1_RIGHT
  • ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT

處理傳感器屬性

VHAL 傳感器屬性代表真實的傳感器數據或政策信息,例如駕駛狀態。任何應用程序都可以不受限制地訪問某些傳感器信息(例如駕駛狀態和日/夜模式),因為這些數據是構建安全車輛應用程序所必需的。其他傳感器信息(例如車速)更為敏感,需要用戶可以管理的特定權限。

看到所支持的傳感器的屬性(在types.hal )。

車輛地圖服務

車輛地圖服務(VMS)通過pub / sub接口提供了一種機制,以客戶端之間交換的地圖數據,支持普通車輛的功能,如高級駕駛員輔助系統(ADAS) 。客戶端可以包括通過 VHAL 或特權 Android 應用程序中的 VMS 屬性連接的車輛系統。在 VMS 上共享的數據旨在僅限於供車輛系統和支持應用程序使用的地圖數據。

VMS 僅用於 Android Automotive 實現; AOSP 不包含發布或訂閱 VMS 的默認客戶端。對於在VHAL VMS的屬性,該消息類型和數據結構在VHAL 2.0中所描述的VmsMessageType枚舉,其列出了類型支持VMS消息。此枚舉用作車輛屬性整數數組中的第一個整數,並確定如何解碼消息的其餘部分。