Propiedades especiales

Propiedades del proveedor

Para admitir las necesidades específicas de los socios, el VHAL permite propiedades del proveedor a las que solo se puede acceder a través de las APIs del sistema. Usa los siguientes lineamientos cuando trabajes con propiedades de proveedores:

  • Siempre intenta usar primero las propiedades del sistema; las propiedades del proveedor deben usarse como último recurso cuando ninguna de las propiedades del sistema cumple con tu requisito.
  • Para evitar la fragmentación del ecosistema, no se deben usar las propiedades del proveedor para replicar las propiedades del vehículo que ya existen en el SDK VehiclePropertyIds. Para obtener más información, consulta la sección 2.5, Requisitos de la industria automotriz en el CDD.
  • Usa los siguientes campos para generar el ID de la propiedad:
    • El grupo VehiclePropertyGroup:VENDOR VENDOR solo se usa 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. El envío de macrodatos con frecuencia a través de propiedades del proveedor puede ralentizar el acceso a la red del vehículo. Ten cuidado cuando agregues una carga útil grande.
    • Property ID Elige un ID de dos bytes único para la propiedad del proveedor. Por ejemplo, 0x1234.
  • Completa VehiclePropConfig.configString con una breve descripción del proveedor. propiedad. Esto permite que las herramientas de verificación de validez marquen la replicación accidental de datos existentes propiedades del vehículo. Por ejemplo, "Mi propiedad personalizada para XYZ".
  • Acceso a través de CarPropertyManager (para componentes de Java) o a través de la libvhalclient (para anuncios nativos). Lo que debes hacer No modifiques otras APIs de vehículos, ya que hacerlo podría generar problemas de compatibilidad en el futuro.

Permiso de propiedades del proveedor

El permiso predeterminado para cualquier propiedad definida del proveedor es android.car.Car.PERMISSION_VENDOR_EXTENSION Para obtener un mayor nivel de detalle en el control de permisos, admite la propiedad SUPPORT_CUSTOMIZE_VENDOR_PERMISSION. Esta ESTÁTICA es de solo lectura, para el cual su array de configuración especifica los permisos para las propiedades del proveedor. configArray se establece de la siguiente manera (i es un número entero que comienza desde 0):

  • configArray[3 * i] propId, el ID de la propiedad del proveedor.
  • configArray[3 * i + 1] Una enumeración en VehicleVendorPermission.aidl para indicar permiso para leer el valor de la propiedad.
  • configArray[3 * i + 2] Una enumeración en VehicleVendorPermission.aidl para indicar permiso para escribir el valor de la propiedad.

Por ejemplo, el siguiente array de configuración configura dos propiedades del proveedor, vendor_prop_1 y vendor_prop_2, para que tengan los permisos:

  • vendor_prop_1 requiere android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_SEAT para leer y android.car.hardware.property.VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_SEAT para escribir.
  • vendor_prop-2 requiere android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_INFO para la lectura y no se puede escribir en apps para Android.
configArray = {
  PERMISSION_SET_VENDOR_CATEGORY_SEAT
    vendor_prop_2, PERMISSION_GET_VENDOR_CATEGORY_INFO, PERMISSION_NOT_ACCESSIBLE
}

Las propiedades de proveedores que no se encuentran en este array toman el permiso de proveedor predeterminado. Cuándo PERMISSION_NOT_ACCESSIBLE está seleccionada, 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 Propiedades de vehículos ADAS.

ASIENTO Y DIRECCIÓN

Consulta Propiedades del asiento y el volante.

HVAC

Puedes usar el VHAL para controlar el sistema de HVAC configurando propiedades relacionadas con él. La mayoría de las propiedades de HVAC están asociadas con áreas particulares del vehículo, aunque varias son propiedades globales. Estas son algunas propiedades definidas de ejemplo:

Propiedad Propósito
HVAC_TEMPERATURE_SET Configura la temperatura según el ID de área.
HVAC_POWER_ON El estado de alimentación 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 aparecer en el array de configuración HVAC_POWER_ON. Para ver una lista completa de las propiedades de HVAC, busca HVAC_* en VehicleProperty.aidl, consulta Propiedades del sistema compatibles. propiedades.

Reglas para asignar propiedades de HVAC de tipo VehicleArea que no sean GLOBAL a AreaIDs: Cada "área" para un tipo VehicleArea específico que se vea afectado por la propiedad se debe incluir en un ID de área para esa propiedad. Los controles de temperatura se asignan a los asientos que “influyen más”, pero cada asiento afectado se debe incluir exactamente una vez. La asignación del asiento trasero central al AreaID izquierdo o derecho puede parecer arbitraria, pero la inclusión de todos los asientos afectados en exactamente un AreaID garantiza que todos los asientos del automóvil se expresen y que haya 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 cada el lado del conductor y el lado del pasajero. Un conjunto válido de asignaciones de AreaIDs para HVAC_TEMPERATURE_SET sería un array de dos elementos:

  • ROW_1_LEFT | FILA_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 | FILA_2_LEFT
  • ROW_1_RIGHT | ROW_2_RIGHT

Ejemplo 2

Un auto tiene tres filas de asientos con dos asientos en la primera fila (ROW_1_LEFT, ROW_1_RIGHT) y tres bancas en la segunda (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) y tercera fila (ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT) Hay tres unidades de control de temperatura, una para el lado del conductor, una para el lado del pasajero y una 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
  • FILA_2_IZQUIERDA | FILA_2_CENTRAL | FILA_2_DERECHA | FILA_3_IZQUIERDA | FILA_3_CENTRAL | FILA_3_DERECHA

Ejemplo 3

Un automóvil tiene dos asientos delanteros (ROW_1_LEFT, ROW_1_RIGHT) y tres traseros. (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) Supongamos que el automóvil 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 único array de elementos:

  • ROW_1_LEFT | ROW_1_RIGHT

Si HVAC_AUTO_ON tuviera dos unidades de control separadas para el lado del conductor y el 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.

Figura 1: Dimensiones exteriores del vehículo, vista frontal.
Figura 2: Dimensiones exteriores del vehículo, vista lateral.

Usa las propiedades que se describen en esta tabla para definir las dimensiones exteriores de un vehículo.

Propiedad del vehículo Campo 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 de forma normal.
Duración int32Values[1] Distancia horizontal entre los puntos más externos del frente y el trasero del vehículo
Ancho, sin 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] Es la distancia entre el centro de las ruedas delanteras y traseras del vehículo.
Ancho de vía, delantero int32Values[5] Es la distancia entre la rueda delantera, medida desde la línea central de la banda de rodadura de un neumático hasta la línea central de la banda de rodadura del neumático opuesto.
Ancho de vía, atrás int32Values[6] Es la distancia entre la rueda trasera, medida desde la línea central de la banda de rodadura de un neumático hasta la línea central de la banda de rodadura del neumático opuesto.
Diámetro de giro de cuneta a cuneta int32Values[7] Es el 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 de las reglamentaciones de seguridad general de la Unión Europea

Si el vehículo debe cumplir con los requisitos de la Reglamentación General de Seguridad (GSR) de la Unión Europea a través de Android, la propiedad GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT debe ser compatibles. Un ejemplo de caso de uso es GSR-ISA (Asistente de velocidad inteligente), como se define en la UE Reglamento 2019/2144 Esta propiedad se agregó en la VHAL de AIDL de Android 13, pero con Car Service desde el lanzamiento de Android 12. Esta propiedad se define como una propiedad de número entero global estático 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 la GSR
GSR_COMPLIANCE_REQUIRED_V1 1 El cumplimiento de GSR es obligatorio y la versión requerida de la solución es 1.

Para admitir esta propiedad en el VHAL de HIDL (en Android 12), los proveedores deben codificar el ID de propiedad. Por ejemplo, en el siguiente fragmento, se muestra cómo se admite esto en el VHAL de HIDL de referencia 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 AIDL VHAL (a partir de Android 13), los proveedores pueden usar el ID de la propiedad de VehicleProperty.h y la enumeración de GsrComplianceRequirementType.h. Para (por ejemplo, como referencia del VHAL del AIDL) 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.