Escribe una definición de tipo de SOME/IP

Cuando defines asignaciones de middleware orientado a servicios escalable sobre IP (SOME/IP) en VSIDL, describes la estructura de la carga útil de SOME/IP. Describirás la estructura con el mensaje SomeIpType, que te permite modelar tipos primitivos, cadenas, arrays y structs complejos.

En esta página, se explica cómo escribir una definición de tipo SomeIpStruct, que se usa en los bloques type_definition para las asignaciones de eventos y métodos.

Mensaje SomeIpStruct

Un mensaje SomeIpStruct representa una carga útil estructurada de SOME/IP que consta de varios campos. El agente de SOME/IP usa la estructura definida aquí para traducir entre bytes sin procesar de SOME/IP y los campos de un mensaje de protobuf de SDV.

Cuando defines un struct, configuras dos propiedades principales:

  • length_field_size (opcional): Especifica el tamaño (en bytes) del campo de longitud que precede a la struct en la carga útil serializada. Los valores usados del enum LengthFieldSize incluyen ZERO (sin campo de longitud), ONE, TWO y FOUR.
  • field (repetido): Es una lista de campos que componen el struct.

Cómo definir campos de struct

Cada campo dentro de SomeIpStruct requiere lo siguiente:

  • field_name: Es el nombre del campo. Debe coincidir exactamente con el nombre del campo correspondiente definido en el mensaje .proto de SDV para garantizar la traducción correcta del mensaje.
  • field_type: Es el tipo de datos de SOME/IP del campo (SomeIpType). Puede ser un tipo primitivo, una cadena, un array o alguna otra struct anidada.

Escribe tipos de campos de SomeIpType

El bloque field_type configura el tipo de datos específico con una de las siguientes variantes:

  • Tipos primitivos: Usa someip_primitive con valores como UINT8, UINT32, INT32, FLOAT32 y BOOL.
  • Cadenas: Usa someip_string y especifica la codificación (por ejemplo, UTF_8, UTF_16_LE) y la información de longitud (fixed_length o length_field_size).
  • Arrays: Usa someip_array y define array_type (que es otro SomeIpType recursivo), junto con información de longitud (fixed_length o length_field_size).
  • Structs anidados: Usa someip_struct para incorporar otra definición de struct de forma recursiva.

Ejemplo: Escribe una definición de tipo struct

A continuación, se muestra un ejemplo práctico de cómo escribir un SomeIpStruct dentro de un bloque type_definition. Esta carga útil contiene un número entero de 8 bits sin firma llamado interval y un número entero de 32 bits sin firma llamado 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
    }
  }
}

Agrega tipos complejos

Para incluir un campo de cadena de longitud dinámica y un array dentro de la estructura, agrega campos como los siguientes:

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 }
    }
  }
}