資源設定

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

欄位 說明
prop

房源 ID。這必須是 VehicleProperty.aidl 中定義的系統屬性之一,或供應商屬性。系統會使用下列欄位的位元或運算來建構資源 ID (從右至左):

  • (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_CHANGECONTINUOUS 之一。STATIC 表示系統啟動後,屬性值永遠不會變更。ON_CHANGE 表示 VHAL 必須在值變更時回報。CONTINUOUS 表示屬性值會持續變更,且 VHAL 必須根據訂閱取樣率回報。
  • 如果是系統屬性,則必須與 VehicleProperty.aidl 中所述的變更模式相同。
configArray 選用陣列,可用於包含屬性專屬設定。可留空。對於某些系統屬性 (例如 GEAR_SELECTION),設定陣列具有特殊意義,因此必須指定。
configString 選用字串,用於包含屬性專屬設定。可留空。
minSampleRatemaxSampleRate 連續性資源的最小和最大支援取樣率 (以赫茲為單位)。如果屬性不是連續的,則不會使用。VHAL 實作項目必須可執行 minSampleRatemaxSampleRate。系統不一定會支援最小值和最大值之間的所有取樣率。

資源類型

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

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

對於供應商 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,則顯示此屬性是否指定最小或最大支援值或支援的值清單。
  • 這個欄位會控制是否支援下列動態支援值 API:getMinMaxSupportedValuegetSupportedValuesListssubscribeSupportedValueChangeunsubscribeSupportedValueChange,以及是否支援此房源 ID 和區域 ID。
  • 如果不是 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。Area ID 包含一或多個相應列舉的標記。舉例來說,使用 VehicleAreaSeat 的資源可能會使用下列區域 ID:

產品 說明
ROW_1_LEFT | ROW_1_RIGHT 區域 ID 適用於兩個前座。
ROW_2_LEFT 僅適用於後座左側座椅。
ROW_2_RIGHT 僅適用於後座右側座椅。

詳情請參閱「空調」一文。