Propriedades do fornecedor
Para atender às necessidades específicas dos parceiros, o VHAL permite propriedades do fornecedor que são acessadas somente por meio de APIs do sistema. Use as seguintes diretrizes ao trabalhar com propriedades do fornecedor:
- Sempre tente usar as propriedades do sistema primeiro; as propriedades do fornecedor devem 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 devem ser usadas para replicar propriedades de veículos 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:
-
VehiclePropertyGroup:VENDOR
O grupo VENDOR é usado somente para propriedades de fornecedores. -
VehicleArea
Selecione um tipo de área apropriado. -
VehiclePropertyType
Selecione o tipo de dados adequado. O tipo BYTES permite a passagem de dados brutos, o que é suficiente na maioria dos casos. O envio frequente de big data por meio de propriedades de fornecedores pode retardar o acesso à rede de todo o veículo. Tenha cuidado ao adicionar uma grande carga útil. -
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. Isto permite que ferramentas de verificação de validade sinalizem a replicação acidental de propriedades de veículos existentes. Por exemplo, "Minha propriedade personalizada para XYZ". - Acesso através do CarPropertyManager (para componentes Java) ou através do
libvhalclient
(para nativos). Não modifique APIs de outros carros, pois isso pode levar a problemas de compatibilidade futuros.
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 controle de permissão, suporte a propriedade SUPPORT_CUSTOMIZE_VENDOR_PERMISSION
. Esta propriedade STATIC é somente leitura, para a qual sua matriz de configuração especifica as permissões para propriedades do fornecedor. O configArray
é definido da seguinte forma (i é um número inteiro que começa em 0):
-
configArray[3 * i]
propId, o ID da propriedade do fornecedor. -
configArray[3 * i + 1]
Um enum emVehicleVendorPermission.aidl
para indicar permissão para ler o valor da propriedade. -
configArray[3 * i + 2]
Um enum 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
requerandroid.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_SEAT
para ler,android.car.hardware.property.VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_SEAT
para escrever. -
vendor_prop-2
requerandroid.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_INFO
para ler e não pode ser gravado em aplicativos 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 recebem a permissão padrão do fornecedor. Quando PERMISSION_NOT_ACCESSIBLE
estiver selecionado, os aplicativos Android não poderão acessar a propriedade. No exemplo, os aplicativos Android não podem gravar um valor para vendor_prop_2
. Somente clientes VHAL nativos podem gravar nesta 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
Você pode usar o VHAL para controlar o HVAC definindo propriedades relacionadas ao HVAC. A maioria das propriedades HVAC estão associadas a áreas específicas do veículo, embora várias sejam propriedades globais. As propriedades definidas por exemplo incluem:
Propriedade | Propósito |
---|---|
HVAC_TEMPERATURE_SET | Defina a temperatura por ID de área. |
HVAC_POWER_ON | O estado de energia do sistema HVAC por ID de área. |
Para propriedades HVAC que dependem do estado de energia do sistema HVAC, elas devem ser listadas na matriz de configuração HVAC_POWER_ON
. Para ver uma lista completa de propriedades HVAC, pesquise HVAC_*
em VehicleProperty.aidl
, consulte Propriedades de sistema suportadas . propriedades.
Regras para mapear propriedades HVAC do tipo VehicleArea não GLOBAL para AreaIDs: Cada “área” para um tipo específico VehicleArea
que é afetado pela propriedade deve 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 deve ser incluído exatamente uma vez. A atribuição do banco traseiro central ao AreaID esquerdo ou direito pode parecer arbitrária, mas a inclusão de cada assento afetado em exatamente um AreaID garante que os assentos no carro sejam todos expressos e que esteja disponível uma maneira razoável de afetar cada assento.
Exemplo 1
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). Existem 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:
- LINHA_1_ESQUERDA | LINHA_2_ESQUERDA
- LINHA_1_RIGHT | LINHA_2_CENTRO | LINHA_2_RIGHT
Um mapeamento alternativo para a mesma configuração de hardware seria:
- LINHA_1_ESQUERDA | LINHA_2_CENTRO | LINHA_2_ESQUERDA
- LINHA_1_RIGHT | LINHA_2_RIGHT
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 terceira filas (ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT). Existem três unidades de controle de temperatura, uma para o lado do motorista, uma para o lado do passageiro e uma para a traseira. Uma maneira razoável de mapear HVAC_TEMPERATURE_SET
para AreaIDs é uma matriz de três elementos:
- LINHA_1_ESQUERDA
- LINHA_1_RIGHT
- LINHA_2_ESQUERDA | LINHA_2_CENTRO | LINHA_2_RIGHT | LINHA_3_ESQUERDA | LINHA_3_CENTRO | LINHA_3_RIGHT
Exemplo 3
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). Suponha que o carro suporte HVAC_AUTO_ON apenas para os dois bancos dianteiros. Um conjunto de mapeamento válido de AreaIDs para HVAC_AUTO_ON seria uma matriz de elemento único:
- LINHA_1_ESQUERDA | LINHA_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:
- LINHA_1_ESQUERDA
- LINHA_1_RIGHT
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) da União Europeia por meio do Android, a propriedade GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT
deverá ser suportada. Um exemplo de caso de uso é o GSR-ISA (Intelligent Speed Assist), conforme definido no Regulamento da UE 2019/2144. Esta propriedade é adicionada no AIDL VHAL do Android 13, no entanto, é compatível com o Car Service desde o lançamento do Android 12. Esta propriedade é definida como uma propriedade inteira global estática somente leitura, com valores possíveis definidos pela enum GsrComplianceRequirementType
:
Nome | Valor | Descrição |
---|---|---|
GSR_COMPLIANCE_NOT_REQUIRED | 0 | A conformidade com o GSR não é necessária |
GSR_COMPLIANCE_REQUIRED_V1 | 1 | A conformidade com o GSR é necessária e a versão da solução de requisitos é 1. |
Para oferecer suporte a essa propriedade no HIDL VHAL (no Android 12), os fornecedores devem codificar o ID da propriedade. Por exemplo, o trecho a seguir mostra como isso é suportado na referência HIDL 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 no AIDL VHAL (do Android 13), os fornecedores podem usar o ID da propriedade de VehicleProperty.h
e o enum 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 esta propriedade em um aplicativo 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. Esta propriedade requer a permissão
Car#PERMISSION_CAR_INFO
.