属性配置

每项受支持的属性都由通过 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 属性的访问模式。必须是 READ、WRITE 或 READ_WRITE 中的一个。这必须等同于支持的系统属性中定义的访问模式。
changeMode
  • 更改属性的模式。必须是 STATIC、ON_CHANGE 或 CONTINUOUS 中的一个。STATIC 表示属性值在系统启动后永远不会更改。ON_CHANGE 表示 VHAL 必须在值发生更改时进行报告。CONTINUOUS 表示属性值会持续变化,并且 VHAL 必须根据订阅采样率进行报告。
  • 更改模式必须等同于支持的系统属性中定义的更改模式。
configArray 一个可选数组,用于包含特定于属性的配置。可以留空。
configString 一个可选字符串,用于包含特定于属性的配置。可以留空。
minSampleRate和maxSampleRate

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

属性类型

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

属性类型 值 说明
STRING 0x00100000 String 属性,使用“车辆属性值”中的 stringValue 字段。
BOOLEAN 0x00200000 Boolean 属性,使用车辆属性值中 int32Values 字段里的第一个元素。0 表示 false,None 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。
minInt32Value 和 maxInt32Value
  • INT32 类型属性的可选最小值和最大值。对于所有其他类型均忽略。如果这两个值均为 0,则会被忽略。
  • 对于全局属性,如果需要定义最小值和最大值,则必须使用一个区域 ID 为 0 的区域配置。
minInt64Value 和 maxInt64Value
  • INT64 类型属性的可选最小值和最大值。对于所有其他类型均忽略。如果这两个值均为 0,则会被忽略。
  • 对于全局属性,如果需要定义最小值和最大值,则必须使用一个区域 ID 为 0 的区域配置。
minFloatValue 和 maxFloatValue
  • 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。