VSIDL でスケーラブルなサービス指向ミドルウェア over IP(SOME/IP)マッピングを定義するときは、各 SOME/IP メッセージのワイヤー形式のシリアル化とペイロード エンコードを記述します。SomeIpType と SomeIpStruct の定義を使用すると、AUTOSAR ARXML(SOMEIP-TRANSFORMATION-PROPS)と SOME/IP スタック ペイロード エンコード ルール(COVESA vsomeip を含む)に一致するプリミティブ、文字列、配列、ネストされた構造体をモデル化できます。
このページでは、イベントとメソッドのマッピングの 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 ブロックは、次のいずれかのバリアントを使用して特定のデータ型を構成します。
- プリミティブ型:
someip_primitiveを使用し、UINT8、UINT32、INT32、FLOAT32、BOOLなどの値を指定します。 - 文字列:
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 }
}
}
}
AUTOSAR ARXML と vsomeip ペイロード エンコードをマッピングする
AAOS SDV を外部の AUTOSAR 電子制御ユニット(ECU)または COVESA vsomeip などの SOME/IP スタックと統合する場合は、VSIDL type_definition がシステムの ARXML(SOMEIP-TRANSFORMATION-PROPS と SOMEIP-DATA-PROTOTYPE-TRANSFORMATION-PROPS)または vsomeip 構成で定義されているワイヤ シリアル化パラメータと一致していることを確認してください。
AUTOSAR ARXML と vsomeip パラメータ |
VSIDL SomeIpType の同等 |
ワイヤ シリアル化とペイロード エンコード ルール |
|---|---|---|
sizeOfStructLengthField(0、1、2、4 バイト) |
SomeIpStruct.length_field_size(ZERO、ONE、TWO、FOUR) |
シリアル化された構造体ペイロードの前に、明示的なバイト長の接頭辞を追加します。長さの接頭辞のない固定レイアウト構造体の場合、ZERO に設定します。 |
sizeOfArrayLengthField(0、1、2、4 バイト) |
SomeIpArray.length_field_size(ZERO、ONE、TWO、FOUR)または fixed_length |
動的配列には、シリアル化された配列要素のバイト長を示す長さフィールドの接頭辞(ONE、TWO、または FOUR バイト)が必要です。 |
sizeOfStringLengthField とエンコード(UTF-8、UTF-16LE、UTF-16BE) |
SomeIpString.string_encoding と length_field_size、または fixed_length |
可変長文字列と固定長文字列の AUTOSAR 文字列シリアル化ルール(バイト オーダー マークと null 終端処理を含む)に一致します。 |
プリミティブ基本型(uint8、uint16、uint32、float32、boolean) |
SomeIpPrimitive(UINT8、UINT16、UINT32、INT32、FLOAT32、BOOL) |
ターゲットの protobuf フィールドに一致するネットワーク バイト順(SOME/IP 仕様に従ってデフォルトでビッグ エンディアン)でプリミティブ値をエンコードします。 |