特殊属性

供应商属性

为了支持合作伙伴的特定需求,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_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 车辆属性

座椅和方向盘

请参阅座椅和方向盘属性

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 所示。

图 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