Напишите определение типа SOME/IP.

При определении масштабируемых сервисно-ориентированных отображений промежуточного программного обеспечения по 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 }
    }
  }
}