Escrever uma definição de tipo SOME/IP

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ção LengthFieldSize incluem ZERO (sem campo de comprimento), ONE, TWO e FOUR.
  • 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_primitive com valores como UINT8, UINT32, INT32, FLOAT32 e BOOL.
  • Strings:use someip_string e especifique a codificação (por exemplo, UTF_8, UTF_16_LE) e as informações de comprimento (fixed_length ou length_field_size).
  • Matrizes:use someip_array e defina array_type (que é outro SomeIpType recursivo), junto com informações de comprimento (fixed_length ou length_field_size).
  • Structs aninhados:use someip_struct para 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 }
    }
  }
}