供应商属性
为满足特定合作伙伴的需求,VHAL 允许使用仅通过系统 API 访问的供应商属性。在使用供应商属性时,请遵循以下指南:
- 始终尝试首先使用系统属性,供应商属性应作为最后的手段,当没有任何系统属性能满足您的要求时才可以使用。
- 为防止生态系统碎片化,不得使用供应商属性来复制 SDK VehiclePropertyIds 中已有的车辆属性。如需了解详情,请参阅 CDD 中的第 2.5 节“Automotive 设备相关要求”。
- 使用以下字段生成属性 ID:
VehiclePropertyGroup:VENDOR
VENDOR 组仅用于供应商属性。VehicleArea
选择适当的区域类型。VehiclePropertyType
选择适当的数据类型。BYTES 类型允许传递原始数据(在大多数情况下,这就足够了)。频繁地通过供应商属性发送大数据可能会减缓整个车辆网络的访问速度。因此,在添加大量数据时应谨慎。Property ID
为供应商属性选择一个唯一的双字节 ID。例如:0x1234。
- 在
VehiclePropConfig.configString
中填写供应商属性的简短说明。这样一来,在已有车辆属性发生意外复制时,有效性检查工具就可以对其进行标记。例如,“My custom property for XYZ”。 - 通过 CarPropertyManager(适用于 Java 组件)或
libvhalclient
(适用于本机)访问。请勿修改其他汽车 API,以免日后出现兼容性问题。
供应商属性权限
任何已定义的供应商属性的默认权限都是 android.car.Car.PERMISSION_VENDOR_EXTENSION
。如需实现更精细的权限控制,请支持 SUPPORT_CUSTOMIZE_VENDOR_PERMISSION
属性。此 STATIC 属性是只读的,其 config 数组指定了供应商属性的权限。configArray
的设置如下(i 是一个从 0 开始的整数):
configArray[3 * i]
:propId,供应商属性的属性 ID。configArray[3 * i + 1]
:VehicleVendorPermission.aidl
中的枚举,指示读取属性值所需的权限。configArray[3 * i + 2]
:VehicleVendorPermission.aidl
中的枚举,指示写入属性值所需的权限。
例如,以下 config 数组配置了 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
请参阅座椅和方向盘属性。
HVAC
您可以使用 VHAL 控制 HVAC,具体方法是设置与 HVAC 相关的属性。大多数 HVAC 属性都与车辆中的特定区域相关联,但也有一些属性是全局属性。定义的属性示例包括:
属性 | 用途 |
---|---|
HVAC_TEMPERATURE_SET |
按区域 ID 设置温度。 |
HVAC_POWER_ON |
每个区域 ID 的 HVAC 系统的电源状态。 |
对于依赖于 HVAC 系统电源状态的 HVAC 属性,必须将其列在 HVAC_POWER_ON
config 数组中。如需查看 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_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
权限。