供應商屬性
為支援合作夥伴的特定需求,VHAL 允許只能透過系統 API 存取的供應商屬性。使用供應商屬性時,請遵守下列規定:
- 請務必優先使用系統屬性,如果系統屬性都無法滿足需求,再使用供應商屬性。
- 為避免生態系統分散,供應商屬性不得用於複製 SDK VehiclePropertyIds 中已有的車輛屬性。詳情請參閱 CDD 的第 2.5 節「車輛需求」。
- 使用下列欄位產生資源 ID:
VehiclePropertyGroup:VENDOR
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_1
和 vendor_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。大多數的空調屬性都與車輛的特定區域相關聯,但也有幾個是全域屬性。定義的屬性範例包括:
屬性 | 目的 |
---|---|
HVAC_TEMPERATURE_SET |
依區域 ID 設定溫度。 |
HVAC_POWER_ON |
每個區域 ID 的空調系統電源狀態。 |
如果空調屬性取決於空調系統的電源狀態,就必須列在 HVAC_POWER_ON
設定陣列中。如要查看完整的空調屬性清單,請在 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_LEFT
- 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 所示。


請使用下表所述的屬性,定義車輛的外部尺寸。
車輛資源 | 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 發布以來,車輛服務就已支援這項屬性。這項屬性定義為唯讀靜態全域整數屬性,可能值由 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
。
- 在 Android 13 以上版本中,請使用
VehiclePropertyIds.GENERAL_SAFETY_REGULATION_COMPLIANCE
做為資源 ID。 - 在 Android 12 中,請使用硬式編碼值 0x11400F47 做為屬性 ID。如要使用這項屬性,必須具備
Car#PERMISSION_CAR_INFO
權限。