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 enumLengthFieldSizeincluyenZERO(sin campo de longitud),ONE,TWOyFOUR.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_primitivecon valores comoUINT8,UINT32,INT32,FLOAT32yBOOL. - Cadenas: Usa
someip_stringy especifica la codificación (por ejemplo,UTF_8,UTF_16_LE) y la información de longitud (fixed_lengtholength_field_size). - Arrays: Usa
someip_arrayy definearray_type(que es otroSomeIpTyperecursivo), junto con información de longitud (fixed_lengtholength_field_size). - Structs anidados: Usa
someip_structpara 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 }
}
}
}