供應商屬性
為了支援合作夥伴特定的需求,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 車輛屬性。座椅和轉向系統
請參閱座椅和方向盤屬性。
暖通空調
您可以使用 VHAL 透過設定 HVAC 相關屬性來控制 HVAC。大多數 HVAC 屬性都與車輛的特定區域相關,儘管有一些屬性是全局屬性。範例定義的屬性包括:
財產 | 目的 |
---|---|
HVAC_TEMPERATURE_SET | 設定每個區域 ID 的溫度。 |
HVAC_POWER_ON | 每個區域 ID 的 HVAC 系統的電源狀態。 |
對於依賴 HVAC 系統電源狀態的 HVAC 屬性,它們必須列在HVAC_POWER_ON
配置陣列中。若要查看 HVAC 屬性的完整列表,請在VehicleProperty.aidl
中搜尋HVAC_*
,請參閱支援的系統屬性。特性。
將非全域 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_左 | ROW_2_LEFT
- ROW_1_右 | ROW_2_CENTER | ROW_2_右
相同硬體配置的替代映射是:
- ROW_1_左 | ROW_2_CENTER | ROW_2_LEFT
- ROW_1_右 | ROW_2_右
實施例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_左 | ROW_2_CENTER | ROW_2_右 | ROW_3_左| 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_左 | ROW_1_RIGHT
如果HVAC_AUTO_ON
對於駕駛側和乘客側有兩個單獨的控制單元,則替代映射將是兩個元素數組:
- ROW_1_LEFT
- ROW_1_RIGHT
歐盟一般安全法規合規性
如果車輛必須透過 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
。
- 在 Android 13 及更高版本中,使用
VehiclePropertyIds.GENERAL_SAFETY_REGULATION_COMPLIANCE
作為屬性 ID。 - 在 Android 12 中,使用硬編碼值 0x11400F47 作為屬性 ID。此屬性需要權限
Car#PERMISSION_CAR_INFO
。