Fornecemos uma
implementação de referência
para a VHAL da AIDL. A linha de execução de serviço principal é implementada
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 AIDL VHAL e fornece a lógica VHAL
genérica para todos os dispositivos de hardware. Na camada inferior, FakeVehicleHardware
,
implementa a interface IVehicleHardware
. Essa classe simula a lógica VHAL de interagir com hardware real ou barramento de veículo e é específica do dispositivo. Os fornecedores também podem adaptar essa mesma arquitetura, reutilizar a mesma classe DefaultVehicleHal
(estendendo-a para substituir um método) e fornecer a própria implementação de IVehicleHardware
.
DefaultVehicleHal
contém a lógica a seguir, que é considerada genérica e pode ser aplicada a qualquer implementação
do VHAL.
- Implementa a interface
IVehicle
. - Realiza 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 de vinculação e adiciona cada um a um pool global. - Gerencia a lógica de callbacks 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 um erro quando uma das solicitações pendentes expira.
- Serializa e desserializa
LargeParcelable
(consulteParcelableUtils.h
). - Gerencia a assinatura (consulte
SubscriptionManager.h
). - Verifica as permissões. Consulte as funções
checkReadPermission
echeckWritePermission
. - Chama periodicamente IVehicleHardware.checkHealth e envia sinais de batimento cardíaco (consulte a
função
checkHealth
).
IVehicleHardware
é uma interface genérica usada para representar a implementação específica
de hardware de uma 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 ônibus real. Ele é destinado a ser executado em um emulador e não tem
dependências específicas de hardware. As implementações do fornecedor não podem usá-lo como está e precisam adicionar
a lógica específica da bus do veículo.
No Android 14, FakeVehicleHardware
lê a configuração de propriedade com suporte no tempo de execução
durante a inicialização na pasta /vendor/etc/automotive/vhalconfig/
do dispositivo,
que contém um arquivo de configuração no estilo JSON. Consulte o
arquivo de referência README da VHAL
para ver o formato e o conteúdo do arquivo de configuração.
O FakeVehicleHardware
também oferece suporte à substituição do arquivo de configuração para testes. Se a
propriedade do sistema persist.vendor.vhal_init_value_override
estiver definida, ela usará o arquivo
de configuração da pasta /vendor/etc/automotive/vhaloverride/
no dispositivo para substituir
a configuração atual. Uma implementação do fornecedor pode usar uma abordagem semelhante para que a configuração de propriedade
compatível com o VHAL não seja codificada e possa ser decidida dinamicamente no início.
A configuração da propriedade do veículo precisa ser estática quando o dispositivo é iniciado.