Implementação de referência

Fornecemos uma implementação de referência para o AIDL VHAL. O thread de serviço principal é implementado em VehicleService.cpp . A implementação da interface VHAL está localizada em DefaultVehicleHal.cpp .

A implementação de referência é baseada em uma arquitetura de duas camadas. Na camada superior, DefaultVehicleHal , implementa a interface VHAL AIDL e fornece lógica VHAL genérica para todos os dispositivos de hardware. Na camada inferior, FakeVehicleHardware implementa a interface IVehicleHardware . Esta classe simula a lógica VHAL de interação com o hardware real ou barramento do veículo e é específica do dispositivo. Opcionalmente, os fornecedores podem adaptar essa mesma arquitetura, reutilizar a mesma classe DefaultVehicleHal (estendendo-a para substituir um método) e fornecer sua própria implementação IVehicleHardware .

Implementação de referência VHAL
Figura 1. Implementação de referência VHAL

DefaultVehicleHal contém a seguinte lógica, que é considerada genérica e pode ser aplicada a qualquer implementação VHAL.

  • Implementa a interface IVehicle .
  • Executa verificações básicas de entrada, incluindo uma verificação de IDs duplicados.
  • Aloca objetos de cliente (por exemplo, GetValuesClient ) para cada operação de cada cliente fichário e adiciona cada um a um pool global.
  • Gerencia a lógica de retornos de chamada assíncronos, como adicionar uma solicitação pendente a um pool de solicitações pendentes. Resolve solicitações pendentes quando recebemos os resultados ou retorna erro quando uma das solicitações pendentes expira.
  • Serializa e desserializa LargeParcelable (consulte ParcelableUtils.h ).
  • Gerencia assinatura (consulte SubscriptionManager.h ).
  • Verifica as permissões. (Veja as funções checkReadPermission e checkWritePermission ).
  • Chama IVehicleHardware.checkHealth periodicamente e envia sinais de pulsação (consulte a função checkHealth ).

IVehicleHardware é uma interface genérica usada para representar uma implementação específica de hardware de um VHAL. A implementação de referência para IVehicleHardware é FakeVehicleHardware , que usa um mapa na memória para armazenar o valor da propriedade e não se comunica com um barramento de veículo real. Ele foi projetado para ser executado em um emulador e não possui dependências específicas de hardware. As implementações do fornecedor não devem usá-lo como estão e devem adicionar lógica específica ao barramento do veículo.

No Android 14, FakeVehicleHardware lê a configuração da propriedade suportada em tempo de execução durante a inicialização da pasta /vendor/etc/automotive/vhalconfig/ do dispositivo, que contém um arquivo de configuração no estilo JSON. Consulte o arquivo VHAL README de referência para obter o formato do arquivo de configuração e o conteúdo do arquivo de configuração.

FakeVehicleHardware também suporta substituição de arquivo de configuração para teste. Se a propriedade do sistema persist.vendor.vhal_init_value_override estiver definida, ele usará o arquivo de configuração da pasta /vendor/etc/automotive/vhaloverride/ no dispositivo para substituir a configuração existente. Uma implementação de fornecedor pode usar uma abordagem semelhante para que a configuração de propriedade suportada por VHAL não seja codificada e possa ser decidida dinamicamente no momento do início. A configuração da propriedade do veículo deve ser estática quando o dispositivo for iniciado.