Propriedades do fornecedor
Para atender às necessidades específicas dos parceiros, o VHAL permite propriedades do fornecedor que são acessadas somente por APIs do sistema. Siga as diretrizes a seguir ao trabalhar com propriedades do fornecedor:
- 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 aos seus requisitos.
- 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:
VehiclePropertyGroup:VENDOR
O grupo VENDOR é usado apenas para propriedades de fornecedores.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 pelas propriedades do fornecedor pode diminuir a velocidade de 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.
- 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. Por exemplo, "Minha propriedade personalizada para XYZ". - Acesse por
CarPropertyManager
(para componentes Java) ou por
libvhalclient
(para nativo). Não modifique outras APIs do carro, porque isso pode causar problemas de compatibilidade no futuro.
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 propriedade ESTÁTICA é 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 que começa em 0):
- propId
configArray[3 * i]
, o ID da propriedade do fornecedor. configArray[3 * i + 1]
Um tipo enumerado emVehicleVendorPermission.aidl
para indicar a permissão de leitura do valor da propriedade.configArray[3 * i + 2]
Um tipo enumerado emVehicleVendorPermission.aidl
para indicar a permissão de gravação do valor da propriedade.
Por exemplo, o seguinte array de configuração 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 ler,android.car.hardware.property.VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_SEAT
para gravar.- 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 nesta matriz usam a permissão do fornecedor padrão. 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 clientes VHAL
nativos podem gravar nessa propriedade.
Sistemas avançados de assistência ao motorista (ADAS)
Consulte Propriedades do veículo ADAS.ASSENTO E VOLANTE
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 a 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 de AVAC,
pesquise HVAC_*
em VehicleProperty.aidl
. Consulte
Propriedades do sistema com suporte.
propriedades.
Regras para mapear propriedades HVAC de tipo VehicleArea que não são globais para AreaIDs:
Toda "área" de um tipo VehicleArea
específico que é afetado pela propriedade precisa ser
incluída 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 à esquerda ou direita do AreaID pode parecer arbitrária, mas a inclusão de cada assento afetado em exatamente um AreaID garante que todos os assentos no carro sejam expressos e que haja uma maneira razoável de afetar cada assento.
Exemplo 1
Um carro tem dois assentos da frente (ROW_1_LEFT, ROW_1_RIGHT) e três bancos traseiros
(ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT). Há duas unidades de controle de temperatura, uma para cada 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_RIGHT | ROW_2_RIGHT
Exemplo 2
Um carro tem três fileiras de assentos, com dois assentos na primeira fileira (ROW_1_LEFT, ROW_1_RIGHT)
e três assentos na segunda (ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT) e terceira fileiras
(ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT). Há três unidades de controle de temperatura, uma para cada lado (lado do motorista, lado do passageiro e 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 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_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 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 faixa, 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 giro entre meio-fios | int32Values[7] |
O diâmetro do círculo feito pelas rodas externas do veículo ao fazer uma curva completa com um volante totalmente trancado. |
Conformidade com os regulamentos gerais de segurança da União Europeia
Se o veículo precisar cumprir os 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
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 ao AIDL VHAL no Android 13. No entanto, ela 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 VHAL
de referência da HIDL
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 no AIDL VHAL (a partir do Android 13), os fornecedores podem usar o ID da propriedade de
VehicleProperty.h
e o tipo enumerado de GsrComplianceRequirementType.h
. Por
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
.
- 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 0x11400F47 como ID da propriedade. Essa propriedade requer a permissão
Car#PERMISSION_CAR_INFO
.