Propriedades do veículo

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

VHAL obter exemplo de 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 .

Exemplo de configuração de HVAC de VHAL

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 grupo VENDOR é usado apenas para propriedades customizadas.
    • VehicleArea
      Selecione um tipo de área apropriado.
    • VehiclePropertyType
      Selecione o tipo de dados adequado. O tipo BYTES 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.