Propriedades especiais

Propriedades do fornecedor

Para atender às necessidades específicas dos parceiros, a VHAL permite que as propriedades do fornecedor que são acessadas usando APIs do sistema. Use as seguintes diretrizes ao trabalhar com propriedades de fornecedores:

  • Sempre tente usar as propriedades do sistema primeiro. As propriedades do fornecedor precisam ser usadas como último recurso quando nenhuma das propriedades do sistema atender à solicitação.
  • Para evitar a fragmentação do ecossistema, as propriedades do fornecedor não podem ser usadas para replicar propriedades do veículo que já existem no SDK VehiclePropertyIds. Para saber mais, consulte a Seção 2.5, Requisitos automotivos no CDD.
  • Use os campos a seguir para gerar o ID da propriedade:
    • O grupo VehiclePropertyGroup:VENDOR VENDOR é usado apenas para propriedades do fornecedor.
    • VehicleArea Selecione um tipo de área adequado.
    • VehiclePropertyType Selecione o tipo de dados adequado. O tipo BYTES permite transmitir dados brutos, o que é suficiente na maioria dos casos. Como enviar Big Data com frequência usando propriedades do fornecedor pode atrasar o acesso a toda a rede do veículo. Tenha cuidado ao adicionar um payload grande.
    • Property ID Escolha um ID de dois bytes exclusivo para a propriedade do fornecedor. Por exemplo, 0x1234.
  • Preencha VehiclePropConfig.configString com uma breve descrição da propriedade do fornecedor. Isso permite que as ferramentas de verificação de validade sinalizem a replicação acidental de propriedades do veículo. Por exemplo, "Minha propriedade personalizada para XYZ".
  • Acesse pelo CarPropertyManager (para componentes Java) ou pelo libvhalclient (para nativos). O que fazer modificar outras APIs de carro, porque isso pode levar a futuros problemas de compatibilidade.

Permissão de propriedades do fornecedor

A permissão padrão para qualquer propriedade do fornecedor definida é android.car.Car.PERMISSION_VENDOR_EXTENSION. Para um controle de permissão mais granular, ofereça suporte à propriedade SUPPORT_CUSTOMIZE_VENDOR_PERMISSION. Essa ESTÁTICA propriedade é somente leitura, e a matriz de configuração dela especifica as permissões das propriedades do fornecedor. O configArray é definido da seguinte maneira (i é um número inteiro a partir de 0):

  • configArray[3 * i] propId, o ID da propriedade do fornecedor.
  • configArray[3 * i + 1] Um tipo enumerado em VehicleVendorPermission.aidl para indicar a permissão de leitura do valor da propriedade.
  • configArray[3 * i + 2] Um tipo enumerado em VehicleVendorPermission.aidl para indicar a permissão de gravar o valor da propriedade.

Por exemplo, a matriz de configuração a seguir configura duas propriedades do fornecedor: vendor_prop_1 e vendor_prop_2, para ter as permissões:

  • vendor_prop_1 exige android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_SEAT para ler, android.car.hardware.property.VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_SEAT para gravar.
  • O vendor_prop-2 exige android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_INFO para leitura e não pode ser gravado para apps Android.
configArray = {
  PERMISSION_SET_VENDOR_CATEGORY_SEAT
    vendor_prop_2, PERMISSION_GET_VENDOR_CATEGORY_INFO, PERMISSION_NOT_ACCESSIBLE
}

As propriedades do fornecedor que não estão neste array recebem a permissão padrão do fornecedor. Quando PERMISSION_NOT_ACCESSIBLE é selecionado, os apps Android não podem acessar a propriedade. No exemplo, os apps Android não podem gravar um valor para vendor_prop_2. Somente nativo Os clientes VHAL podem gravar nessa propriedade.

Sistemas avançados de assistência ao motorista (ADAS)

Consulte Propriedades do veículo do ADAS.

ASSENTO e DIREÇÃO

Consulte Propriedades do assento e do volante.

AVAC (aquecimento, ventilação e ar-condicionado)

É possível usar o VHAL para controlar o AVAC definindo propriedades relacionadas a ele. A maioria das propriedades de AVAC são associadas a áreas específicas do veículo, embora várias sejam propriedades globais. Confira alguns exemplos de propriedades definidas:

Propriedade Objetivo
HVAC_TEMPERATURE_SET Definir temperatura por ID de área.
HVAC_POWER_ON O estado de energia do sistema AVAC por ID de área.

Para propriedades de AVAC que dependem do estado de energia do sistema, elas precisam ser listadas na matriz de configuração HVAC_POWER_ON. Para conferir uma lista completa de propriedades do sistema AVAC (aquecimento, ventilação e ar-condicionado), pesquisar por HVAC_* em VehicleProperty.aidl, consulte Propriedades de sistema compatíveis. propriedades.

Regras para mapear propriedades AVAC (aquecimento, ventilação e ar-condicionado) não GLOBAL do tipo Área do veículo para AreaIDs: Cada "área" de um tipo de VehicleArea específico que é afetada pela propriedade precisa ser incluído em um ID de área para aquela propriedade. Os controladores de temperatura são atribuídos aos assentos que eles "mais influenciam", mas cada assento afetado precisa ser incluído exatamente uma vez. A atribuição do assento traseiro central ao AreaID esquerdo ou direito pode parecer arbitrária, mas a inclusão de todos os assentos afetados em exatamente um AreaID garante que os assentos no carro sejam todos expressos e que uma maneira razoável de afetar cada assento esteja disponível.

Exemplo 1

Um carro tem dois assentos da frente (ROW_1_LEFT, ROW_1_RIGHT) e três assentos traseiros (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT). Há duas unidades de controle de temperatura, uma para cada do lado do motorista e do passageiro. Um conjunto de mapeamento válido de ID de área para HVAC_TEMPERATURE_SET seria uma matriz de dois elementos:

  • 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 seria:

  • ROW_1_LEFT | ROW_2_CENTER | ROW_2_LEFT
  • ROW_1_DIREITA | ROW_2_DIREITA

Exemplo 2

Um carro tem três filas de assentos, com dois assentos na primeira fila (ROW_1_LEFT, ROW_1_RIGHT) e três assentos na segunda (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) e na terceira fileiras (ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT). Há três unidades de controle de temperatura, uma para cada lado do motorista, lado do passageiro e traseiro. Uma maneira razoável de mapear HVAC_TEMPERATURE_SET para AreaIDs é uma matriz de três elementos:

  • ROW_1_LEFT
  • ROW_1_RIGHT
  • ROW_2_LEFT | CENTRAL ROW_2 | ROW_2_DIREITA | ROW_3_LEFT | CENTRAL ROW_3 | ROW_3_DIREITA

Exemplo 3

Um carro tem dois assentos da frente (ROW_1_LEFT, ROW_1_RIGHT) e três assentos traseiros (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT). Suponha que o carro ofereça suporte a HVAC_AUTO_ON apenas para os dois assentos dianteiros. Um conjunto de mapeamento válido de AreaIDs para HVAC_AUTO_ON seria uma matriz de elementos único:

  • ROW_1_LEFT | ROW_1_DIREITA

Se a HVAC_AUTO_ON tivesse duas unidades de controle separadas para o lado do motorista e do passageiro um mapeamento alternativo seria uma matriz de dois elementos:

  • ROW_1_LEFT
  • ROW_1_RIGHT

INFO_EXTERIOR_DIMENSIONS

As dimensões externas de um veículo são medidas em milímetros, conforme ilustrado na Figura 1.

Figura 1. Dimensões externas do veículo, vista frontal.
Figura 2. dimensões externas do veículo, vista lateral.

Use as propriedades descritas nesta tabela para definir a parte externa de um veículo dimensões.

Propriedade do veículo Campo VHAL Descrição
Altura int32Values[0] Distância vertical entre o solo e o ponto mais alto do veículo. Isso pressupõe rodas de fábrica normalmente infladas.
Duração int32Values[1] Distância horizontal entre os pontos mais externos da frente e da traseira do veículo.
Largura, excluindo espelhos int32Values[2] Distância horizontal entre os dois pontos mais externos de cada lado do veículo, excluindo os espelhos laterais.
Largura, incluindo espelhos int32Values[3] Distância horizontal entre os dois pontos mais externos de cada lado do veículo, incluindo os espelhos laterais.
Roda base int32Values[4] Distância entre o centro do veículo e as rodas dianteiras e traseiras.
Largura da faixa, frente int32Values[5] Distância entre a roda dianteira, medida da linha central de um piso de pneu até a linha central do piso do pneu oposto.
Largura da via, traseira int32Values[6] Distância entre a roda traseira, medida a partir da linha central de um piso do pneu até a linha central do piso do pneu oposto.
Diâmetro de meio-fio entre meio-fio int32Values[7] O diâmetro do círculo feito pelas rodas externas do veículo ao fazer uma curva completa com um volante totalmente travado.

Compliance com a regulamentação geral de segurança da União Europeia

Se o veículo precisar obedecer aos requisitos do Regulamento geral de segurança (GSR, na sigla em inglês) da União Europeia pelo Android, a propriedade GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT precisa suporte. Um exemplo de caso de uso é o GSR-ISA (Assistente inteligente de velocidade), conforme definido no EU Regulamento 2019/2144. Essa propriedade foi adicionada ao AIDL VHAL no Android 13, mas tem suporte no Car Service desde o lançamento do Android 12. Essa propriedade é definida como uma propriedade de número inteiro global estática somente leitura, com valores possíveis definidos pela enumeração GsrComplianceRequirementType:

Nome Valor Descrição
GSR_COMPLIANCE_NOT_REQUIRED 0 A conformidade com a GSR não é obrigatória
GSR_COMPLIANCE_REQUIRED_V1 1 A conformidade com a GSR é obrigatória, e a versão da solução de requisito é 1.

Para oferecer suporte a essa propriedade no VHAL da HIDL (no Android 12), os fornecedores precisam programar o ID da propriedade. Por exemplo, o snippet a seguir mostra como isso é compatível com o HIDL de referência VHAL DefaultConfig.h:

{
  .config =
      {
          // GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT
          .prop = 0x11400F47,
          .access = VehiclePropertyAccess::READ,
          .changeMode = VehiclePropertyChangeMode::STATIC,
      },
  // GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1
  .initialValue = {.int32Values = {1}},
}

Para oferecer suporte a essa propriedade na VHAL da AIDL (do Android 13 em diante), os fornecedores podem usar o ID da propriedade do VehicleProperty.h e tipo enumerado de GsrComplianceRequirementType.h. Para exemplo, como na referência AIDL VHAL DefaultProperties.json:

{
  "property": "VehicleProperty::GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT",
  "defaultValue": {
    "int32Values": [
      "GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1"
    ]
  }
}

Para ler essa propriedade em um app Android, use CarPropertyManager.getIntProperty.