特殊房地產

供應商屬性

為支援合作夥伴的特定需求,VHAL 允許供應商屬性只能透過系統 API 存取。使用供應商屬性時,請遵循下列規範:

  • 請一律優先使用系統屬性,如果沒有任何系統屬性可滿足您的需求,則應使用供應商屬性做為最後的手段。
  • 為避免生態系統分散,供應商屬性不得用於複製 SDK VehiclePropertyIds 中已存在的車輛屬性。詳情請參閱 CDD 中的第 2.5 節,汽車相關規定
  • 使用下列欄位產生資源 ID:
    • VehiclePropertyGroup:VENDOR 供應商群組僅適用於供應商屬性。
    • VehicleArea 選取適當的區域類型。
    • VehiclePropertyType 選取適當的資料類型。BYTES 類型可傳遞原始資料,在大多數情況下都足以應付。經常透過供應商屬性傳送大量資料,可能會導致整個車輛網路存取速度變慢。新增大型酬載時請小心。
    • Property ID 為供應商屬性選擇不重複的雙位元組 ID。例如 0x1234。
  • 填入 VehiclePropConfig.configString,並簡短說明供應商資源。這樣一來,有效性檢查工具就能標示意外複製現有車輛屬性。例如「XYZ 的自訂屬性」。
  • 透過 CarPropertyManager (適用於 Java 元件) 或 libvhalclient (適用於原生) 存取。請勿修改其他車輛 API,否則可能會導致日後的相容性問題。

供應商資源權限

所有已定義的供應商資源預設權限為 android.car.Car.PERMISSION_VENDOR_EXTENSION。如要精細控管權限,請支援 SUPPORT_CUSTOMIZE_VENDOR_PERMISSION 屬性。這個 STATIC 屬性為唯讀,其設定陣列會指定供應商屬性的權限。configArray 的設定如下 (i 是從 0 開始的整數):

  • configArray[3 * i] propId,供應商資源的資源 ID。
  • configArray[3 * i + 1] VehicleVendorPermission.aidl 中的列舉,用於表示讀取屬性值的權限。
  • configArray[3 * i + 2] VehicleVendorPermission.aidl 中的列舉,用於表示寫入屬性值的權限。

舉例來說,下列設定陣列會設定兩個供應商屬性 (vendor_prop_1vendor_prop_2),讓這些屬性擁有權限:

  • vendor_prop_1 需要 android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_SEAT 才能讀取,需要 android.car.hardware.property.VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_SEAT 才能寫入。
  • vendor_prop-2 需要 android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_INFO 才能讀取,且無法供 Android 應用程式寫入。
configArray = {
  PERMISSION_SET_VENDOR_CATEGORY_SEAT
    vendor_prop_2, PERMISSION_GET_VENDOR_CATEGORY_INFO, PERMISSION_NOT_ACCESSIBLE
}

不在這個陣列中的供應商資源會採用預設的供應商權限。選取 PERMISSION_NOT_ACCESSIBLE 時,Android 應用程式無法存取該屬性。在這個範例中,Android 應用程式無法寫入 vendor_prop_2 的值。只有原生 VHAL 用戶端可以寫入這項屬性。

進階駕駛輔助系統 (ADAS)

請參閱 ADAS 車輛屬性

SEAT 和 STEERING

請參閱「座椅和方向盤屬性」。

空調

你可透過設定空調相關的屬性,使用 VHAL 控制空調。大多數的 HVAC 屬性都與車輛的特定區域相關,但其中有幾個是全域屬性。定義的屬性範例包括:

資源 目的
HVAC_TEMPERATURE_SET 依區域 ID 設定溫度。
HVAC_POWER_ON 每個區域 ID 的空調系統電源狀態。

對於依空調系統電源狀態而定的空調屬性,必須列在 HVAC_POWER_ON 設定陣列中。如要查看完整的 HVAC 屬性清單,請在 VehicleProperty.aidl 中搜尋 HVAC_*,請參閱「支援的系統屬性」。屬性。

將非 GLOBAL VehicleArea 類型 HVAC 屬性對應至 AreaID 的規則: 每個受屬性影響的特定 VehicleArea 類型「區域」都必須納入該屬性的區域 ID。溫度控制器會指派給「最具影響力」的座位,但每個受影響的座位都必須精確列入一次。將中央後座指派給左側或右側的 AreaID 可能看起來很隨意,但在每個 AreaID 中加入所有受影響的座位,可確保車內所有座位都會顯示,且有合理的方式可影響每個座位。

示例 1

車輛有兩個前座 (ROW_1_LEFT、ROW_1_RIGHT) 和三個後座 (ROW_2_LEFT、ROW_2_CENTER、ROW_2_RIGHT)。有兩個溫度控制單元,分別位於駕駛側和乘客側。HVAC_TEMPERATURE_SET 的有效 AreaID 對應組合是兩個元素的陣列:

  • ROW_1_LEFT | ROW_2_LEFT
  • ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT

同一硬體設定的替代對應如下:

  • ROW_1_LEFT | ROW_2_CENTER | ROW_2_LEFT
  • ROW_1_RIGHT | ROW_2_RIGHT

示例 2

車輛有三排座位,前排有兩個座位 (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 對應至 AreaID 的合理方式是使用三個元素陣列:

  • 剩餘 ROW_1_
  • ROW_1_RIGHT
  • ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT

示例 3

車輛有兩個前座 (ROW_1_LEFT、ROW_1_RIGHT) 和三個後座 (ROW_2_LEFT、ROW_2_CENTER、ROW_2_RIGHT)。假設車輛只支援 HVAC_AUTO_ON 的兩個前座。HVAC_AUTO_ON 的有效 AreaID 組合會是單一元素陣列:

  • ROW_1_LEFT | ROW_1_RIGHT

如果 HVAC_AUTO_ON 有兩個分別用於駕駛員和乘客側的控制單元,則另一個對應項目會是兩個元素陣列:

  • ROW_1_LEFT
  • ROW_1_RIGHT

INFO_EXTERIOR_DIMENSIONS

車輛的外部尺寸以毫米為單位,如圖 1 所示。

圖 1. 車輛外觀尺寸,正面圖。
圖 2. 車輛外部尺寸 (側面)。

請使用這份表格中所述的屬性,定義車輛的外部尺寸。

車輛屬性 VHAL 欄位 說明
身高 int32Values[0] 地面與車輛最高點之間的垂直距離。這會假定通常加載的工廠輪子。
長度 int32Values[1] 車輛前後端最外側點之間的水平距離。
寬度,不含鏡子 int32Values[2] 車輛兩側兩個最外點之間的水平距離,但側邊鏡像除外。
寬度 (含後照鏡) int32Values[3] 車輛兩側最外側點 (包括後照鏡) 之間的水平距離。
車輪底座 int32Values[4] 車輛前後輪中心的距離。
音軌寬度 (前方) int32Values[5] 前輪之間的距離,從一條輪胎胎紋的中心線到另一條輪胎胎紋的中心線所測量。
後置車道寬度 int32Values[6] 後輪的距離,從一條輪胎的中心線測量到對面輪胎的中心線。
路邊到路邊轉彎直徑 int32Values[7] 當車輛以完全鎖定的方向盤轉動一圈時,車輛外側輪所劃出的圓圈直徑。

遵循歐盟一般安全法規

如果車輛必須透過 Android 遵守歐盟《通用安全法規》(GSR) 規定,就必須支援 GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT 屬性。使用案例範例是歐盟法規 2019/2144 中定義的 GSR-ISA (智慧型速限輔助)。這項屬性是在 Android 13 的 AIDL VHAL 中新增,但自 Android 12 發布以來,Car Service 就已支援這項屬性。這項屬性會定義為唯讀靜態全域整數屬性,含 GsrComplianceRequirementType 列舉定義的可能值:

名稱 說明
GSR_COMPLIANCE_NOT_REQUIRED 0 不必遵循 GSR 規定
GSR_COMPLIANCE_REQUIRED_V1 1 必須符合 GSR 法規,且需求解決方案版本為 1。

如要在 HIDL VHAL (Android 12 中) 中支援此屬性,供應商必須將屬性 ID 硬式編碼。舉例來說,下列程式碼片段說明如何在參考 HIDL VHAL DefaultConfig.h 中支援此功能:

{
  .config =
      {
          // GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT
          .prop = 0x11400F47,
          .access = VehiclePropertyAccess::READ,
          .changeMode = VehiclePropertyChangeMode::STATIC,
      },
  // GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1
  .initialValue = {.int32Values = {1}},
}

如要在 AIDL VHAL (Android 13 以上版本) 中支援此屬性,供應商可以使用 VehicleProperty.h 中的屬性 ID,以及 GsrComplianceRequirementType.h 中的列舉。例如,在參考 AIDL VHAL DefaultProperties.json 中:

{
  "property": "VehicleProperty::GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT",
  "defaultValue": {
    "int32Values": [
      "GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1"
    ]
  }
}

如要在 Android 應用程式中讀取這項屬性,請使用 CarPropertyManager.getIntProperty