Property configurations

Each supported property is specified by a property configuration defined through VehiclePropConfig structure and has the following fields.

Field Description
prop

The property ID. This must be either one of the defined system properties from the VehicleProperty.aidl or a vendor property. The property ID is constructed using bit-or of the following fields (right to left):

  • (0x00000000) 16 bits: A unique ID from range 0x0100 - 0xffff.
  • (0x00000000) 8 bits: Property types which defines the type for the property.
  • (0x00000000) 4 bits: Area types.
  • (0x00000000) 4 bits: VehiclePropertyGroup This is either SYSTEM (0x10000000) or VENDOR (0x20000000). See Vendor Properties for properties you can customize.

For example,
INFO_VIN (0x11100100) = UniqueID (0x00000100) | VehiclePropertyType.STRING (0x00100000) | VehicleArea.GLOBAL (0x01000000) | VehiclePropertyGroup.SYSTEM (0x10000000)

access
  • The access mode for the property. Must be one of READ, WRITE, or READ_WRITE.
  • For system properties, this must be one of the defined access modes documented in VehicleProperty.aidl.
  • For properties that have per-area access, this is the maximal subset of the per-area access, for example, if the properties have two areas whose access is READ and READ_WRITE, this should be set to READ.
changeMode
  • Change mode for the property. Must be one of STATIC, ON_CHANGE, or CONTINUOUS. STATIC means the property value never changes after a system boot. ON_CHANGE means the VHAL must report when the value changes. CONTINUOUS means the property value changes continuously and VHAL must report based on the subscription sample rate.
  • For system properties, this must be equal to the change mode documented in VehicleProperty.aidl.
configArray An optional array to contain property-specific configuration. Can be empty. For certain system properties, for example, GEAR_SELECTION, the config array has special meaning and must be specified.
configString An optional string to contain property specific configuration. Can be empty.
minSampleRate and maxSampleRate The minimum and maximum supported sample rate for continuous property (in Hertz). Not used if property isn't continuous. minSampleRate and maxSampleRate must be achievable by the VHAL implementation. Not all sample rates between minimum and maximum have to be supported.

Property types

Defined as enums in VehiclePropertyType.aidl. Supported property types are listed in the following table.

Property type Value Description
STRING 0x00100000 String property, uses the stringValue field in Vehicle property value.
BOOLEAN 0x00200000 Boolean property, uses the first element in int32Values field in Vehicle property value. 0 means false, None 0 means true.
INT32 0x00400000 Integer property, uses the first element in int32Values field in Vehicle property value.
INT32_VEC 0x00410000 Integer[] property, uses the elements in the int32Values field in Vehicle property value.
INT64 0x00500000 Long property, uses the first element in int64Values field in Vehicle property value.
INT64_VEC 0x00510000 Long[] property, uses the elements in int64Values field in Vehicle property value.
FLOAT 0x00600000 Float property, uses the first element in floatValues field in Vehicle property value.
FLOAT_VEC 0x00610000 Float[] property, uses the elements in floatValues field in Vehicle property value.
BYTES 0x00700000 byte[] property, uses the elements in byteValues field in Vehicle property value.
MIXED 0x00e00000 Mixed type property. Any combination of scalar or vector types. The exact format must be provided in the config array in the property configuration.

For vendor MIXED type properties, configArray needs to be formatted in this structure:

  • configArray[0], 1 indicates the property has a String value
  • configArray[1], 1 indicates the property has a Boolean value
  • configArray[2], 1 indicates the property has an Integer value
  • configArray[3], the number indicates the size of Integer[] in the property
  • configArray[4], 1 indicates the property has a Long value
  • configArray[5], the number indicates the size of Long[] in the property
  • configArray[6], 1 indicates the property has a Float value
  • configArray[7], the number indicates the size of Float[] in the property
  • configArray[8], the number indicates the size of byte[] in the property.

For example, configArray = {1, 1, 1, 3, 0, 0, 0, 0, 0} indicates the property has a String value, a Boolean value, an Integer value, and an array with three integers.

Area ID configuration

Each property configuration also may contain a list of area ID configurations. This list is optional for global properties and required for zoned properties (properties with multiple supported areas). Each area ID configuration has the following fields.

Field Description
areaId The ID for this area. See Area IDs.
minInt32Value and maxInt32Value
  • Optional minimum and maximum value for INT32 type properties at boot time. Must be 0 for all other types. Ignored if both are 0.
  • For global property, if minimum and maximum value needs to be defined, one area configuration with the area ID 0 must be used.
  • This value is static and won't change even if the minimum or maximum value changes at runtime. Implement IVehicle#getMinMaxSupportedValue for dynamic minimum or maximum value.
minInt64Value and maxInt64Value
  • Optional minimum and maximum value for INT64 type properties at boot time. Must be 0 for all other types. Ignored if both are 0.
  • For global property, if minimum and maximum value needs to be defined, one area configuration with the area ID 0 must be used.
  • This value is static and won't change even if the minimum or maximum value changes at runtime. Implement IVehicle#getMinMaxSupportedValue for dynamic minimum or maximum value.
minFloatValue and maxFloatValue
  • Optional minimum and maximum value for Float type properties at boot time. Must be 0 for all other types. Ignored if both are 0.0.
  • For global property, if minimum and maximum value needs to be defined, one area configuration with the area ID 0 must be used.
  • This value is static and won't change even if the minimum or maximum value changes at runtime. Implement IVehicle#getMinMaxSupportedValue for dynamic minimum or maximum value.
(New in Android 14)
supportedEnumValues
  • Optional list of supported values at boot time if the property is defined as an enum type property. If not specified (empty) or before Android 14, it is assumed all enum values are supported.
  • For global property, if supported enum values need to be defined, one area configuration with the area ID 0 must be used.
  • This value is static and won't change even if the supported values change at runtime. Implement IVehicle#getSupportedValuesLists for dynamic supported values.
  • This only applies for enum type properties. For other types, this field must be empty. To expose supported values for other non-enum types, use IVehicle#getSupportedValuesLists.
(New in Android 15)
supportVariableUpdateRate
  • Whether variable update rate is supported. This applies only for continuous properties.
  • If this is true, the app can enable variable update rate for a subscription to receive property update events only when the property value changes (which is treating continuous properties as on-change properties).
  • If all subscribers for a property are enabling variable update rate, the subscription request to VHAL enables variable update rate for the property and VHAL must send property update events only when the property value changes.
  • If any subscriber is requesting fixed update rate, the subscription request to VHAL disables variable update rate for the property and AAOS filters out the duplicate events for the clients that request variable update rate.
  • It is HIGHLY RECOMMENDED to support variable update rate for all non-heartbeat continuous properties for better performance unless the property data is large (for example, a byte array of 1k in size) and might occupy large amount of memory for caching.
(New in Android 16)
hasSupportedValueInfo
  • If not null, shows whether this property specifies minimum or maximum supported values or supported values list.
  • This field controls whether the dynamic supported value APIs: getMinMaxSupportedValue, getSupportedValuesLists, subscribeSupportedValueChange, unsubscribeSupportedValueChange are supported for this property ID and area ID.
  • If not null, VHAL must implement these APIs for this property ID and area ID.
  • If null or in Android 15 or lower, dynamic supported values for this property ID and area ID are not supported. The client must use the static supported value information provided in the vehicle property configuration.

Area types

Defined as enums in VehicleArea.aidl. The supported area types are listed below.

Area type Value Description
GLOBAL 0x01000000 This property is a global property and does not have multiple areas.
WINDOW 0x03000000 Area based on windows, uses VehicleAreaWindow enum.
MIRROR 0x04000000 Area based on mirrors, uses VehicleAreaMirror enum.
SEAT 0x05000000 Area based on seats, uses VehicleAreaSeat enum.
DOOR 0x06000000 Area based on doors, uses VehicleAreaDoor enum.
WHEEL 0x07000000 Area based on wheels, uses VehicleAreaWheel enum.

Each zoned property must use a pre-defined area type. Each area type has a set of bit flags defined in an enum for the area type. For example, the SEAT area defines VehicleAreaSeat enums:

  • 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
  • ...

Area IDs

Zoned properties are addressed through Area IDs. Each zoned property may support one or more Area IDs. An Area ID consists of one or more flags from its respective enum. For example, a property using VehicleAreaSeat might use the following Area IDs:

Item Description
ROW_1_LEFT | ROW_1_RIGHT The Area ID applies to both front seats.
ROW_2_LEFT Applies only to the rear left seat.
ROW_2_RIGHT Applies only to the rear right seat.

To learn more, see HVAC.