Configurações da propriedade

Cada propriedade compatível é especificada por uma configuração de propriedade definida pela estrutura VehiclePropConfig e tem os seguintes campos.

Campo Descrição
prop

O ID da propriedade. Ela precisa ser uma das propriedades do sistema definidas do VehicleProperty.aidl ou uma propriedade do fornecedor. O ID da propriedade é criado usando a operação OR de bits dos seguintes campos (da direita para a esquerda):

  • (0x00000000) 16 bits: um ID exclusivo do intervalo 0x0100 a 0xffff.
  • (0x00000000) 8 bits: tipos de propriedade, que define o tipo da propriedade.
  • (0x00000000) 4 bits: tipos de área.
  • (0x00000000) 4 bits: VehiclePropertyGroup É SYSTEM (0x10000000) ou VENDOR (0x20000000). Consulte Propriedades do fornecedor para saber quais propriedades podem ser personalizadas.

Por exemplo,
INFO_VIN (0x11100100) = UniqueID (0x00000100) | VehiclePropertyType.STRING (0x00100000) | VehicleArea.GLOBAL (0x01000000) | VehiclePropertyGroup.SYSTEM (0x10000000)

access
  • O modo de acesso da propriedade. Precisa ser READ, WRITE ou READ_WRITE.
  • Para propriedades do sistema, esse valor precisa ser um dos modos de acesso definidos documentados em VehicleProperty.aidl.
  • Para propriedades com acesso por área, esse é o subconjunto máximo do acesso por área. Por exemplo, se as propriedades tiverem duas áreas com acesso READ e READ_WRITE, ele será definido como READ.
changeMode
  • Mude o modo da propriedade. Precisa ser STATIC, ON_CHANGE ou CONTINUOUS. STATIC significa que o valor da propriedade nunca muda após a inicialização do sistema. ON_CHANGE significa que o VHAL precisa informar quando o valor muda. CONTINUOUS significa que o valor da propriedade muda continuamente, e o VHAL precisa informar com base na taxa de amostragem de assinatura.
  • Para propriedades do sistema, esse valor precisa ser igual ao modo de mudança documentado em VehicleProperty.aidl.
configArray Uma matriz opcional para conter a configuração específica da propriedade. Pode ficar vazio. Para determinadas propriedades do sistema, por exemplo, GEAR_SELECTION, a matriz de configuração tem um significado especial e precisa ser especificada.
configString Uma string opcional para conter a configuração específica da propriedade. Pode ficar vazio.
minSampleRate e maxSampleRate A taxa de amostragem mínima e máxima com suporte para a propriedade contínua (em Hertz). Não é usado se a propriedade não for contínua. minSampleRate e maxSampleRate precisam ser alcançáveis pela implementação do VHAL. Nem todas as taxas de amostragem entre o mínimo e o máximo precisam ter suporte.

Tipos de propriedade

Definidos como tipos enumerados em VehiclePropertyType.aidl. Os tipos de propriedade aceitos estão listados na tabela a seguir.

Tipo de propriedade Valor Descrição
STRING 0x00100000 Propriedade de string, usa o campo stringValue em Valor da propriedade do veículo.
BOOLEAN 0x00200000 A propriedade Boolean usa o primeiro elemento no campo int32Values em Valor da propriedade do veículo. 0 significa false, None 0 significa true.
INT32 0x00400000 A propriedade Integer usa o primeiro elemento no campo int32Values em Valor da propriedade do veículo.
INT32_VEC 0x00410000 A propriedade Integer[] usa os elementos no campo int32Values em Valor da propriedade do veículo.
INT64 0x00500000 Propriedade longa, usa o primeiro elemento no campo int64Values em Valor da propriedade do veículo.
INT64_VEC 0x00510000 A propriedade Long[] usa os elementos no campo int64Values em Valor da propriedade do veículo.
FLOAT 0x00600000 A propriedade Float usa o primeiro elemento no campo floatValues em Valor da propriedade do veículo.
FLOAT_VEC 0x00610000 A propriedade Float[] usa os elementos no campo floatValues em Valor da propriedade do veículo.
BYTES 0x00700000 A propriedade byte[] usa os elementos no campo byteValues em Valor da propriedade do veículo.
MIXED 0x00e00000 Propriedade de tipo misto. Qualquer combinação de tipos escalar ou vetor. O formato exato precisa ser fornecido no array de configuração na configuração da propriedade.

Para propriedades do tipo MIXED do fornecedor, o configArray precisa ser formatado nesta estrutura:

  • configArray[0], 1 indica que a propriedade tem um valor String
  • configArray[1], 1 indica que a propriedade tem um valor Boolean
  • configArray[2], 1 indica que a propriedade tem um valor Integer
  • configArray[3], o número indica o tamanho de Integer[] na propriedade
  • configArray[4], 1 indica que a propriedade tem um valor Long
  • configArray[5], o número indica o tamanho de Long[] na propriedade
  • configArray[6], 1 indica que a propriedade tem um valor Float
  • configArray[7], o número indica o tamanho de Float[] na propriedade
  • configArray[8], o número indica o tamanho de byte[] na propriedade.

Por exemplo, configArray = {1, 1, 1, 3, 0, 0, 0, 0, 0} indica que a propriedade tem um valor String, um valor Boolean, um valor Integer e uma matriz com três números inteiros.

Configuração do ID da área

Cada configuração de propriedade também pode conter uma lista de configurações de ID de área. Essa lista é opcional para propriedades globais e obrigatória para propriedades com zonas (propriedades com várias áreas com suporte). Cada configuração de ID de área tem os seguintes campos.

Campo Descrição
areaId O ID dessa área. Consulte IDs de área.
minInt32Value e maxInt32Value
  • Valor mínimo e máximo opcional para propriedades do tipo INT32 na inicialização. Precisa ser 0 para todos os outros tipos. Será ignorado se ambos forem 0.
  • Para a propriedade global, se o valor mínimo e máximo precisar ser definido, use uma configuração de área com o ID de área 0.
  • Esse valor é estático e não muda, mesmo que o valor mínimo ou máximo mude durante a execução. Implemente IVehicle#getMinMaxSupportedValue para o valor mínimo ou máximo dinâmico.
minInt64Value e maxInt64Value
  • Valor mínimo e máximo opcional para propriedades do tipo INT64 na inicialização. Precisa ser 0 para todos os outros tipos. Será ignorado se ambos forem 0.
  • Para a propriedade global, se o valor mínimo e máximo precisar ser definido, use uma configuração de área com o ID de área 0.
  • Esse valor é estático e não muda, mesmo que o valor mínimo ou máximo mude durante a execução. Implemente IVehicle#getMinMaxSupportedValue para o valor mínimo ou máximo dinâmico.
minFloatValue e maxFloatValue
  • Valor mínimo e máximo opcional para propriedades do tipo "float" no momento da inicialização. Precisa ser 0 para todos os outros tipos. Será ignorado se ambos forem 0,0.
  • Para a propriedade global, se o valor mínimo e máximo precisar ser definido, use uma configuração de área com o ID de área 0.
  • Esse valor é estático e não muda, mesmo que o valor mínimo ou máximo mude durante a execução. Implemente IVehicle#getMinMaxSupportedValue para o valor mínimo ou máximo dinâmico.
(Novidades do Android 14)
supportedEnumValues
  • Lista opcional de valores aceitos na inicialização, se a propriedade for definida como uma propriedade enum. Se não for especificado (vazio) ou antes do Android 14, será considerado que todos os valores de tipo enumerado são aceitos.
  • Para a propriedade global, se for necessário definir valores de tipo enumerado com suporte, use uma configuração de área com o ID de área 0.
  • Esse valor é estático e não muda, mesmo que os valores compatíveis mudem durante a execução. Implemente IVehicle#getSupportedValuesLists para valores dinâmicos compatíveis.
  • Isso se aplica apenas a propriedades do tipo de enumeração. Para outros tipos, esse campo precisa estar vazio. Para expor valores aceitos para outros tipos que não são enum, use IVehicle#getSupportedValuesLists.
(Novidades do Android 15)
supportVariableUpdateRate
  • Se a taxa de atualização variável é compatível. Isso se aplica apenas a propriedades contínuas.
  • Se esse valor for true, o app poderá ativar a taxa de atualização variável para uma assinatura e receber eventos de atualização de propriedade somente quando o valor da propriedade mudar, tratando propriedades contínuas como propriedades de mudança.
  • Se todos os assinantes de uma propriedade ativarem a taxa de atualização variável, a solicitação de assinatura ativa a taxa de atualização variável para a propriedade, e o VHAL vai precisar enviar eventos de atualização da propriedade somente quando o valor da propriedade mudar.
  • Se algum assinante solicitar uma taxa de atualização fixa, a solicitação de assinatura para o VHAL desativa a taxa de atualização variável para a propriedade, e o AAOS filtra os eventos duplicados para os clientes que solicitam a taxa de atualização variável.
  • É ALTAMENTE RECOMENDADO oferecer suporte à taxa de atualização variável para todas as propriedades contínuas que não sejam de batimentos cardíacos para um melhor desempenho, a menos que os dados da propriedade sejam grandes (por exemplo, uma matriz de bytes de 1k de tamanho) e possam ocupar uma grande quantidade de memória para armazenamento em cache.
(Novidades do Android 16)
hasSupportedValueInfo
  • Se não for null, mostra se essa propriedade especifica valores mínimos ou máximos ou a lista de valores compatíveis.
  • Esse campo controla se as APIs de valor com suporte dinâmico: getMinMaxSupportedValue, getSupportedValuesLists, subscribeSupportedValueChange, unsubscribeSupportedValueChange têm suporte para esse ID de propriedade e ID de área.
  • Se não for null, o VHAL precisa implementar essas APIs para esse ID de propriedade e de área.
  • Se null ou no Android 15 ou anterior, os valores com suporte dinâmico para esse ID de propriedade e ID de área não são aceitos. O cliente precisa usar as informações de valor com suporte estático fornecidas na configuração da propriedade do veículo.

Tipos de área

Definidos como tipos enumerados em VehicleArea.aidl. Confira abaixo os tipos de área aceitos.

Tipo de área Valor Descrição
GLOBAL 0x01000000 Essa propriedade é global e não tem várias áreas.
JANELA 0x03000000 Área baseada em janelas, usa o tipo enumerado VehicleAreaWindow.
MIRROR 0x04000000 Área baseada em espelhos, usa o tipo enumerado VehicleAreaMirror.
SEAT 0x05000000 Área com base nos assentos, usa o tipo enumerado VehicleAreaSeat.
PORTA 0x06000000 Área com base em portas, usa o tipo enumerado VehicleAreaDoor.
RODA 0x07000000 Área baseada em rodas, usa a enumeração VehicleAreaWheel.

Cada propriedade com zona precisa usar um tipo de área predefinido. Cada tipo de área tem um conjunto de flags de bit definido em um tipo enumerado para o tipo de área. Por exemplo, a área SEAT define os tipos enumerados VehicleAreaSeat:

  • ROW_1_LEFT = 0x0001
  • ROW_1_CENTER = 0x0002
  • ROW_1_RIGHT = 0x0004
  • ROW_2_LEFT = 0x0010
  • ROW_2_CENTER = 0x0020
  • ROW_2_RIGHT = 0x0040
  • ROW_3_LEFT = 0x0100
  • ...

IDs de área

As propriedades com zonas são abordadas usando IDs de área. Cada propriedade zonada pode oferecer suporte a um ou mais IDs de área. Um ID de área consiste em uma ou mais flags do respectivo tipo enumerado. Por exemplo, uma propriedade que usa VehicleAreaSeat pode usar os seguintes IDs de área:

Nome Descrição
ROW_1_LEFT | ROW_1_RIGHT O ID de área se aplica aos dois assentos dianteiros.
ROW_2_LEFT Aplicável apenas ao banco traseiro esquerdo.
ROW_2_RIGHT Aplicável apenas ao banco traseiro direito.

Para saber mais, consulte HVAC.