Ao definir mapeamentos de middleware escalonável orientado a serviços sobre IP (SOME/IP) no VSIDL, você descreve a estrutura do payload SOME/IP. Essa estrutura é descrita usando a mensagem SomeIpType, que permite modelar primitivos, strings, matrizes e structs complexos.
Esta página se concentra em como gravar 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 SOME/IP brutos e os campos de uma mensagem protobuf SDV.
Ao definir um struct, você configura duas propriedades principais:
length_field_size(opcional): especifica o tamanho (em bytes) do campo de comprimento que precede o 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 o struct.
Definir campos de struct
Cada campo dentro de SomeIpStruct requer:
field_name: o nome do campo. Ele precisa corresponder exatamente ao nome do campo correspondente definido na mensagem protobuf SDV para garantir a tradução adequada da mensagem.field_type: o tipo de dados SOME/IP do campo (SomeIpType). Ele pode ser um primitivo, uma string, uma matriz ou outro struct aninhado.
Gravar 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_8,UTF_16_LE) e as informações de comprimento (fixed_lengthoulength_field_size). - Matrizes:use
someip_arraye definaarray_type(que é outroSomeIpTyperecursivo), junto com informações de comprimento (fixed_lengthoulength_field_size). - Structs aninhados:use
someip_structpara incorporar outra definição de struct de forma recursiva.
Exemplo: gravar uma definição de tipo de struct
Confira um exemplo prático de como gravar 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 do 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 }
}
}
}