Configurações da propriedade

Cada propriedade compatível é especificada por uma configuração 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 em VehicleProperty.aidl ou uma propriedade do fornecedor. O ID da propriedade é criado usando a operação bit a bit OR dos seguintes campos (da direita para a esquerda):

  • (0x00000000) 16 bits: um ID exclusivo do intervalo 0x0100 - 0xffff.
  • (0x00000000) 8 bits: Tipos de propriedade, que define o tipo da propriedade.
  • (0x00000000) 4 bits: tipos de área.
  • (0x00000000) 4 bits: VehiclePropertyGroup. Pode ser SYSTEM (0x10000000) ou VENDOR (0x20000000). Consulte Propriedades do fornecedor para propriedades que 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, precisa ser um dos modos de acesso definidos documentados em VehicleProperty.aidl.
  • Para propriedades que têm acesso por área, esse é o subconjunto máximo do acesso por área. Por exemplo, se as propriedades tiverem duas áreas cujo acesso seja READ e READ_WRITE, isso deverá 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 depois de uma inicialização do sistema. ON_CHANGE significa que a VHAL precisa informar quando o valor muda. CONTINUOUS significa que o valor da propriedade muda continuamente, e a VHAL precisa gerar relatórios com base na taxa de amostragem da assinatura.
  • Para propriedades do sistema, isso 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 estar 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 estar vazio.
minSampleRate e maxSampleRate A taxa de amostragem mínima e máxima compatível para 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 da VHAL. Nem todas as taxas de amostragem entre o mínimo e o máximo precisam ser compatíveis.

Tipos de propriedade

Definido como enums em VehiclePropertyType.aidl. Os tipos de propriedades compatíveis estão listados na tabela a seguir.

Tipo de propriedade Valor Descrição
STRING 0x00100000 Propriedade de string que 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 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 escalares ou vetoriais. O formato exato precisa ser fornecido na matriz de configuração na configuração da propriedade.

Para propriedades do tipo MIXED do fornecedor, 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], em que o número indica o tamanho de Integer[] na propriedade
  • configArray[4], 1 indica que a propriedade tem um valor Long.
  • configArray[5], em que o número indica o tamanho de Long[] na propriedade
  • configArray[6], 1 indica que a propriedade tem um valor Float.
  • configArray[7], em que o número indica o tamanho de Float[] na propriedade
  • configArray[8], em que 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 zonais (propriedades com várias áreas compatíveis). 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 no momento da inicialização. Precisa ser 0 para todos os outros tipos. Será ignorado se os dois forem 0.
  • Para a propriedade global, se for necessário definir valores mínimo e máximo, use uma configuração de área com o ID 0.
  • Esse valor é estático e não muda mesmo que o valor mínimo ou máximo seja alterado no ambiente de execução. Implemente IVehicle#getMinMaxSupportedValue para valor mínimo ou máximo dinâmico.
minInt64Value e maxInt64Value
  • Valor mínimo e máximo opcional para propriedades do tipo INT64 no momento da inicialização. Precisa ser 0 para todos os outros tipos. Será ignorado se os dois forem 0.
  • Para a propriedade global, se for necessário definir valores mínimo e máximo, use uma configuração de área com o ID 0.
  • Esse valor é estático e não muda mesmo que o valor mínimo ou máximo seja alterado no ambiente de execução. Implemente IVehicle#getMinMaxSupportedValue para 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. Ignorado se os dois forem 0,0.
  • Para a propriedade global, se for necessário definir valores mínimo e máximo, use uma configuração de área com o ID 0.
  • Esse valor é estático e não muda mesmo que o valor mínimo ou máximo seja alterado no ambiente de execução. Implemente IVehicle#getMinMaxSupportedValue para valor mínimo ou máximo dinâmico.
(Novidade no Android 14)
supportedEnumValues
  • Lista opcional de valores compatíveis na inicialização se a propriedade for definida como um tipo de propriedade de enumeração. Se não for especificado (vazio) ou antes do Android 14, será considerado que todos os valores de enumeração são compatíveis.
  • Para a propriedade global, se for necessário definir valores de enumeração compatíveis, use uma configuração de área com o ID 0.
  • Esse valor é estático e não muda mesmo que os valores compatíveis mudem no ambiente de execução. Implemente IVehicle#getSupportedValuesLists para valores dinâmicos compatíveis.
  • Isso se aplica apenas a propriedades do tipo enum. Para outros tipos, esse campo precisa estar vazio. Para expor valores compatíveis para outros tipos que não são de enumeração, use IVehicle#getSupportedValuesLists.
(Novidade no Android 15)
supportVariableUpdateRate
  • Se a taxa de atualização variável é compatível. Isso se aplica apenas a propriedades contínuas.
  • Se 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 para a VHAL vai ativar a taxa de atualização variável para a propriedade, e a VHAL precisará enviar eventos de atualização de propriedade somente quando o valor da propriedade mudar.
  • Se algum assinante solicitar uma taxa de atualização fixa, a solicitação de assinatura para VHAL desativará a taxa de atualização variável para a propriedade, e o AAOS vai filtrar os eventos duplicados para os clientes que solicitarem uma taxa de atualização variável.
  • É ALTAMENTE RECOMENDADO oferecer suporte a taxa de atualização variável para todas as propriedades contínuas que não sejam de pulsação para melhorar o 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.
(Novidade no Android 16)
hasSupportedValueInfo
  • Se não for null, vai mostrar se essa propriedade especifica valores mínimos ou máximos compatíveis ou uma lista de valores compatíveis.
  • Esse campo controla se as APIs de valores dinâmicos aceitos: getMinMaxSupportedValue, getSupportedValuesLists, subscribeSupportedValueChange, unsubscribeSupportedValueChange são aceitas para esse ID da propriedade e ID da área.
  • Se não for null, a VHAL precisará implementar essas APIs para o ID da propriedade e o ID da área.
  • Se null ou no Android 15 ou versões anteriores, os valores dinâmicos aceitos para esse ID de propriedade e ID de área não serão compatíveis. O cliente precisa usar as informações de valor estático compatíveis fornecidas na configuração da propriedade do veículo.

Tipos de área

Definido como enums 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.
WINDOW 0x03000000 Área com base em janelas, usa a enumeração VehicleAreaWindow.
MIRROR 0x04000000 Área com base em espelhos, usa a enumeração VehicleAreaMirror.
SEAT 0x05000000 Área com base em assentos, usa a enumeração VehicleAreaSeat.
DOOR 0x06000000 Área com base em portas, usa a enumeração VehicleAreaDoor.
RODA 0x07000000 Área com base em rodas, usa a enumeração VehicleAreaWheel.

Cada propriedade zoneada precisa usar um tipo de área predefinido. Cada tipo de área tem um conjunto de flags de bits definidas em uma enumeração para o tipo de área. Por exemplo, a área SEAT define enums 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 divididas em zonas são abordadas por IDs de área. Cada propriedade dividida em zonas pode ser compatível com um ou mais IDs de área. Um ID de área consiste em uma ou mais flags da respectiva enumeração. Por exemplo, uma propriedade que usa VehicleAreaSeat pode usar os seguintes IDs de área:

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

Para saber mais, consulte AVAC.