Parámetros de configuración de la propiedad

Cada propiedad admitida se especifica mediante una configuración de propiedad definida a través de la estructura VehiclePropConfig y tiene los siguientes campos.

Campo Descripción
prop

Es el ID de la propiedad. Debe ser una de las propiedades del sistema definidas en VehicleProperty.aidl o una propiedad del proveedor. El ID de la propiedad se construye con la operación bit a bit OR de los siguientes campos (de derecha a izquierda):

  • (0x00000000) 16 bits: Es un ID único del rango 0x0100 a 0xffff.
  • (0x00000000) 8 bits: Tipos de propiedad que definen el tipo de propiedad.
  • (0x00000000) 4 bits: Tipos de área.
  • (0x00000000) 4 bits: VehiclePropertyGroup Puede ser SYSTEM (0x10000000) o VENDOR (0x20000000). Consulta Propiedades del proveedor para conocer las propiedades que puedes personalizar.

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

access
  • Es el modo de acceso a la propiedad. Debe ser READ, WRITE o READ_WRITE.
  • En el caso de las propiedades del sistema, debe ser uno de los modos de acceso definidos que se documentan en VehicleProperty.aidl.
  • En el caso de las propiedades que tienen acceso por área, este es el subconjunto máximo del acceso por área. Por ejemplo, si las propiedades tienen dos áreas cuyo acceso es READ y READ_WRITE, esto se debe establecer en READ.
changeMode
  • Modo de cambio de la propiedad. Debe ser STATIC, ON_CHANGE o CONTINUOUS. STATIC significa que el valor de la propiedad nunca cambia después de un inicio del sistema. ON_CHANGE significa que el VHAL debe informar cuando cambia el valor. CONTINUOUS significa que el valor de la propiedad cambia continuamente y que el VHAL debe informar según la frecuencia de muestreo de la suscripción.
  • En el caso de las propiedades del sistema, este valor debe ser igual al modo de cambio que se documenta en VehicleProperty.aidl.
configArray Es un array opcional que contiene la configuración específica de la propiedad. Puede estar vacío. Para ciertas propiedades del sistema, por ejemplo, GEAR_SELECTION, el array de configuración tiene un significado especial y se debe especificar.
configString Es una cadena opcional que contiene la configuración específica de la propiedad. Puede estar vacío.
minSampleRate y maxSampleRate Tasa de muestreo mínima y máxima admitida para la propiedad continua (en hercios). No se usa si la propiedad no es continua. La implementación de VHAL debe poder lograr minSampleRate y maxSampleRate. No es necesario que se admitan todas las tasas de muestreo entre el valor mínimo y el máximo.

Tipos de propiedad

Se definen como enumeraciones en VehiclePropertyType.aidl. Los tipos de propiedades admitidos se enumeran en la siguiente tabla.

Tipo de propiedad Valor Descripción
STRING 0x00100000 Es una propiedad de cadena que usa el campo stringValue en Valor de propiedad del vehículo.
BOOLEAN 0x00200000 La propiedad Boolean usa el primer elemento del campo int32Values en Valor de la propiedad del vehículo. 0 significa false y None 0 significa true.
INT32 0x00400000 La propiedad Integer usa el primer elemento del campo int32Values en Valor de la propiedad del vehículo.
INT32_VEC 0x00410000 La propiedad Integer[] usa los elementos del campo int32Values en Valor de la propiedad del vehículo.
INT64 0x00500000 Es una propiedad larga que usa el primer elemento del campo int64Values en Valor de la propiedad del vehículo.
INT64_VEC 0x00510000 La propiedad Long[] usa los elementos del campo int64Values en Valor de la propiedad del vehículo.
FLOAT 0x00600000 La propiedad Float usa el primer elemento del campo floatValues en Valor de la propiedad del vehículo.
FLOAT_VEC 0x00610000 La propiedad Float[] usa los elementos del campo floatValues en Valor de la propiedad del vehículo.
BYTES 0x00700000 La propiedad byte[] usa los elementos del campo byteValues en Valor de la propiedad del vehículo.
MIXED 0x00e00000 Es una propiedad de tipo mixto. Cualquier combinación de tipos vectoriales o escalares El formato exacto se debe proporcionar en el array de configuración de la propiedad.

En el caso de las propiedades de tipo MIXED del proveedor, configArray debe tener este formato:

  • configArray[0], 1 indica que la propiedad tiene un valor de String
  • configArray[1], 1 indica que la propiedad tiene un valor de Boolean
  • configArray[2], 1 indica que la propiedad tiene un valor de Integer
  • configArray[3], el número indica el tamaño de Integer[] en la propiedad.
  • configArray[4], 1 indica que la propiedad tiene un valor de Long
  • configArray[5], el número indica el tamaño de Long[] en la propiedad.
  • configArray[6], 1 indica que la propiedad tiene un valor de Float
  • configArray[7], el número indica el tamaño de Float[] en la propiedad.
  • configArray[8], el número indica el tamaño de byte[] en la propiedad.

Por ejemplo, configArray = {1, 1, 1, 3, 0, 0, 0, 0, 0} indica que la propiedad tiene un valor String, un valor Boolean, un valor Integer y un array con tres números enteros.

Configuración del ID de área

Cada configuración de propiedad también puede contener una lista de configuraciones de ID de área. Esta lista es opcional para las propiedades globales y obligatoria para las propiedades zonificadas (propiedades con varias áreas admitidas). Cada configuración de ID de área tiene los siguientes campos.

Campo Descripción
areaId Es el ID de esta área. Consulta IDs de área.
minInt32Value y maxInt32Value
  • Valores mínimo y máximo opcionales para las propiedades de tipo INT32 en el momento del arranque. Debe ser 0 para todos los demás tipos. Se ignoran si ambos son 0.
  • En el caso de la propiedad global, si se deben definir valores mínimos y máximos, se debe usar una configuración de área con el ID de área 0.
  • Este valor es estático y no cambiará, incluso si el valor mínimo o máximo cambia en el tiempo de ejecución. Implementa IVehicle#getMinMaxSupportedValue para el valor mínimo o máximo dinámico.
minInt64Value y maxInt64Value
  • Valores mínimo y máximo opcionales para las propiedades de tipo INT64 en el momento del arranque. Debe ser 0 para todos los demás tipos. Se ignoran si ambos son 0.
  • En el caso de la propiedad global, si se deben definir valores mínimos y máximos, se debe usar una configuración de área con el ID de área 0.
  • Este valor es estático y no cambiará, incluso si el valor mínimo o máximo cambia en el tiempo de ejecución. Implementa IVehicle#getMinMaxSupportedValue para el valor mínimo o máximo dinámico.
minFloatValue y maxFloatValue
  • Valores mínimo y máximo opcionales para las propiedades de tipo flotante en el momento del arranque. Debe ser 0 para todos los demás tipos. Se ignora si ambos son 0.0.
  • En el caso de la propiedad global, si se deben definir valores mínimos y máximos, se debe usar una configuración de área con el ID de área 0.
  • Este valor es estático y no cambiará, incluso si el valor mínimo o máximo cambia en el tiempo de ejecución. Implementa IVehicle#getMinMaxSupportedValue para el valor mínimo o máximo dinámico.
(Novedad de Android 14)
supportedEnumValues
  • Lista opcional de valores admitidos en el momento del inicio si la propiedad se define como una propiedad de tipo enum. Si no se especifica (está vacío) o es anterior a Android 14, se supone que se admiten todos los valores de enumeración.
  • En el caso de la propiedad global, si se deben definir valores de enumeración admitidos, se debe usar una configuración de área con el ID de área 0.
  • Este valor es estático y no cambiará, incluso si los valores admitidos cambian en el tiempo de ejecución. Implementa IVehicle#getSupportedValuesLists para los valores admitidos dinámicos.
  • Esto solo se aplica a las propiedades de tipo enum. Para otros tipos, este campo debe estar vacío. Para exponer valores admitidos para otros tipos que no son de enumeración, usa IVehicle#getSupportedValuesLists.
(Novedades de Android 15)
supportVariableUpdateRate
  • Indica si se admite la frecuencia de actualización variable. Esto solo se aplica a las propiedades continuas.
  • Si es true, la app puede habilitar una tasa de actualización variable para una suscripción y recibir eventos de actualización de propiedades solo cuando cambia el valor de la propiedad (lo que trata las propiedades continuas como propiedades de cambio).
  • Si todos los suscriptores de una propiedad habilitan la tasa de actualización variable, la solicitud de suscripción a VHAL habilita la tasa de actualización variable para la propiedad y VHAL debe enviar eventos de actualización de la propiedad solo cuando cambia el valor de la propiedad.
  • Si algún suscriptor solicita una frecuencia de actualización fija, la solicitud de suscripción a VHAL inhabilita la frecuencia de actualización variable para la propiedad y AAOS filtra los eventos duplicados para los clientes que solicitan una frecuencia de actualización variable.
  • Se RECOMIENDA ENCARECIDAMENTE admitir una frecuencia de actualización variable para todas las propiedades continuas que no sean de latido para obtener un mejor rendimiento, a menos que los datos de la propiedad sean grandes (por ejemplo, un array de bytes de 1 KB de tamaño) y puedan ocupar una gran cantidad de memoria para el almacenamiento en caché.
(Novedades de Android 16)
hasSupportedValueInfo
  • Si no es null, muestra si esta propiedad especifica valores mínimos o máximos admitidos, o bien una lista de valores admitidos.
  • Este campo controla si las APIs de valores admitidos dinámicos: getMinMaxSupportedValue, getSupportedValuesLists, subscribeSupportedValueChange, unsubscribeSupportedValueChange son compatibles con este ID de propiedad y este ID de área.
  • Si no es null, VHAL debe implementar estas APIs para este ID de propiedad y este ID de área.
  • Si es null o Android 15 o versiones anteriores, no se admiten los valores dinámicos admitidos para este ID de propiedad y este ID de área. El cliente debe usar la información de valores admitidos estáticos que se proporciona en la configuración de la propiedad del vehículo.

Tipos de área

Se definen como enumeraciones en VehicleArea.aidl. A continuación, se indican los tipos de áreas admitidos.

Tipo de área Valor Descripción
GLOBAL 0x01000000 Esta propiedad es global y no tiene varias áreas.
VENTANA 0x03000000 Área basada en ventanas, usa la enumeración VehicleAreaWindow.
MIRROR 0x04000000 Es el área basada en espejos y usa la enumeración VehicleAreaMirror.
SEAT 0x05000000 Es el área según los asientos y usa la enumeración VehicleAreaSeat.
DOOR 0x06000000 Es el área según las puertas y usa la enumeración VehicleAreaDoor.
RUEDA 0x07000000 Es el área basada en ruedas y usa la enumeración VehicleAreaWheel.

Cada propiedad zonificada debe usar un tipo de área predefinido. Cada tipo de área tiene un conjunto de marcas de bits definidas en una enumeración para el tipo de área. Por ejemplo, el área SEAT define los siguientes enums 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
  • ...

IDs de área

Las propiedades zonificadas se abordan a través de los IDs de área. Cada propiedad zonificada puede admitir uno o más IDs de área. Un ID de área consta de una o más marcas de su respectivo enum. Por ejemplo, una propiedad que usa VehicleAreaSeat podría usar los siguientes IDs de área:

Artículo Descripción
ROW_1_LEFT | ROW_1_RIGHT El ID de área se aplica a ambos asientos delanteros.
ROW_2_LEFT Solo se aplica al asiento trasero izquierdo.
ROW_2_RIGHT Solo se aplica al asiento trasero derecho.

Para obtener más información, consulta HVAC.