資源設定

每個支援的屬性都是由透過 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
  • 資源的存取模式。必須是 READWRITEREAD_WRITE
  • 如果是系統屬性,這必須是 VehicleProperty.aidl 中記錄的其中一種已定義存取模式。
  • 如果屬性具有每個區域的存取權,這就是每個區域存取權的最大子集。舉例來說,如果屬性有兩個區域,存取權分別為 READREAD_WRITE,則應將此屬性設為 READ
changeMode
  • 變更屬性的模式。必須是 STATICON_CHANGECONTINUOUSSTATIC 表示系統啟動後,屬性值不會再變更。ON_CHANGE 表示 VHAL 必須在值變更時回報。CONTINUOUS 表示屬性值會持續變更,且 VHAL 必須根據訂閱取樣率回報。
  • 如果是系統屬性,這個值必須等於 VehicleProperty.aidl 中記錄的變更模式。
configArray 選用陣列,可包含特定屬性的設定。可以留空。對於某些系統屬性 (例如 GEAR_SELECTION),設定陣列具有特殊意義,且必須指定。
configString (選用) 包含資源專屬設定的字串。可以留空。
minSampleRatemaxSampleRate 連續屬性支援的最小和最大取樣率 (以赫茲為單位)。如果房源並非連續出租,則不適用。VHAL 實作項目必須能夠達成 minSampleRatemaxSampleRate。不一定要支援介於最小值和最大值之間的所有取樣率。

物業類型

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

資源類型 說明
STRING 0x00100000 字串屬性,使用「車輛屬性值」中的 stringValue 欄位。
BOOLEAN 0x00200000 屬性,並使用「車輛屬性值」中「int32Values」欄位的第一個元素。Boolean0 代表 falseNone 0 代表 true
INT32 0x00400000 屬性,並使用「車輛屬性值」中「int32Values」欄位的第一個元素。Integer
INT32_VEC 0x00410000 Integer[] 屬性,並使用「車輛屬性值」中的 int32Values 欄位元素。
INT64 0x00500000 長屬性,使用「車輛屬性值」int64Values 欄位的第一個元素。
INT64_VEC 0x00510000 Long[] 屬性,並使用「車輛屬性值」中的 int64Values 欄位元素。
FLOAT 0x00600000 屬性,並使用「車輛屬性值」中「floatValues」欄位的第一個元素。Float
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」一文。
minInt32ValuemaxInt32Value
  • 開機時 INT32 型別屬性的選填最小值和最大值。其他所有類型必須為 0 。如果兩者皆為 0,則會遭到忽略。
  • 如果是全域屬性,如需定義最小值和最大值,請使用區域 ID 為 0 的區域設定。
  • 這個值是靜態的,即使最小值或最大值在執行階段有所變更,這個值也不會變動。導入 IVehicle#getMinMaxSupportedValue,設定動態最小值或最大值。
minInt64ValuemaxInt64Value
  • 開機時 INT64 型別屬性的選用最小值和最大值。其他所有類型必須為 0 。如果兩者皆為 0,則會遭到忽略。
  • 如果是全域屬性,如需定義最小值和最大值,請使用區域 ID 為 0 的區域設定。
  • 這個值是靜態的,即使最小值或最大值在執行階段有所變更,這個值也不會變動。導入 IVehicle#getMinMaxSupportedValue,設定動態最小值或最大值。
minFloatValuemaxFloatValue
  • 啟動時,浮點數型別屬性的選用最小值和最大值。其他所有類型必須為 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: getMinMaxSupportedValuegetSupportedValuesListssubscribeSupportedValueChangeunsubscribeSupportedValueChange
  • 如果不是 null,VHAL 必須為這個資源 ID 和區域 ID 實作這些 API。
  • 如果 null 或 Android 15 以下版本不支援這項屬性 ID 和區域 ID 的動態支援值,用戶端必須使用車輛屬性設定中提供的靜態支援值資訊。

區域類型

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

區域類型 說明
全球 0x01000000 這項資源是全域資源,沒有多個區域。
WINDOW 0x03000000 以視窗為準的區域,使用 VehicleAreaWindow 列舉。
《Mirror》 0x04000000 根據鏡像的區域,使用 VehicleAreaMirror 列舉。
SEAT 0x05000000 根據座位區分的區域,使用 VehicleAreaSeat 列舉。
車門 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」。