Propiedades especiales

Propiedades del proveedor

Para satisfacer las necesidades específicas de los socios, VHAL permite propiedades de proveedores a las que se accede únicamente a través de las API del sistema. Utilice las siguientes pautas cuando trabaje con propiedades de proveedores:

  • Intente siempre utilizar las propiedades del sistema primero; las propiedades del proveedor deben usarse como último recurso cuando ninguna de las propiedades del sistema satisface sus necesidades.
  • Para evitar la fragmentación del ecosistema, las propiedades del proveedor no se deben utilizar para replicar propiedades del vehículo que ya existen en el SDK VehiclePropertyIds . Para obtener más información, consulte la Sección 2.5, Requisitos automotrices en la CDD.
  • Utilice los siguientes campos para generar el ID de propiedad:
    • VehiclePropertyGroup:VENDOR El grupo VENDOR se utiliza solo para propiedades de proveedores.
    • VehicleArea Seleccione un tipo de área apropiado.
    • VehiclePropertyType Seleccione el tipo de datos adecuado. El tipo BYTES permite pasar datos sin procesar, lo cual es suficiente en la mayoría de los casos. El envío frecuente de big data a través de las propiedades de los proveedores puede ralentizar el acceso a toda la red de vehículos. Tenga cuidado al agregar una carga útil grande.
    • Property ID Elija una ID única de dos bytes para la propiedad del proveedor. Por ejemplo, 0x1234.
  • Complete 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".
  • Acceso a través de CarPropertyManager (para componentes Java) o mediante libvhalclient (para nativos). No modifique las API de otros automóviles, ya que hacerlo puede generar problemas de compatibilidad en el futuro.

Permiso de propiedades del proveedor

El permiso predeterminado para cualquier propiedad de proveedor definida es android.car.Car.PERMISSION_VENDOR_EXTENSION . Para una mayor granularidad del control de permisos, admita la propiedad SUPPORT_CUSTOMIZE_VENDOR_PERMISSION . Esta propiedad ESTÁTICA es de solo lectura, por lo que su matriz de configuración especifica los permisos para las propiedades del proveedor. El configArray se establece de la siguiente manera (i es un número entero que comienza en 0):

  • configArray[3 * i] propId, el ID de propiedad 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, la siguiente matriz de configuración configura dos propiedades de proveedor, vendor_prop_1 y vendor_prop_2 , para tener los permisos:

  • vendor_prop_1 requiere android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_SEAT para leer, 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 leer y no se puede escribir en aplicaciones de Android.
configArray = {
  PERMISSION_SET_VENDOR_CATEGORY_SEAT
    vendor_prop_2, PERMISSION_GET_VENDOR_CATEGORY_INFO, PERMISSION_NOT_ACCESSIBLE
}

Las propiedades de proveedor que no están en esta matriz obtienen el permiso de proveedor predeterminado. Cuando se selecciona PERMISSION_NOT_ACCESSIBLE , las aplicaciones de Android no pueden acceder a la propiedad. En el ejemplo, las aplicaciones de Android no pueden escribir un valor para vendor_prop_2 . Sólo los clientes VHAL nativos pueden escribir en esta propiedad.

Sistemas avanzados de asistencia al conductor (ADAS)

Consulte Propiedades del vehículo ADAS .

ASIENTO y DIRECCIÓN

Consulte Propiedades del asiento y el volante .

climatización

Puede utilizar VHAL para controlar HVAC configurando propiedades relacionadas con HVAC. La mayoría de las propiedades de HVAC están asociadas con áreas particulares del vehículo, aunque varias son propiedades globales. Las propiedades definidas de ejemplo incluyen:

Propiedad Objetivo
HVAC_TEMPERATURE_SET Establezca la temperatura por ID de área.
HVAC_POWER_ON El estado de energía del sistema HVAC por ID de área.

Para las propiedades de HVAC que dependen del estado de energía del sistema HVAC, deben aparecer en la lista de configuración HVAC_POWER_ON . Para ver una lista completa de propiedades de HVAC, busque HVAC_* en VehicleProperty.aidl , consulte Propiedades del sistema admitidas . propiedades.

Reglas para asignar propiedades HVAC de tipo VehicleArea no GLOBALES a AreaID: Cada “área” para un tipo VehicleArea específico que se ve afectada por la propiedad debe incluirse en un ID de área para esa propiedad. Los controladores de temperatura se asignan a los asientos en los que "influyen más", 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 todos los asientos del automóvil se expresen y que esté disponible una forma razonable de afectar a 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 mapeo válido de AreaID para HVAC_TEMPERATURE_SET sería una matriz 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:

  • 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, una para el lado del pasajero y una para la parte trasera. Una forma razonable de asignar HVAC_TEMPERATURE_SET a AreaID es una matriz de tres elementos:

  • ROW_1_LEFT
  • ROW_1_RIGHT
  • ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | FILA_3_CENTRO | 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 automóvil admite HVAC_AUTO_ON solo para los dos asientos delanteros. Un conjunto de mapeo válido de AreaID para HVAC_AUTO_ON sería una matriz 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, un mapeo alternativo sería una matriz de dos elementos:

  • ROW_1_LEFT
  • ROW_1_RIGHT

Cumplimiento de la normativa general de seguridad de la Unión Europea

Si el vehículo debe cumplir con los requisitos del Reglamento general de seguridad (GSR) de la Unión Europea a través de Android, se debe admitir la propiedad GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT . Un caso de uso de ejemplo es GSR-ISA (Asistencia de velocidad inteligente) tal como se define en el Reglamento de la UE 2019/2144. Esta propiedad se agrega en AIDL VHAL desde Android 13, sin embargo, es compatible con Car Service desde el lanzamiento de Android 12. Esta propiedad se define como una propiedad entera global estática de solo lectura, con valores posibles definidos por la enumeración GsrComplianceRequirementType :

Nombre 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 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 el ID de la propiedad. Por ejemplo, el siguiente fragmento muestra cómo se admite esto en la referencia HIDL VHAL 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 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 aplicación de Android, use CarPropertyManager.getIntProperty .