属性配置

每项受支持的属性都由通过 VehiclePropConfig 结构定义的属性配置指定,并包含以下字段。

字段 说明
prop

属性 ID。此属性必须是支持的系统属性中定义的系统属性之一,或者是供应商属性。属性 ID 是使用以下字段的按位或(从右到左)构造的:

  • (0x00000000) 16 位:范围从 0x0100 到 0xffff 的唯一 ID。
  • (0x00000000) 8 位:属性类型,用于定义属性的类型。
  • (0x00000000) 4 位:区域类型
  • (0x00000000) 4 位:VehiclePropertyGroup> 此值为 SYSTEM (0x10000000) 或 VENDOR (0x20000000)。如需了解您可以自定义的属性,请参阅供应商属性

例如:
INFO_VIN (0x11100100) = UniqueID (0x00000100) | VehiclePropertyType.STRING (0x00100000) | VehicleArea.GLOBAL (0x01000000) | VehiclePropertyGroup.SYSTEM (0x10000000)

access 属性的访问模式。必须是 READWRITEREAD_WRITE 中的一个。这必须等同于支持的系统属性中定义的访问模式。
changeMode
  • 更改属性的模式。必须是 STATICON_CHANGECONTINUOUS 中的一个。STATIC 表示属性值在系统启动后永远不会更改。ON_CHANGE 表示 VHAL 必须在值发生更改时进行报告。CONTINUOUS 表示属性值会持续变化,并且 VHAL 必须根据订阅采样率进行报告。
  • 更改模式必须等同于支持的系统属性中定义的更改模式。
configArray 一个可选数组,用于包含特定于属性的配置。可以留空。
configString 一个可选字符串,用于包含特定于属性的配置。可以留空。
minSampleRatemaxSampleRate

连续属性支持的最小和最大采样率。如果属性不是连续的,则不使用。

属性类型

VehiclePropertyType.aidl 中定义为枚举。下表列出了支持的属性类型。

属性类型 说明
字符串 0x00100000 String 属性,使用“车辆属性值”中的 stringValue 字段。
BOOLEAN 0x00200000 Boolean 属性,使用车辆属性值int32Values 字段里的第一个元素。0 表示 falseNone 0 表示 true
INT32 0x00400000 Integer 属性,使用车辆属性值int32Values 字段里第一个元素。
INT32_VEC 0x00410000 Integer[] 属性,使用车辆属性值int32Values 字段里的元素。
INT64 0x00500000 Long 属性,使用车辆属性值int64Values 字段里的第一个元素。
INT64_VEC 0x00510000 Long[] 属性,使用车辆属性值int64Values 字段里的元素。
FLOAT 0x00600000 Float 属性,使用车辆属性值floatValues 字段里的第一个元素。
FLOAT_VEC 0x00610000 Float[] 属性,使用车辆属性值floatValues 字段里的第一个元素。
BYTES 0x00700000 byte[] 属性,使用车辆属性值byteValues 字段里的元素。
混合 0x00e00000 Mixed 类型属性。标量类型或矢量类型的任意组合。必须在属性配置的 config 数组中提供确切的格式。

对于供应商 MIXED 类型属性,configArray 需要采用以下结构格式:

  • configArray[0],1 表示该属性具有字符串值
  • configArray[1],1 表示该属性具有 Boolean 值
  • configArray[2],1 表示该属性具有 Integer 值
  • configArray[3],数字表示该属性中 Integer[] 的大小
  • configArray[4],1 表示该属性具有 Long 值
  • configArray[5],数字表示该属性中 Long[] 的大小
  • configArray[6],1 表示该属性具有 Float 值
  • configArray[7],数字表示该属性中 Float[] 的大小
  • configArray[8],数字表示该属性中 byte[] 的大小。

例如,configArray = {1, 1, 1, 3, 0, 0, 0, 0, 0} 表示该属性具有 String 值、Boolean 值、Integer 值和包含三个整数的数组。

区域 ID 配置

每项属性配置还可能包含一个区域 ID 配置列表。此列表对于全局属性是可选的,而对于区域属性(具有多个支持区域的属性)是必需的。每个区域 ID 配置都包含以下字段。

字段 说明
areaId 此区域的 ID。请参阅区域 ID
minInt32ValuemaxInt32Value
  • INT32 类型属性的可选最小值和最大值。对于所有其他类型均忽略。如果这两个值均为 0,则会被忽略。
  • 对于全局属性,如果需要定义最小值和最大值,则必须使用一个区域 ID 为 0 的区域配置。
minInt64ValuemaxInt64Value
  • INT64 类型属性的可选最小值和最大值。对于所有其他类型均忽略。如果这两个值均为 0,则会被忽略。
  • 对于全局属性,如果需要定义最小值和最大值,则必须使用一个区域 ID 为 0 的区域配置。
minFloatValuemaxFloatValue
  • Float 类型属性的可选最小值和最大值。对于所有其他类型均忽略。如果这两个值均为 0.0,则会被忽略。
  • 对于全局属性,如果需要定义最小值和最大值,则必须使用一个区域 ID 为 0 的区域配置。
(Android 14 中的新功能)
supportedEnumValues
  • 属性定义为枚举类型属性的情况下,受支持的值的可选列表。如果未指定(为空)或版本早于 Android 14,则假定支持所有枚举值。
  • 对于全局属性,如果需要定义支持的枚举值,则必须使用一个区域 ID 为 0 的区域配置。

区域类型

VehicleArea.aidl 中定义为枚举。支持的区域类型如下所列。

区域类型 说明
GLOBAL 0x01000000 此属性是一个全局属性,不具有多个区域。
WINDOW 0x03000000 基于车窗的区域,使用 VehicleAreaWindow 枚举。
MIRROR 0x04000000 基于车镜的区域,使用 VehicleAreaMirror 枚举。
SEAT 0x05000000 基于座椅的区域,使用 VehicleAreaSeat 枚举。
DOOR 0x06000000 基于车门的区域,使用 VehicleAreaDoor 枚举。
WHEEL 0x07000000 基于车轮的区域,使用 VehicleAreaWheel 枚举。

每个区域属性都必须使用一个预定义的区域类型。每种区域类型都有一组在区域类型的枚举中定义的位标志。例如,SEAT 区域定义了 VehicleAreaSeat 枚举:

  • ROW_1_LEFT = 0x0001
  • ROW_1_CENTER = 0x0002
  • ROW_1_RIGHT = 0x0004
  • ROW_2_LEFT = 0x0010
  • ROW_2_CENTER = 0x0020
  • ROW_2_RIGHT = 0x0040
  • ROW_3_LEFT = 0x0100
  • ...

区域 ID

区域属性通过区域 ID 进行寻址。每个区域属性都可能支持一个或多个区域 ID。区域 ID 由其各自枚举中的一个或多个标志组成。例如,使用 VehicleAreaSeat 的属性可能会使用以下区域 ID:

说明
ROW_1_LEFT | ROW_1_RIGHT 区域 ID 适用于两个前排座椅。
ROW_2_LEFT 仅适用于后排左侧座位。
ROW_2_RIGHT 仅适用于后排右侧座位。

如需了解详情,请参阅 HVAC