Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Propiedades del vehículo

La interfaz de abstracción de hardware de vehículo (Capa de Vhal) define las propiedades de los fabricantes de equipos pueden implementar y contiene metadatos propiedad (por ejemplo, si la propiedad es un int y se permite que modos de cambio). La interfaz VHAL se basa en acceder (leer, escribir, suscribir) una propiedad, que es una abstracción para una función específica.

Interfaces HAL

El VHAL utiliza las siguientes interfaces:

  • getAllPropConfigs() genera (vec<VehiclePropConfig>propConfigs)
    Enumere la configuración de todas las propiedades admitidas por VHAL. CarService usa solo propiedades admitidas.
  • getPropConfigs(vec<int32_t> props) genera (StatusCode status,vec<VehiclePropConfig> propConfigs);
    Devuelve la configuración de las propiedades seleccionadas.
  • set(VehiclePropValue propValue) genera (StatusCodestatus);
    Escribe un valor en la propiedad. El resultado de la escritura se define por propiedad.
  • subscribe(IVehicleCallback callback, vec<SubscribeOptions> options) genera (StatusCode status);
    Comience a monitorear un cambio en el valor de una propiedad. Para la propiedad dividida en zonas, unsubscribe(IVehicleCallback callback, int32_t propId) genera (StatusCode status);

El VHAL utiliza las siguientes interfaces de devolución de llamada:

  • oneway onPropertyEvent(vec<VehiclePropValue>propValues);
    Notifica el cambio de valor de la propiedad del vehículo. Debe hacerse solo para propiedades suscritas.
  • oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
    Devuelve el error de nivel de VHAL global o el error por propiedad. El error global hace que el HAL se reinicie, lo que puede provocar el reinicio de otros componentes (incluidas las aplicaciones).

Propiedades del vehículo

Las propiedades pueden ser de solo lectura, de solo escritura (se utilizan para pasar información al nivel VHAL) o de lectura y escritura (la compatibilidad con la mayoría de las propiedades es opcional). Cada propiedad se identifica de forma única por una clave de int32 y tiene un tipo predefinido ( value_type ):

  • BYTES
  • BOOLEAN
  • EPOCH_TIME
  • FLOAT
  • FLOAT[]
  • INT32
  • INT32[]
  • INT64
  • INT64[]
  • STRING
  • MIXED

Una propiedad dividida en zonas puede tener más de un valor, según el número de zonas admitidas por la propiedad.

Tipos de área

El VHAL define múltiples tipos de áreas:

Tipo de área Descripción
GLOBAL Esta propiedad es un singleton y no tiene varias áreas.
WINDOW Área basada en ventanas, utiliza VehicleAreaWindow enumeración.
MIRROR Área basado en espejos, utiliza VehicleAreaMirror enumeración.
SEAT Área basada en los asientos, utiliza VehicleAreaSeat enumeración.
DOOR Área en base a las puertas, utiliza VehicleAreaDoor enumeración.
WHEEL Área en base a las ruedas, utiliza VehicleAreaWheel enumeración.

Cada propiedad dividida en zonas debe utilizar un tipo de área predefinida. Cada tipo de área tiene un conjunto de indicadores de bits definidos en una enumeración para el tipo de área. Por ejemplo, el SEAT área define VehicleAreaSeat enumeraciones:

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

ID de área

Las propiedades zonales se abordan a través de ID de área. Cada propiedad zonificada puede admitir uno o más ID de área. Un ID de área se compone de uno o más indicadores de su respectiva enumeración. Por ejemplo, una propiedad utilizando VehicleAreaSeat podría utilizar el siguiente ID de Área:

Artículo Descripción
ROW_1_LEFT | ROW_1_RIGHT La identificación de área se aplica a ambos asientos delanteros.
ROW_2_LEFT Se aplica solo al asiento trasero izquierdo.
ROW_2_RIGHT Se aplica solo al asiento trasero derecho.

Estado de la propiedad

Cada valor de la propiedad viene con un VehiclePropertyStatus valor. Esto indica el estado actual de la propiedad:

Artículo Descripción
AVAILABLE La propiedad está disponible y el valor es válido.
UNAVAILABLE El valor de la propiedad no está disponible actualmente. Se utiliza para funciones deshabilitadas transitoriamente para una propiedad admitida.
ERROR Algo anda mal con esta propiedad.

Configurar una propiedad

Utilice VehiclePropConfig para proporcionar información de configuración para cada propiedad. La información incluye:

Variable Descripción
access r , w , rw
changeMode Representa cómo se monitorea una propiedad, en cambios versus continuos.
areaConfigs areaId , min y max valores.
configArray Parámetros de configuración adicionales.
configString Información adicional transmitida como una cadena.
minSampleRate maxSampleRate
prop ID de propiedad, int

Propiedades de la zona de manipulación

Una propiedad zonificada es equivalente a una colección de múltiples propiedades donde se puede acceder a cada subpropiedad con el valor de ID de área especificado.

  • get llamamiento a la propiedad zonificada siempre incluye el ID de la zona en la solicitud. Por lo tanto, solo se devuelve el valor actual para la ID de área solicitada. Si la propiedad es global, el ID de área es 0.
  • set llamado a la propiedad zonificada siempre incluye el ID de la zona en la solicitud. Por lo tanto, solo se cambia la ID de área solicitada.
  • subscribe llamada genera eventos para todos los id de zona para la propiedad.

Recibir llamadas

Durante la inicialización, es posible que el valor de la propiedad no esté disponible todavía, ya que aún no se ha recibido el mensaje de red del vehículo correspondiente. En tales casos, el get llamada debe volver -EAGAIN . Algunas propiedades (como HVAC) tienen una propiedad de encendido / apagado separada. Llamando get para este tipo de propiedad (si está apagada) debe devolver un UNAVAILABLE estado en lugar de devolver un error. Por ejemplo, obtenga la temperatura de HVAC

Ejemplo de VHAL get HVAC

Figura 1. Obtenga la temperatura de HVAC (CS = CarService, VHAL = Vehicle HAL)

Establecer llamadas

Un set de llamadas es una operación asincrónica que implica la notificación de eventos después de realizar un cambio solicitado. En una operación típica, un set de llamadas a clientes potenciales hacer una solicitud de cambio a través de la red de vehículos. Algunos set llamadas pueden requerir datos iniciales para estar listo, pero durante la inicialización, estos datos pueden no estar disponibles todavía. En tales casos, el set llamada debe volver -EAGAIN . Algunas propiedades con alimentación independiente de encendido / apagado deben volver -ESHUTDOWN cuando la propiedad está apagado y la unidad no se puede hacer. Hasta set se hace efectiva, get no devuelve necesariamente el mismo valor que lo que está establecido. Por ejemplo, set HVAC Temperature .

Ejemplo de VHAL set HVAC

La Figura 2. Configure la temperatura de HVAC (CS = CarService, VHAL = Vehicle HAL)

Manejo de propiedades personalizadas

Para respaldar las necesidades específicas de los socios, VHAL permite propiedades personalizadas que están restringidas a las aplicaciones del sistema. Utilice las siguientes pautas cuando trabaje con propiedades personalizadas:

  • El ID de propiedad debe generarse utilizando los siguientes campos:
    • VehiclePropertyGroup:VENDOR
      El VENDOR grupo se utiliza sólo para las propiedades personalizadas.
    • VehicleArea
      Seleccione un tipo de área apropiado.
    • VehiclePropertyType
      Seleccione el tipo de datos adecuado. BYTES tipo permite el paso de los datos sin procesar que es suficiente en la mayoría de los casos. Enviar macrodatos con frecuencia a través de propiedades personalizadas puede ralentizar el acceso a la red de vehículos completos; tenga cuidado al agregar una gran carga útil.
    • Property ID
      Elija un ID de cuatro nibble para la propiedad personalizada.
  • Para evitar la fragmentación de los ecosistemas, propiedades personalizadas no se deben utilizar para propiedades de vehículos replicadas que ya existen en la ( VehiclePropertyIds SDK).
  • Rellene VehiclePropConfig.configString con una breve descripción de la propiedad personalizada. Esto permite que las herramientas de control de cordura marquen la replicación accidental de propiedades de vehículos existentes. Por ejemplo, "estado de luz de peligro".
  • El acceso a través CarPropertyManager (para componentes Java) oa través de la API de vehículos de servicio de red (por nativo). No modifique las API de otros automóviles, ya que hacerlo puede generar problemas de compatibilidad en el futuro.
  • Después de la aplicación de las propiedades de los proveedores, seleccionar sólo la lista de permisos en el VehicleVendorPermission enumeración de las propiedades de los proveedores. La asignación de los permisos de los proveedores a las propiedades del sistema romperá el CTS y el VTS.

Manejo de las propiedades de HVAC

Puede usar el VHAL para controlar HVAC estableciendo propiedades relacionadas con HVAC. La mayoría de las propiedades de HVAC son propiedades divididas en zonas, aunque varias son propiedades no divididas en zonas (globales). Las propiedades definidas de muestra incluyen:

Propiedad Objetivo
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET Configure la temperatura por zona.
VEHICLE_PROPERTY_HVAC_RECIRC_ON Control de recirculación por zona.

Para ver una lista completa de las propiedades de HVAC, buscar VEHICLE_PROPERTY_HVAC_* en types.hal . Cuando la propiedad de climatización utiliza VehicleAreaSeat , se aplican reglas adicionales para mapear una propiedad de climatización por zonas a la zona de los ID. Cada asiento disponible en el automóvil debe ser parte de un ID de área en la matriz de ID de área.

Ejemplo uno. Un coche tiene dos asientos delanteros ( ROW_1_LEFT, ROW_1_RIGHT ) y tres asientos traseros ( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT ). El automóvil tiene dos unidades de control de temperatura: el lado del conductor y el lado del pasajero.

  • Un mapeo válida conjunto de la zona ID para HVAC_TEMPERATURE SET es:
    • 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 es:
    • ROW_1_LEFT | ROW_2_LEFT | ROW_2_CENTER
    • ROW_1_RIGHT | ROW_2_RIGHT

Ejemplo dos. Un coche tiene tres filas de asientos con dos asientos de la primera fila ( ROW_1_LEFT, ROW_1_RIGHT ), tres asientos en la segunda ( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT ), y tres en la tercera fila ( ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT ). El automóvil tiene tres unidades de control de temperatura: lado del conductor, lado del pasajero y parte trasera. Una forma razonable de mapa HVAC_TEMPERATURE_SET a la zona de IDs es como una matriz 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

Manejo de las propiedades del sensor

Las propiedades del sensor VHAL representan datos reales del sensor o información de políticas, como el estado de conducción. Cualquier aplicación puede acceder a cierta información del sensor (como el estado de conducción y el modo día / noche) sin restricciones, ya que los datos son obligatorios para crear una aplicación de vehículo segura. Otra información del sensor (como la velocidad del vehículo) es más sensible y requiere permisos específicos que los usuarios pueden administrar.

Ver las propiedades del sensor compatibles (en types.hal ).

Servicio de mapas de vehículos

El vehículo de servicio de mapas (SLB) proporciona un mecanismo para el intercambio de datos de mapa entre los clientes a través de una interfaz de pub / sub para apoyar las características del vehículo comunes, tales como los sistemas de asistencia al conductor (ADAS) . Los clientes pueden incluir sistemas de vehículos interconectados a través de la propiedad VMS en VHAL o aplicaciones Android privilegiadas. Los datos compartidos en VMS están destinados a estar limitados a datos de mapas para su uso por sistemas de vehículos y aplicaciones de soporte.

VMS está diseñado para usarse solo en implementaciones de Android Automotive; AOSP no contiene clientes predeterminados que publiquen o se suscriban a VMS. Para la propiedad VMS en el Vhal, se describen los tipos de mensajes y las estructuras de datos en Vhal 2.0 en el VmsMessageType enum, que enumera los tipos de mensajes SLB compatibles. Esta enumeración se usa como el primer número entero en la matriz de números enteros de la propiedad del vehículo y determina cómo se decodifica el resto del mensaje.