特殊属性

供应商属性

为了满足合作伙伴的特定需求,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(适用于本机)访问。请勿修改其他 Car 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_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 车辆属性

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

欧盟一般安全法规合规性

如果车辆必须通过 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