Ao definir mapeamentos de middleware escalonável orientado a serviços sobre IP (SOME/IP) em VSIDL, você descreve a serialização do formato de transmissão e a codificação de payload de cada mensagem SOME/IP. Usando as definições SomeIpType e SomeIpStruct, é possível modelar primitivos, strings, matrizes e structs aninhados que correspondem ao AUTOSAR ARXML (SOMEIP-TRANSFORMATION-PROPS) e às regras de codificação de payload da pilha SOME/IP (incluindo COVESA vsomeip).
Esta página se concentra em como escrever uma definição de tipo SomeIpStruct, que é usada em blocos type_definition para mapeamentos de eventos e métodos.
Mensagem SomeIpStruct
Uma mensagem SomeIpStruct representa um payload SOME/IP estruturado que consiste em vários campos. A estrutura definida aqui é usada pelo broker SOME/IP para
traduzir entre bytes brutos de SOME/IP e os campos de uma mensagem protobuf SDV.
Ao definir uma struct, você configura duas propriedades principais:
length_field_size(opcional): especifica o tamanho (em bytes) do campo de comprimento que precede a struct no payload serializado. Os valores usados da enumeraçãoLengthFieldSizeincluemZERO(sem campo de comprimento),ONE,TWOeFOUR.field(repetido): uma lista de campos que compõem a struct.
Definir campos de struct
Cada campo em SomeIpStruct exige:
field_name: o nome do campo. Ele precisa corresponder exatamente ao nome do campo correspondente definido na mensagem protobuf do SDV para garantir a tradução adequada da mensagem.field_type: o tipo de dados SOME/IP do campo (SomeIpType). Pode ser uma primitiva, string, matriz ou outra struct aninhada.
Escrever tipos de campo SomeIpType
O bloco field_type configura o tipo de dados específico usando uma das seguintes variantes:
- Tipos primitivos:use
someip_primitivecom valores comoUINT8,UINT32,INT32,FLOAT32eBOOL. - Strings:use
someip_stringe especifique a codificação (por exemplo,UTF_8ouUTF_16_LE) e as informações de comprimento (fixed_lengthoulength_field_size). - Matrizes:use
someip_arraye definaarray_type(que é outroSomeIpTyperecursivo), além de informações de comprimento (fixed_lengthoulength_field_size). - Structs aninhadas:use
someip_structpara incorporar outra definição de struct de forma recursiva.
Exemplo: escrever uma definição de tipo struct
Confira um exemplo prático de como escrever um SomeIpStruct dentro de um bloco
type_definition. Esse payload contém um número inteiro não assinado de 8 bits chamado
interval e um número inteiro não assinado de 32 bits chamado counter:
type_definition {
# No length field precedes this struct
length_field_size: ZERO
# First field: interval
field {
field_name: "interval"
field_type {
someip_primitive: UINT8
}
}
# Second field: counter
field {
field_name: "counter"
field_type {
someip_primitive: UINT32
}
}
}
Adicionar tipos complexos
Para incluir um campo de string de comprimento dinâmico e uma matriz dentro da struct, adicione campos como este:
field {
field_name: "status_message"
field_type {
someip_string {
string_encoding: UTF_8
length_field_size: FOUR
}
}
}
field {
field_name: "measurements"
field_type {
someip_array {
length_field_size: FOUR
array_type { someip_primitive: FLOAT32 }
}
}
}
Mapear ARXML do AUTOSAR e codificação de payload vsomeip
Ao integrar o SDV do AAOS com unidades de controle eletrônico (ECUs) AUTOSAR externas ou pilhas SOME/IP, como COVESA vsomeip, verifique se o VSIDL type_definition corresponde aos parâmetros de serialização de fio definidos no ARXML do sistema (SOMEIP-TRANSFORMATION-PROPS e SOMEIP-DATA-PROTOTYPE-TRANSFORMATION-PROPS) ou na configuração vsomeip:
AUTOSAR ARXML e parâmetro vsomeip |
Equivalente em VSIDL SomeIpType |
Regra de serialização de transmissão e codificação de payload |
|---|---|---|
sizeOfStructLengthField (0, 1,
2, 4 bytes) |
SomeIpStruct.length_field_size (ZERO,
ONE, TWO, FOUR) |
Adiciona um prefixo de comprimento de byte explícito antes do payload da struct serializada. Defina como ZERO para estruturas de layout fixo sem um prefixo de comprimento. |
sizeOfArrayLengthField (0, 1,
2, 4 bytes) |
SomeIpArray.length_field_size (ZERO,
ONE, TWO, FOUR) ou
fixed_length |
As matrizes dinâmicas exigem um prefixo de campo de comprimento (ONE,
TWO ou FOUR bytes) que indica o comprimento em bytes
dos elementos da matriz serializada. |
sizeOfStringLengthField e codificação (UTF-8,
UTF-16LE, UTF-16BE) |
SomeIpString.string_encoding e
length_field_size ou fixed_length |
Corresponde às regras de serialização de strings AUTOSAR (incluindo marca de ordem de bytes e tratamento de encerramento nulo) para strings de comprimento variável e fixo. |
Tipos básicos primitivos (uint8, uint16, uint32, float32, boolean) |
SomeIpPrimitive (UINT8,
UINT16, UINT32, INT32,
FLOAT32, BOOL) |
Codifica valores primitivos na ordem de bytes da rede (big-endian por padrão de acordo com a especificação SOME/IP) correspondente ao campo protobuf de destino. |