供应商属性
为了支持合作伙伴的特定需求,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 车辆属性。座椅和方向盘
请参阅座椅和方向盘属性。
HVAC
您可以使用 VHAL 通过设置 HVAC 相关属性来控制 HVAC。大多数 HVAC 属性都与车辆中的特定区域相关联,不过也有一些是全局属性。示例定义的属性包括
属性 | 用途 |
---|---|
HVAC_TEMPERATURE_SET |
设置每个区域 ID 的温度。 |
HVAC_POWER_ON |
每个区域 ID 的 HVAC 系统的电源状态。 |
对于依赖于 HVAC 系统电源状态的 HVAC 属性,它们必须在 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_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 发布以来,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
权限。