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 o processo propriedades 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. 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 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". - Acesso por
CarPropertyManager (link em inglês)
(para componentes Java) ou pela
libvhalclient
(para nativo). 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 de fornecedor definida é
android.car.Car.PERMISSION_VENDOR_EXTENSION
: Para maior granularidade de permissão
têm 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):
- propId
configArray[3 * i]
, o ID da propriedade do fornecedor. configArray[3 * i + 1]
Um tipo enumerado emVehicleVendorPermission.aidl
para indicar permissão para ler o valor da propriedade.configArray[3 * i + 2]
Um tipo enumerado emVehicleVendorPermission.aidl
para indicam a 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 ler,android.car.hardware.property.VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_SEAT
gravação.vendor_prop-2
exigeandroid.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_INFO
ler e não é gravável 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
A propriedade PERMISSION_NOT_ACCESSIBLE
está selecionada, e os apps Android não poderão 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 as propriedades do veículo ADAS.ASSENTO e DIREÇÃO
Consulte Propriedades do assento e do volante.
AVAC (aquecimento, ventilação e ar-condicionado)
É possível usar a VHAL para controlar o sistema AVAC (aquecimento, ventilação e ar-condicionado) definindo propriedades relacionadas. A maioria das propriedades de AVAC (aquecimento, ventilação e ar-condicionado) estão associados a áreas específicas no veículo, embora vários sejam propriedades globais. Exemplos de propriedades definidas incluem:
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. |
As propriedades do sistema AVAC (aquecimento, ventilação e ar-condicionado) precisam ser
listado 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
lugares que "maior influência", mas cada licença afetada precisa ser incluída exatamente uma vez.
A atribuição do assento traseiro central à esquerda ou direita da AreaID pode parecer arbitrária,
mas a inclusão de todas as licenças afetadas em exatamente um AreaID garante que elas
no carro são todos expressos e que há 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 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 AreaIDs para
HVAC_TEMPERATURE_SET
seria uma matriz de dois elementos:
- ROW_1_LEFT | ROW_2_ESQUERDA
- ROW_1_DIREITA | CENTRAL ROW_2 | ROW_2_DIREITA
Um mapeamento alternativo para a mesma configuração de hardware seria:
- ROW_1_LEFT | CENTRAL ROW_2 | ROW_2_ESQUERDA
- 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 forma razoável de mapear
De HVAC_TEMPERATURE_SET
para AreaIDs é uma matriz de três elementos:
- ROW_1_ESQUERDA
- ROW_1_DIREITA
- 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 aceite HVAC_AUTO_ON apenas para nos dois assentos da frente. Um conjunto de mapeamento válido de AreaIDs para HVAC_AUTO_ON seria um único matriz de elementos:
- 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_ESQUERDA
- ROW_1_DIREITA
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 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 de trás 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. |
Base da roda | int32Values[4] |
Distância entre o centro do veículo das rodas dianteiras e traseiras. |
Largura da faixa, frente | int32Values[5] |
Distância entre a roda dianteira, medida a partir da linha central de um pneu até o linha central do sulco oposto do pneu. |
Largura da faixa, traseira | int32Values[6] |
Distância entre a roda traseira, medida a partir da linha central de um pneu até o linha central do sulco oposto do pneu. |
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. |
Conformidade com os regulamentos gerais 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 à VHAL da AIDL no Android 13, mas ela é
com suporte no Car Service desde o lançamento do Android 12. Esta propriedade é definida como um endereço
estática global, com valores possíveis definidos pelo
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 do requisito é 1. |
Para oferecer suporte a essa propriedade no HIDL VHAL (no Android 12), os fornecedores precisam codificar 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
- 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. Isso
requer a permissão,
Car#PERMISSION_CAR_INFO
.