При определении масштабируемых сервисно-ориентированных отображений промежуточного программного обеспечения по IP (SOME/IP) в VSIDL вы описываете структуру полезной нагрузки SOME/IP. Вы описываете структуру с помощью сообщения SomeIpType , которое позволяет моделировать примитивы, строки, массивы и сложные структуры.
На этой странице рассматривается, как написать определение типа SomeIpStruct , которое используется в блоках type_definition для сопоставления событий и методов.
Сообщение SomeIpStruct
Сообщение SomeIpStruct представляет собой структурированную полезную нагрузку SOME/IP, состоящую из нескольких полей. Определенная здесь структура используется брокером SOME/IP для преобразования между необработанными байтами SOME/IP и полями сообщения SDV protobuf.
При определении структуры вы задаёте два основных свойства:
-
length_field_size(необязательно): Задает размер (в байтах) поля длины, предшествующего структуре в сериализованной полезной нагрузке. Используемые значения из перечисленияLengthFieldSizeвключаютZERO(нет поля длины),ONE,TWOиFOUR. -
field(повторяется): Список полей, составляющих структуру.
Определите поля структуры.
Для каждого поля внутри SomeIpStruct требуется:
-
field_name: Имя поля. Оно должно точно совпадать с именем соответствующего поля, определенным в сообщении protobuf SDV, чтобы обеспечить корректный перевод сообщения. -
field_type: Тип данных поля (SomeIpType) в формате SOME/IP. Это может быть примитивный тип, строка, массив или другая вложенная структура.
Напишите типы полей SomeIpType
Блок field_type задает конкретный тип данных, используя один из следующих вариантов:
- Примитивные типы: используйте
someip_primitiveсо значениями типаUINT8,UINT32,INT32,FLOAT32иBOOL. - Строки: Используйте
someip_stringи укажите кодировку (например,UTF_8,UTF_16_LE) и информацию о длине (либоfixed_length, либоlength_field_size). - Массивы: Используйте
someip_arrayи определитеarray_type(который является еще одним рекурсивнымSomeIpType), а также информацию о длине (fixed_lengthилиlength_field_size). - Вложенные структуры: используйте
someip_structдля рекурсивного встраивания определения другой структуры.
Пример: Напишите определение типа структуры.
Вот практический пример того, как написать объект SomeIpStruct внутри блока type_definition . Эта полезная нагрузка содержит 8-битное беззнаковое целое число с именем interval и 32-битное беззнаковое целое число с именем 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
}
}
}
Добавить сложные типы
Чтобы включить в структуру строковое поле динамической длины и массив, добавьте поля следующим образом:
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 }
}
}
}