在 VSIDL 中定義可擴充的服務導向中介軟體 (SOME/IP) 對應時,您會描述 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:欄位名稱。這個名稱必須與 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並定義array_type(這是另一個遞迴SomeIpType),以及長度資訊 (fixed_length或length_field_size)。 - 巢狀結構體:使用
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 }
}
}
}