VHAL 屬性設定

每個支援的屬性都是由透過 VehiclePropConfig 結構定義的屬性設定指定,並具有下列欄位。

欄位 說明
prop

這是物業 ID,這必須是 VehicleProperty.aidl 中定義的其中一個系統屬性,或是供應商屬性。資源 ID 是透過下列欄位的位元 OR 運算建構而成 (從右到左):

  • (0x00000000) 16 位元:範圍介於 0x0100 至 0xffff 的專屬 ID。
  • (0x00000000) 8 位元:屬性類型,用於定義屬性的類型。
  • (0x00000000) 4 位元:區域類型。
  • (0x00000000) 4 位元:VehiclePropertyGroup 這是 SYSTEM (0x10000000) 或 VENDOR (0x20000000)。如要瞭解可自訂的屬性,請參閱「供應商屬性」。

例如:
INFO_VIN (0x11100100) = UniqueID (0x00000100) | VehiclePropertyType.STRING (0x00100000) | VehicleArea.GLOBAL (0x01000000) | VehiclePropertyGroup.SYSTEM (0x10000000)

access
  • 資源的存取模式。必須是 READ、WRITE 或 READ_WRITE。
  • 如果是系統屬性,則必須是 VehicleProperty.aidl 中定義的存取模式。
  • 如果屬性具有區域存取權,這是區域存取權的最大子集。舉例來說,如果屬性有兩個區域,存取權分別為 READ 和 READ_WRITE,則應設為 READ。
changeMode
  • 變更屬性的模式。必須是 STATIC、ON_CHANGE 或 CONTINUOUS。STATIC 表示系統啟動後,屬性值不會再變更。ON_CHANGE 表示 VHAL 必須在值變更時回報。CONTINUOUS 表示屬性值會持續變更,且 VHAL 必須根據訂閱取樣率回報。
  • 如果是系統屬性,這必須等於 VehicleProperty.aidl 中記錄的變更模式。
configArray 選用陣列,可包含屬性專屬設定。可以留空。對於特定系統屬性 (例如 GEAR_SELECTION),設定陣列具有特殊意義,且必須指定。
configString (選用) 包含資源專屬設定的字串。可為空白。
minSampleRate和maxSampleRate 連續屬性支援的最低和最高取樣率 (以赫茲為單位)。如果房源並非連續出租,則不適用。VHAL 實作項目必須能夠達成 minSampleRate 和 maxSampleRate。不必支援介於最小值和最大值之間的所有取樣率。

屬性類型

在 VehiclePropertyType.aidl 中定義為列舉。下表列出支援的屬性類型。

房源類型 值 說明
STRING 0x00100000 字串屬性,使用「車輛屬性值」中的 stringValue 欄位。
BOOLEAN 0x00200000 屬性,並使用「車輛屬性值」中「int32Values」欄位的第一個元素。Boolean0 代表 false,None 0 代表 true。
INT32 0x00400000 Integer 屬性,並使用「車輛屬性值」中的 int32Values 欄位的第一個元素。
INT32_VEC 0x00410000 Integer[] 屬性,使用「車輛屬性值」中的 int32Values 欄位元素。
INT64 0x00500000 長屬性,使用「車輛屬性值」中 int64Values 欄位的第一個元素。
INT64_VEC 0x00510000 Long[] 屬性,並使用「車輛屬性值」中的 int64Values 欄位元素。
FLOAT 0x00600000 Float 屬性,並使用「車輛屬性值」中的 floatValues 欄位的第一個元素。
FLOAT_VEC 0x00610000 Float[] 屬性,並使用「車輛屬性值」中的 floatValues 欄位元素。
BYTES 0x00700000 byte[] 屬性,並使用「車輛屬性值」中的 byteValues 欄位元素。
MIXED 0x00e00000 混合類型屬性。純量或向量類型的任意組合。確切格式必須在屬性設定的設定陣列中提供。

如果是供應商 MIXED 類型屬性,configArray 的格式必須符合以下結構:

  • configArray[0],1 表示屬性具有 String 值
  • configArray[1],1 表示屬性具有 Boolean 值
  • configArray[2],1 表示屬性有 Integer 值
  • configArray[3],這個數字表示屬性中 Integer[] 的大小
  • configArray[4],1 表示屬性具有 Long 值
  • configArray[5],這個數字表示屬性中 Long[] 的大小
  • configArray[6],1 表示屬性具有 Float 值
  • configArray[7],這個數字表示屬性中 Float[] 的大小
  • configArray[8],這個數字表示屬性中 byte[] 的大小。

舉例來說,configArray = {1, 1, 1, 3, 0, 0, 0, 0, 0} 表示屬性具有 String 值、Boolean 值、Integer 值,以及包含三個整數的陣列。

設定區域 ID

每個屬性設定也可能包含區域 ID 設定清單。如果是全球資源,這份清單為選填;如果是分區資源 (支援多個區域的資源),則為必填。每個區域 ID 設定都有下列欄位。

欄位 說明
areaId 這個區域的 ID。請參閱「區域 ID」。
minInt32Value和maxInt32Value
  • 開機時 INT32 型別屬性的選填最小值和最大值。其他所有類型必須為 0 。如果兩者皆為 0,則會遭到忽略。
  • 如果是全域屬性,如需定義最小值和最大值,請使用區域 ID 為 0 的區域設定。
  • 這個值是靜態的,即使最小值或最大值在執行階段有所變更,也不會隨之變動。導入 IVehicle#getMinMaxSupportedValue,設定動態最小值或最大值。
minInt64Value和maxInt64Value
  • 開機時 INT64 型別屬性的選用最小值和最大值。其他所有類型必須為 0 。如果兩者皆為 0,則會遭到忽略。
  • 如果是全域屬性,如需定義最小值和最大值,請使用區域 ID 為 0 的區域設定。
  • 這個值是靜態的,即使最小值或最大值在執行階段有所變更,也不會隨之變動。導入 IVehicle#getMinMaxSupportedValue,設定動態最小值或最大值。
minFloatValue和maxFloatValue
  • 開機時,浮點數型別屬性的選用最小值和最大值。其他所有類型必須為 0 。如果兩者皆為 0.0,則會遭到忽略。
  • 如果是全域屬性,如需定義最小值和最大值,請使用區域 ID 為 0 的區域設定。
  • 這個值是靜態的,即使最小值或最大值在執行階段有所變更,也不會隨之變動。導入 IVehicle#getMinMaxSupportedValue,設定動態最小值或最大值。
(Android 14 新功能)
supportedEnumValues
  • 如果屬性定義為列舉類型屬性,則為啟動時支援的值清單 (選用)。如未指定 (空白) 或在 Android 14 之前,系統會假設支援所有列舉值。
  • 如果是全域屬性,如要定義支援的列舉值,必須使用區域 ID 為 0 的區域設定。
  • 這個值是靜態值,即使執行階段支援的值有所變更,這個值也不會變動。導入 IVehicle#getSupportedValuesLists,以取得動態支援的值。
  • 這僅適用於列舉類型屬性。如果是其他類型,這個欄位必須留空。 如要公開其他非列舉型別的支援值,請使用 IVehicle#getSupportedValuesLists。
(Android 15 新功能)
supportVariableUpdateRate
  • 是否支援變數更新率。這項功能僅適用於連續型資源。
  • 如為 true,應用程式可以為訂閱項目啟用變數更新率,只在屬性值變更時接收屬性更新事件 (將連續屬性視為變更屬性)。
  • 如果屬性的所有訂閱者都啟用變數更新率,則對 VHAL 的訂閱要求會為該屬性啟用變數更新率,且 VHAL 必須只在屬性值變更時傳送屬性更新事件。
  • 如有任何訂閱者要求固定更新率,對 VHAL 的訂閱要求會停用屬性的變數更新率,且 AAOS 會為要求變數更新率的用戶端篩除重複事件。
  • 強烈建議支援所有非心跳連續屬性的變數更新率,以提升效能,除非屬性資料量很大 (例如大小為 1k 的位元組陣列),且可能會佔用大量記憶體來快取。
(Android 16 的新功能)
hasSupportedValueInfo
  • 如果不是 null,則會顯示這個屬性是否指定支援的最小值或最大值,或是支援的值清單。
  • 這個欄位會控管這個資源 ID 和區域 ID 是否支援動態支援值 API: getMinMaxSupportedValue、getSupportedValuesLists、 subscribeSupportedValueChange、unsubscribeSupportedValueChange
  • 如果不是 null,VHAL 必須為這個資源 ID 和區域 ID 實作這些 API。
  • 如果 null 或 Android 15 以下版本不支援這項屬性 ID 和區域 ID 的動態支援值,用戶端必須使用車輛屬性設定中提供的靜態支援值資訊。

區域類型

在 VehicleArea.aidl 中定義為列舉。支援的區域類型如下:

區域類型 值 說明
全球 0x01000000 這項資源是全球資源,沒有多個區域。
WINDOW 0x03000000 以視窗為準的區域,使用 VehicleAreaWindow 列舉。
《Mirror》 0x04000000 根據鏡像的區域,使用 VehicleAreaMirror 列舉。
SEAT 0x05000000 根據座位區劃分的區域,使用 VehicleAreaSeat 列舉。
DOOR 0x06000000 根據門的區域,使用 VehicleAreaDoor 列舉。
WHEEL 0x07000000 根據輪子計算面積,使用 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 僅適用於右後座。

詳情請參閱「HVAC」。