Implementación de referencia

Proporcionamos una implementación de referencia para AIDL VHAL. El hilo de servicio principal se implementa en VehicleService.cpp . La implementación de la interfaz VHAL se encuentra en DefaultVehicleHal.cpp .

La implementación de referencia se basa en una arquitectura de dos capas. En la capa superior, DefaultVehicleHal , implementa la interfaz VHAL AIDL y proporciona lógica VHAL genérica para todos los dispositivos de hardware. En la capa inferior, FakeVehicleHardware , implementa la interfaz IVehicleHardware . Esta clase simula la lógica VHAL de interactuar con el hardware real o el bus del vehículo y es específica del dispositivo. Opcionalmente, los proveedores pueden adaptar esta misma arquitectura, reutilizar la misma clase DefaultVehicleHal (ampliándola para sobrescribir un método) y proporcionar su propia implementación IVehicleHardware .

Implementación de referencia VHAL
Figura 1. Implementación de referencia VHAL

DefaultVehicleHal contiene la siguiente lógica, que se considera genérica y puede aplicarse a cualquier implementación de VHAL.

  • Implementa la interfaz IVehicle .
  • Realiza comprobaciones de entrada básicas, incluida una verificación de identificaciones duplicadas.
  • Asigna objetos de cliente (por ejemplo, GetValuesClient ) para cada operación de cada cliente de cuaderno y los agrega a un grupo global.
  • Administra la lógica de devoluciones de llamadas asíncronas, como agregar una solicitud pendiente a un grupo de solicitudes pendientes. Resuelve solicitudes pendientes cuando recibimos los resultados o devuelve un error cuando una de las solicitudes pendientes expira.
  • Serializa y deserializa LargeParcelable (consulte ParcelableUtils.h ).
  • Gestiona la suscripción (consulte SubscriptionManager.h ).
  • Comprueba los permisos. (Consulte las funciones checkReadPermission y checkWritePermission ).
  • Llama periódicamente a IVehicleHardware.checkHealth y envía señales de latido (consulte la función checkHealth ).

IVehicleHardware es una interfaz genérica que se utiliza para representar la implementación específica de hardware de un VHAL. La implementación de referencia para IVehicleHardware es FakeVehicleHardware , que utiliza un mapa en memoria para almacenar el valor de la propiedad y no se comunica con un bus de vehículo real. Está pensado para ejecutarse en un emulador y no tener dependencias específicas de hardware. Las implementaciones de los proveedores no deben usarlo tal como está y deben agregar una lógica específica del bus del vehículo.

En Android 14, FakeVehicleHardware lee la configuración de propiedades admitidas en tiempo de ejecución durante la inicialización desde la carpeta /vendor/etc/automotive/vhalconfig/ del dispositivo, que contiene un archivo de configuración de estilo JSON. Consulte el archivo VHAL README de referencia para conocer el formato del archivo de configuración y el contenido del archivo de configuración.

FakeVehicleHardware también admite la anulación de archivos de configuración para realizar pruebas. Si la propiedad del sistema persist.vendor.vhal_init_value_override está configurada, utiliza el archivo de configuración de la carpeta /vendor/etc/automotive/vhaloverride/ en el dispositivo para anular la configuración existente. La implementación de un proveedor puede utilizar un enfoque similar para que la configuración de propiedades admitidas por VHAL no esté codificada y pueda decidirse dinámicamente en el momento del inicio. La configuración de propiedades del vehículo debe ser estática una vez que se inicia el dispositivo.