Propiedades del proveedor
Para satisfacer las necesidades específicas de los socios, la VHAL permite propiedades del proveedor a las que se accede solo a través de las APIs del sistema. Sigue estos lineamientos cuando trabajes con propiedades del proveedor:
- Siempre intenta usar primero las propiedades del sistema. Las propiedades del proveedor se deben usar como último recurso cuando ninguna de las propiedades del sistema satisfaga tus requisitos.
- Para evitar la fragmentación del ecosistema, no se deben usar propiedades del proveedor para replicar propiedades del vehículo que ya existen en el SDK de VehiclePropertyIds. Para obtener más información, consulta la sección 2.5, Requisitos para automóviles en el CDD.
- Usa los siguientes campos para generar el ID de propiedad:
- El grupo
VehiclePropertyGroup:VENDOR
VENDOR se usa solo para las propiedades del proveedor. VehicleArea
Selecciona un tipo de área adecuado.VehiclePropertyType
Selecciona el tipo de datos adecuado. El tipo BYTES permite pasar datos sin procesar, lo que es suficiente en la mayoría de los casos. Enviar macrodatos con frecuencia a través de propiedades del proveedor puede ralentizar el acceso a toda la red del vehículo. Ten cuidado cuando agregues una carga útil grande.Property ID
Elige un ID único de dos bytes para la propiedad del proveedor. Por ejemplo, 0x1234.
- El grupo
- Completa
VehiclePropConfig.configString
con una breve descripción de la propiedad del proveedor. Esto permite que las herramientas de verificación de validez marquen la replicación accidental de propiedades de vehículos existentes. Por ejemplo, "Mi propiedad personalizada para XYZ". - Accede a través de CarPropertyManager (para componentes de Java) o a través de
libvhalclient
(para código nativo). No modifiques otras APIs de automóviles, ya que esto puede generar problemas de compatibilidad en el futuro.
Permiso de propiedades del proveedor
El permiso predeterminado para cualquier propiedad del proveedor definida es android.car.Car.PERMISSION_VENDOR_EXTENSION
. Para un control más detallado de los permisos, admite la propiedad SUPPORT_CUSTOMIZE_VENDOR_PERMISSION
. Esta propiedad STATIC es de solo lectura, y su array de configuración especifica los permisos para las propiedades del proveedor.
El valor de configArray
se establece de la siguiente manera (i es un número entero que comienza en 0):
configArray[3 * i]
propId, el ID de la propiedad del proveedor.configArray[3 * i + 1]
Es una enumeración enVehicleVendorPermission.aidl
para indicar permiso para leer el valor de la propiedad.configArray[3 * i + 2]
Es una enumeración enVehicleVendorPermission.aidl
para indicar permiso para escribir el valor de la propiedad.
Por ejemplo, el siguiente array de configuración establece que dos propiedades del proveedor, vendor_prop_1
y vendor_prop_2
, tengan los permisos:
vendor_prop_1
requiereandroid.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_SEAT
para leer yandroid.car.hardware.property.VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_SEAT
para escribir.vendor_prop-2
requiere queandroid.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_INFO
lea y no se puede escribir para las apps para Android.
configArray = { PERMISSION_SET_VENDOR_CATEGORY_SEAT vendor_prop_2, PERMISSION_GET_VENDOR_CATEGORY_INFO, PERMISSION_NOT_ACCESSIBLE }
Las propiedades del proveedor que no se encuentran en este array adoptan el permiso predeterminado del proveedor. Cuando se selecciona PERMISSION_NOT_ACCESSIBLE
, las apps para Android no pueden acceder a la propiedad.
En el ejemplo, las apps para Android no pueden escribir un valor para vendor_prop_2
. Solo los clientes de VHAL nativos pueden escribir en esta propiedad.
Sistemas avanzados de asistencia al conductor (ADAS)
Consulta ADAS Vehicle Properties.ASIENTO y DIRECCIÓN
Consulta Propiedades del asiento y el volante.
HVAC
Puedes usar el VHAL para controlar el HVAC configurando propiedades relacionadas con el HVAC. La mayoría de las propiedades del HVAC se asocian con áreas específicas del vehículo, aunque varias son propiedades globales. Las propiedades definidas por la muestra incluyen las siguientes:
Propiedad | Propósito |
---|---|
HVAC_TEMPERATURE_SET |
Establece la temperatura por ID de área. |
HVAC_POWER_ON |
Es el estado de energía del sistema de HVAC por ID de área. |
En el caso de las propiedades de HVAC que dependen del estado de energía del sistema de HVAC, deben incluirse en el array de configuración HVAC_POWER_ON
. Para ver una lista completa de las propiedades de HVAC, busca HVAC_*
en VehicleProperty.aidl
y consulta Supported System Properties.
propiedades.
Reglas para asignar propiedades de HVAC de tipo VehicleArea que no son GLOBAL a AreaIDs:
Cada "área" para un tipo VehicleArea
específico que se ve afectado por la propiedad debe incluirse en un ID de área para esa propiedad. Los reguladores de temperatura se asignan a los asientos que "más influyen", pero cada asiento afectado debe incluirse exactamente una vez.
La asignación del asiento trasero central al AreaID izquierdo o derecho puede parecer arbitraria, pero la inclusión de cada asiento afectado en exactamente un AreaID garantiza que se expresen todos los asientos del automóvil y que haya disponible una forma razonable de afectar cada asiento.
Ejemplo 1
Un automóvil tiene dos asientos delanteros (ROW_1_LEFT, ROW_1_RIGHT) y tres asientos traseros (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT). Hay dos unidades de control de temperatura, una para el lado del conductor y otra para el lado del pasajero. Un conjunto de asignaciones válido de AreaIDs para HVAC_TEMPERATURE_SET
sería un array de dos elementos:
- ROW_1_LEFT | ROW_2_LEFT
- ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
Una asignación alternativa para la misma configuración de hardware sería la siguiente:
- ROW_1_LEFT | ROW_2_CENTER | ROW_2_LEFT
- ROW_1_RIGHT | ROW_2_RIGHT
Ejemplo 2
Un automóvil tiene tres filas de asientos, con dos asientos en la primera fila (ROW_1_LEFT, ROW_1_RIGHT) y tres asientos en la segunda (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) y tercera filas (ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT). Hay tres unidades de control de temperatura, una para el lado del conductor, otra para el lado del pasajero y otra para la parte trasera. Una forma razonable de asignar HVAC_TEMPERATURE_SET
a AreaIDs es un array de tres elementos:
- ROW_1_LEFT
- ROW_1_RIGHT
- ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT
Ejemplo 3
Un automóvil tiene dos asientos delanteros (ROW_1_LEFT, ROW_1_RIGHT) y tres asientos traseros (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT). Supongamos que el auto admite HVAC_AUTO_ON solo para los dos asientos delanteros. Un conjunto de asignaciones válido de AreaIDs para HVAC_AUTO_ON sería un array de un solo elemento:
- ROW_1_LEFT | ROW_1_RIGHT
Si HVAC_AUTO_ON
tuviera dos unidades de control separadas para el lado del conductor y el lado del pasajero, una asignación alternativa sería un array de dos elementos:
- ROW_1_LEFT
- ROW_1_RIGHT
INFO_EXTERIOR_DIMENSIONS
Las dimensiones exteriores de un vehículo se miden en milímetros, como se ilustra en la Figura 1.


Usa las propiedades que se describen en esta tabla para definir las dimensiones exteriores de un vehículo.
Propiedad del vehículo | Campo de VHAL | Descripción |
---|---|---|
Altura | int32Values[0] |
Distancia vertical entre el suelo y el punto más alto del vehículo. Esto supone que las ruedas de fábrica están infladas normalmente. |
Longitud | int32Values[1] |
Distancia horizontal entre los puntos más externos de la parte delantera y trasera del vehículo. |
Ancho, sin incluir los espejos | int32Values[2] |
Distancia horizontal entre los dos puntos más externos de cada lado del vehículo, sin incluir los espejos laterales. |
Ancho, incluidos los espejos | int32Values[3] |
Distancia horizontal entre los dos puntos más externos de cada lado del vehículo, incluidos los espejos laterales. |
Distancia entre ejes | int32Values[4] |
Distancia entre el centro de las ruedas delanteras y traseras del vehículo. |
Ancho de la vía, parte delantera | int32Values[5] |
Distancia entre la rueda delantera, medida desde la línea central de una banda de rodadura hasta la línea central de la banda de rodadura opuesta. |
Ancho de la vía, parte trasera | int32Values[6] |
Distancia entre la rueda trasera, medida desde la línea central de una banda de rodadura hasta la línea central de la banda de rodadura opuesta. |
Diámetro de giro de borde a borde | int32Values[7] |
Diámetro del círculo que forman las ruedas exteriores del vehículo cuando se realiza un giro completo con el volante completamente bloqueado. |
Cumplimiento del reglamento general de seguridad de la Unión Europea
Si el vehículo debe cumplir con los requisitos del Reglamento de Seguridad General (GSR) de la Unión Europea a través de Android, se debe admitir la propiedad GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT
. Un ejemplo de caso de uso es el ISA (Asistente inteligente de velocidad) del GSR, según se define en el Reglamento (UE) 2019/2144. Esta propiedad se agregó en VHAL de AIDL a partir de Android 13, pero se admite en Car Service desde el lanzamiento de Android 12. Esta propiedad se define como una propiedad estática global de números enteros de solo lectura, con valores posibles definidos por la enumeración GsrComplianceRequirementType
:
Name | Valor | Descripción |
---|---|---|
GSR_COMPLIANCE_NOT_REQUIRED |
0 | No se requiere el cumplimiento de GSR |
GSR_COMPLIANCE_REQUIRED_V1 |
1 | Se requiere el cumplimiento de la GSR y la versión de la solución de requisitos es 1. |
Para admitir esta propiedad en HIDL VHAL (en Android 12), los proveedores deben codificar de forma rígida el ID de la propiedad.
Por ejemplo, en el siguiente fragmento, se muestra cómo se admite esto en el VHAL de referencia de HIDL DefaultConfig.h
:
{ .config = { // GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT .prop = 0x11400F47, .access = VehiclePropertyAccess::READ, .changeMode = VehiclePropertyChangeMode::STATIC, }, // GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1 .initialValue = {.int32Values = {1}}, }
Para admitir esta propiedad en la VHAL de AIDL (desde Android 13), los proveedores pueden usar el ID de propiedad de VehicleProperty.h
y la enumeración de GsrComplianceRequirementType.h
. Por
ejemplo, como en la referencia AIDL VHAL
DefaultProperties.json
:
{ "property": "VehicleProperty::GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT", "defaultValue": { "int32Values": [ "GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1" ] } }
Para leer esta propiedad desde una app para Android, usa CarPropertyManager.getIntProperty
.
- En Android 13 y versiones posteriores, usa
VehiclePropertyIds.GENERAL_SAFETY_REGULATION_COMPLIANCE
como ID de propiedad. - En Android 12, usa el valor codificado de 0x11400F47 como ID de propiedad. Esta propiedad requiere el permiso
Car#PERMISSION_CAR_INFO
.