SOME/IP 型定義を記述する

VSIDL でスケーラブルなサービス指向ミドルウェア over IP(SOME/IP)マッピングを定義するときに、SOME/IP ペイロードの構造を記述します。SomeIpType メッセージを使用して構造を記述します。これにより、プリミティブ、文字列、配列、複雑な構造体をモデル化できます。

このページでは、イベントとメソッドのマッピングの type_definition ブロックで使用される SomeIpStruct 型の定義の作成方法について説明します。

SomeIpStruct メッセージ

SomeIpStruct メッセージは、複数のフィールドで構成される構造化された SOME/IP ペイロードを表します。ここで定義された構造は、SOME/IP ブローカーが未加工の SOME/IP バイトと SDV protobuf メッセージのフィールドの間で変換を行うために使用されます。

構造体を定義するときは、次の 2 つの主なプロパティを構成します。

  • length_field_size(省略可): シリアル化されたペイロードの構造体の前に付く長さフィールドのサイズ(バイト単位)を指定します。LengthFieldSize 列挙型で使用される値には、ZERO(長さフィールドなし)、ONETWOFOUR があります。
  • field(繰り返し): 構造体を構成するフィールドのリスト。

構造体のフィールドを定義する

SomeIpStruct 内の各フィールドには、次のものが必要です。

  • field_name: フィールドの名前。メッセージが正しく変換されるように、SDV protobuf メッセージで定義されている対応するフィールド名と完全に一致している必要があります。
  • field_type: フィールドの SOME/IP データ型(SomeIpType)。プリミティブ、文字列、配列、別のネストされた構造体にすることができます。

SomeIpType フィールドの型を記述する

field_type ブロックは、次のいずれかのバリアントを使用して特定のデータ型を構成します。

  • プリミティブ型: UINT8UINT32INT32FLOAT32BOOL などの値を持つ someip_primitive を使用します。
  • 文字列: someip_string を使用し、エンコード(UTF_8UTF_16_LE など)と長さ情報(fixed_length または length_field_size)を指定します。
  • 配列: someip_array を使用し、長さ情報(fixed_length または length_field_size)とともに array_type(別の再帰的 SomeIpType)を定義します。
  • ネストされた構造体: someip_struct を使用して、別の構造体定義を再帰的に埋め込みます。

例: 構造体型の定義を記述する

次に、type_definition ブロック内に SomeIpStruct を記述する実用的な例を示します。このペイロードには、interval という名前の 8 ビット符号なし整数と、counter という名前の 32 ビット符号なし整数が含まれています。

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