A interface Vehicle Hardware Abstraction Layer (VHAL) define as propriedades que os OEMs podem implementar e contém metadados de propriedade (por exemplo, se a propriedade é um int e quais modos de alteração são permitidos). A interface VHAL é baseada em acessar (ler, escrever, assinar) uma propriedade, que é uma abstração para uma função específica.
Interfaces HAL
O VHAL usa as seguintes interfaces:
-
getAllPropConfigs()
gera(vec<VehiclePropConfig>propConfigs)
Liste a configuração de todas as propriedades suportadas pelo VHAL. CarService usa apenas propriedades suportadas. -
getPropConfigs(vec<int32_t> props)
gera(StatusCode status,vec<VehiclePropConfig> propConfigs);
Retorna a configuração das propriedades selecionadas. -
set(VehiclePropValue propValue)
gera(StatusCodestatus);
Escreva um valor para a propriedade. O resultado da gravação é definido por propriedade. -
subscribe(IVehicleCallback callback, vec<SubscribeOptions> options)
gera(StatusCode status);
Comece a monitorar uma mudança no valor da propriedade. Para propriedade zoneada,unsubscribe(IVehicleCallback callback, int32_t propId)
gera(StatusCode status);
O VHAL usa as seguintes interfaces de retorno de chamada:
-
oneway onPropertyEvent(vec<VehiclePropValue>propValues);
Notifica a alteração do valor do imóvel do veículo. Deve ser feito apenas para propriedades inscritas. -
oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
Retornar erro global de nível VHAL ou erro por propriedade. O erro global faz com que o HAL seja reiniciado, o que pode levar à reinicialização de outros componentes (incluindo aplicativos).
Propriedades do veículo
As propriedades podem ser somente leitura, somente gravação (usadas para passar informações para o nível VHAL) ou leitura e gravação (o suporte da maioria das propriedades é opcional). Cada propriedade é identificada exclusivamente por uma chave int32 e possui um tipo predefinido ( value_type
):
-
BYTES
-
BOOLEAN
-
EPOCH_TIME
-
FLOAT
-
FLOAT[]
-
INT32
-
INT32[]
-
INT64
-
INT64[]
-
STRING
-
MIXED
Uma propriedade zoneada pode ter mais de um valor, com base no número de zonas suportadas pela propriedade.
Tipos de área
O VHAL define vários tipos de área:
Tipo de área | Descrição |
---|---|
GLOBAL | Esta propriedade é um singleton e não possui várias áreas. |
WINDOW | Área baseada em janelas, usa a enumeração VehicleAreaWindow . |
MIRROR | Área baseada em espelhos, usa a enumeração VehicleAreaMirror . |
SEAT | Área baseada em assentos, usa a enumeração VehicleAreaSeat . |
DOOR | Área baseada em portas, usa a enumeração VehicleAreaDoor . |
WHEEL | Área baseada em rodas, usa a enumeração VehicleAreaWheel . |
Cada propriedade zoneada deve usar um tipo de área predefinido. Cada tipo de área tem um conjunto de sinalizadores de bits definidos em uma enumeração para o tipo de área. Por exemplo, a área SEAT
define enumerações VehicleAreaSeat
:
-
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
- ...
IDs de área
As propriedades zoneadas são endereçadas por meio de IDs de área. Cada propriedade zoneada pode oferecer suporte a uma ou mais IDs de área. Um ID de área é composto por um ou mais sinalizadores de sua respectiva enumeração. Por exemplo, uma propriedade que usa VehicleAreaSeat
pode usar os seguintes IDs de área:
Item | Descrição |
---|---|
ROW_1_LEFT | ROW_1_RIGHT | O ID de área se aplica a ambos os bancos dianteiros. |
ROW_2_LEFT | Aplica-se apenas ao banco traseiro esquerdo. |
ROW_2_RIGHT | Aplica-se apenas ao banco traseiro direito. |
Status da propriedade
Cada valor de propriedade vem com um valor VehiclePropertyStatus
. Isso indica o status atual da propriedade:
Item | Descrição |
---|---|
AVAILABLE | A propriedade está disponível e o valor é válido. |
UNAVAILABLE | O valor da propriedade está indisponível no momento. Usado para recursos desativados temporariamente para uma propriedade com suporte. |
ERROR | Algo está errado com esta propriedade. |
Configurando uma propriedade
Use VehiclePropConfig
para fornecer informações de configuração para cada propriedade. As informações incluem:
Variável | Descrição |
---|---|
access | r , w , rw |
changeMode | Representa como uma propriedade é monitorada, em mudança versus contínua. |
areaConfigs | valores de areaId , min e max . |
configArray | Parâmetros de configuração adicionais. |
configString | Informações adicionais passadas como uma string. |
minSampleRate | maxSampleRate |
prop | ID da propriedade, inteiro |
Manipulando propriedades da zona
Uma propriedade zoneada é equivalente a uma coleção de várias propriedades em que cada subpropriedade pode ser acessada com o valor de ID de área especificado.
-
get
call for zoned property sempre inclui o ID da área na solicitação. Portanto, apenas o valor atual para a ID de área solicitada é retornado. Se a propriedade for global, o ID de área será 0. -
set
call for zoned property sempre inclui o ID da área na solicitação. Portanto, apenas o ID de área solicitado é alterado. - A chamada de
subscribe
gera eventos para todos os IDs de área da propriedade.
Receber chamadas
Durante a inicialização, o valor da propriedade pode não estar disponível ainda, pois a mensagem de rede do veículo correspondente ainda não foi recebida. Nesses casos, a chamada get
deve retornar -EAGAIN
. Algumas propriedades (como HVAC) possuem propriedades de energia liga/desliga separadas. Chamar get
para tal propriedade (quando desligado) deve retornar um status UNAVAILABLE
em vez de retornar um erro. Por exemplo, obtenha a temperatura HVAC
Figura 1 . Obter temperatura HVAC (CS = CarService, VHAL = Vehicle HAL)
Definir chamadas
Uma chamada de set
é uma operação assíncrona que envolve a notificação de eventos depois que uma alteração solicitada é feita. Em uma operação típica, uma chamada set
leva a uma solicitação de alteração na rede do veículo. Algumas chamadas set
podem exigir que os dados iniciais estejam prontos, mas durante a inicialização, esses dados podem não estar disponíveis ainda. Nesses casos, a chamada set
deve retornar -EAGAIN
. Algumas propriedades com ligar/desligar separados devem retornar -ESHUTDOWN
quando a propriedade é desligada e a configuração não pode ser feita. Até set
seja efetivado, get
não retorna necessariamente o mesmo valor que está definido. Por exemplo, set HVAC Temperature
.
Figura 2 . Definir temperatura HVAC (CS = CarService, VHAL = Veículo HAL)
Manipulando propriedades personalizadas
Para dar suporte às necessidades específicas do parceiro, o VHAL permite propriedades personalizadas restritas aos aplicativos do sistema. Use as seguintes diretrizes ao trabalhar com propriedades personalizadas:
- O ID da propriedade deve ser gerado usando os seguintes campos:
-
VehiclePropertyGroup:VENDOR
O grupoVENDOR
é usado apenas para propriedades customizadas. -
VehicleArea
Selecione um tipo de área apropriado. -
VehiclePropertyType
Selecione o tipo de dados adequado. O tipoBYTES
permite a passagem de dados brutos que são suficientes na maioria dos casos. O envio frequente de big data por meio de propriedades personalizadas pode diminuir o acesso à rede do veículo inteiro — tenha cuidado ao adicionar uma grande carga útil. -
Property ID
Escolha um ID de quatro nibbles para a propriedade personalizada.
-
- Para evitar a fragmentação do ecossistema, as propriedades personalizadas não devem ser usadas para replicar as propriedades do veículo que já existem no ( SDK VehiclePropertyIds ).
- Preencha
VehiclePropConfig.configString
com uma breve descrição da propriedade personalizada. Isso permite que as ferramentas de verificação de sanidade sinalizem a replicação acidental de propriedades de veículos existentes. Por exemplo, "estado de luz de perigo". - Acesso através do
CarPropertyManager
(para componentes Java) ou através da API Vehicle Network Service (para nativos). Não modifique outras APIs do carro, pois isso pode levar a problemas de compatibilidade futuros. - Depois de implementar as propriedades do fornecedor, selecione apenas a lista de permissões na enumeração
VehicleVendorPermission
para as propriedades do fornecedor. O mapeamento das permissões do fornecedor para as propriedades do sistema interromperá o CTS e o VTS.
Manipulação de propriedades de HVAC
Você pode usar o VHAL para controlar o HVAC definindo as propriedades relacionadas ao HVAC. A maioria das propriedades HVAC são propriedades zoneadas, embora várias sejam propriedades não zoneadas (globais). As propriedades definidas de amostra incluem:
Propriedade | Propósito |
---|---|
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET | Defina a temperatura por zona. |
VEHICLE_PROPERTY_HVAC_RECIRC_ON | Controle a recirculação por zona. |
Para ver uma lista completa de propriedades de HVAC, procure VEHICLE_PROPERTY_HVAC_*
em types.hal
. Quando a propriedade HVAC usa VehicleAreaSeat
, regras adicionais para mapear uma propriedade HVAC zoneada para IDs de área se aplicam. Cada assento disponível no carro deve fazer parte de um ID de área na matriz de ID de área.
Exemplo Um. Um carro tem dois bancos dianteiros ( ROW_1_LEFT, ROW_1_RIGHT
) e três bancos traseiros ( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT
). O carro tem duas unidades de controle de temperatura: o lado do motorista e o lado do passageiro.
- Um conjunto de mapeamento válido de IDs de área para
HVAC_TEMPERATURE SET
é:-
ROW_1_LEFT | ROW_2_LEFT
-
ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
-
- Um mapeamento alternativo para a mesma configuração de hardware é:
-
ROW_1_LEFT | ROW_2_LEFT | ROW_2_CENTER
-
ROW_1_RIGHT | ROW_2_RIGHT
-
Exemplo Dois. Um carro tem três fileiras de assentos com dois assentos na primeira fila ( ROW_1_LEFT, ROW_1_RIGHT
), três assentos na segunda ( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT
) e três na terceira fileira ( ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT
). O carro tem três unidades de controle de temperatura: lado do motorista, lado do passageiro e traseira. Uma maneira razoável de mapear HVAC_TEMPERATURE_SET
para IDs de área é como uma matriz de três 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
Manipulando as propriedades do sensor
As propriedades do sensor VHAL representam dados reais do sensor ou informações de política, como status de direção. Algumas informações do sensor (como status de direção e modo dia/noite) podem ser acessadas por qualquer aplicativo sem restrições, pois os dados são obrigatórios para construir um aplicativo de veículo seguro. Outras informações do sensor (como velocidade do veículo) são mais confidenciais e requerem permissões específicas que os usuários podem gerenciar.
Consulte as propriedades do sensor com suporte (em types.hal
).
Serviço de Mapa de Veículos
O Vehicle Map Service (VMS) fornece um mecanismo para trocar dados de mapa entre clientes por meio de uma interface pub/sub para oferecer suporte a recursos comuns do veículo, como Advanced Driver Assistance Systems (ADAS) . Os clientes podem incluir a interface dos sistemas do veículo através da propriedade VMS no VHAL ou aplicativos Android privilegiados. Os dados compartilhados no VMS devem ser limitados aos dados do mapa para uso pelos sistemas do veículo e aplicativos de suporte.
O VMS destina-se ao uso apenas em implementações do Android Automotive; O AOSP não contém clientes padrão que publicam ou assinam o VMS. Para a propriedade VMS no VHAL, os tipos de mensagem e as estruturas de dados são descritos no VHAL 2.0 na enumeração VmsMessageType
, que lista os tipos de mensagens VMS com suporte. Essa enumeração é usada como o primeiro inteiro na matriz de inteiros da propriedade do veículo e determina como o restante da mensagem é decodificado.