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(長さフィールドなし)、ONE、TWO、FOURがあります。field(繰り返し): 構造体を構成するフィールドのリスト。
構造体のフィールドを定義する
SomeIpStruct 内の各フィールドには、次のものが必要です。
field_name: フィールドの名前。メッセージが正しく変換されるように、SDV protobuf メッセージで定義されている対応するフィールド名と完全に一致している必要があります。field_type: フィールドの SOME/IP データ型(SomeIpType)。プリミティブ、文字列、配列、別のネストされた構造体にすることができます。
SomeIpType フィールドの型を記述する
field_type ブロックは、次のいずれかのバリアントを使用して特定のデータ型を構成します。
- プリミティブ型:
UINT8、UINT32、INT32、FLOAT32、BOOLなどの値を持つsomeip_primitiveを使用します。 - 文字列:
someip_stringを使用し、エンコード(UTF_8、UTF_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 }
}
}
}