Propriedades do fornecedor
Para atender às necessidades específicas dos parceiros, a VHAL permite propriedades do fornecedor que são acessadas apenas por APIs do sistema. Use as seguintes diretrizes ao trabalhar com propriedades do fornecedor:
- Sempre tente usar primeiro as propriedades do sistema. As propriedades do fornecedor devem ser usadas como último recurso quando nenhuma das propriedades do sistema atender ao seu requisito.
- 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 seguintes campos para gerar o ID da propriedade:
- O grupo
VehiclePropertyGroup:VENDOR
VENDOR é usado apenas para propriedades de 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. O envio frequente de big data por propriedades do fornecedor pode diminuir a velocidade de todo o acesso à rede do veículo. Tenha cuidado ao adicionar um payload grande.Property ID
Escolha um ID exclusivo de dois bytes para a propriedade do fornecedor. Por exemplo, 0x1234.
- O grupo
- 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 de veículos atuais. Por exemplo, "Minha propriedade personalizada para XYZ". - Acesse pelo
CarPropertyManager
(para componentes Java) ou pelo
libvhalclient
(para nativo). Não modifique outras APIs de carro, porque isso pode causar problemas de compatibilidade no futuro.
Permissão de propriedades do fornecedor
A permissão padrão para qualquer propriedade de fornecedor definida é
android.car.Car.PERMISSION_VENDOR_EXTENSION
. Para uma granularidade mais refinada do controle de permissões, ofereça suporte à propriedade SUPPORT_CUSTOMIZE_VENDOR_PERMISSION
. Essa propriedade STATIC é somente leitura, e a matriz de configuração dela especifica as permissões para propriedades do fornecedor.
O configArray
é definido da seguinte maneira (i é um número inteiro que começa em 0):
configArray[3 * i]
propId, o ID da propriedade do fornecedor.configArray[3 * i + 1]
Uma enumeração emVehicleVendorPermission.aidl
para indicar permissão de leitura do valor da propriedade.configArray[3 * i + 2]
Uma enumeração emVehicleVendorPermission.aidl
para indicar permissão para 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
exigeandroid.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_SEAT
para leitura eandroid.car.hardware.property.VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_SEAT
para gravação.vendor_prop-2
exigeandroid.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 nessa matriz recebem a permissão padrão do fornecedor. Quando
PERMISSION_NOT_ACCESSIBLE
está 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 clientes VHAL nativos podem gravar nessa propriedade.
Sistemas avançados de assistência ao motorista (ADAS)
Consulte Propriedades do veículo ADAS.ASSENTO e DIREÇÃO
Consulte Propriedades do assento e do volante.
AVAC (aquecimento, ventilação e ar-condicionado)
Você pode usar a VHAL para controlar o HVAC definindo propriedades relacionadas a ele. A maioria das propriedades de HVAC está associada a áreas específicas do veículo, embora várias sejam globais. Exemplos de propriedades definidas por amostra:
Propriedade | Finalidade |
---|---|
HVAC_TEMPERATURE_SET |
Defina a temperatura por ID de área. |
HVAC_POWER_ON |
O estado de energia do sistema HVAC por ID da área. |
Para propriedades de HVAC que dependem do estado de energia do sistema, elas precisam ser listadas na matriz de configuração HVAC_POWER_ON
. Para ver uma lista completa de propriedades de AVAC, pesquise HVAC_*
em VehicleProperty.aidl
e consulte Propriedades do sistema compatíveis.
propriedades.
Regras para mapear propriedades de HVAC do tipo VehicleArea não GLOBAL para AreaIDs:
Todas as "áreas" de um tipo VehicleArea
específico afetado pela propriedade precisam ser incluídas em um ID de área para essa 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 do carro sejam todos expressos e que uma maneira razoável de afetar cada assento esteja disponível.
Exemplo 1
Um carro tem dois assentos dianteiros (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 o lado do motorista e outra para o lado do passageiro. Um conjunto de mapeamento válido de AreaIDs 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_RIGHT | ROW_2_RIGHT
Exemplo 2
Um carro tem três fileiras de assentos, com dois na frente (ROW_1_LEFT, ROW_1_RIGHT) e três na segunda (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) e na terceira (ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT). Há três unidades de controle de temperatura, uma para o lado do motorista, uma para o lado do passageiro e uma para a parte traseira. 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 | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT
Exemplo 3
Um carro tem dois assentos dianteiros (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 bancos da frente. Um conjunto de mapeamento válido de AreaIDs para HVAC_AUTO_ON seria uma matriz de elemento único:
- ROW_1_LEFT | ROW_1_RIGHT
Se 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.


Use as propriedades descritas nesta tabela para definir as dimensões externas de um veículo.
Propriedade do veículo | Campo VHAL | Descrição |
---|---|---|
Altura | int32Values[0] |
Distância vertical entre o chão 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, sem incluir os espelhos | int32Values[2] |
Distância horizontal entre os dois pontos mais externos de cada lado do veículo, excluindo os espelhos retrovisores laterais. |
Largura, incluindo espelhos | int32Values[3] |
Distância horizontal entre os dois pontos mais externos de cada lado do veículo, incluindo os espelhos retrovisores laterais. |
Distância entre eixos | int32Values[4] |
Distância entre o centro das rodas dianteiras e traseiras do veículo. |
Largura da bitola, dianteira | int32Values[5] |
Distância entre as rodas dianteiras, medida da linha central de um pneu até a linha central do pneu oposto. |
Largura da bitola, traseira | int32Values[6] |
Distância entre as rodas traseiras, medida da linha central de um pneu até a linha central do pneu oposto. |
Diâmetro de giro de meio-fio a meio-fio | int32Values[7] |
O diâmetro do círculo feito pelas rodas externas do veículo ao fazer uma volta completa com um volante totalmente travado. |
Conformidade com o regulamento geral de segurança da União Europeia
Se o veículo precisar obedecer aos requisitos do Regulamento Geral sobre Segurança (GSR) da União Europeia
pelo Android, a propriedade GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT
precisará
ser compatível. Um exemplo de caso de uso é o GSR-ISA (Assistente inteligente de velocidade), conforme definido no Regulamento da UE 2019/2144. Essa propriedade foi adicionada na VHAL AIDL do Android 13, mas é compatível com o Car Service desde o lançamento do Android 12. Essa propriedade é definida como uma propriedade estática global de número inteiro 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 o GSR é obrigatória, e a versão da solução de requisitos é 1. |
Para oferecer suporte a essa propriedade na VHAL do HIDL (no Android 12), os fornecedores precisam codificar o ID da propriedade.
Por exemplo, o snippet a seguir mostra como isso é compatível com o VHAL HIDL de referência
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 do AIDL (do Android 13), os fornecedores podem usar o ID da propriedade de
VehicleProperty.h
e a enumeração de GsrComplianceRequirementType.h
. Por exemplo, como em AIDL VHAL de referência
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
.
- No Android 13 e versões mais recentes, use
VehiclePropertyIds.GENERAL_SAFETY_REGULATION_COMPLIANCE
como o ID da propriedade. - No Android 12, use o valor codificado de 0x11400F47 como ID da propriedade. Essa propriedade exige a permissão
Car#PERMISSION_CAR_INFO
.