Podczas definiowania mapowań SOME/IP w VSIDL opisujesz strukturę ładunku SOME/IP. Strukturę opisujesz za pomocą SomeIpType message, która umożliwia modelowanie typów prostych, ciągów znaków, tablic i złożonych struktur.
Na tej stronie dowiesz się, jak napisać definicję SomeIpStruct typu, która jest używana w blokach type_definition do mapowania zdarzeń i metod.
Wiadomość SomeIpStruct
SomeIpStruct reprezentuje strukturalny ładunek SOME/IP składający się z wielu pól. Zdefiniowana tutaj struktura jest używana przez brokera SOME/IP do tłumaczenia między surowymi bajtami SOME/IP a polami wiadomości SDV protobuf.
Podczas definiowania struktury konfigurujesz 2 główne właściwości:
length_field_size(opcjonalnie): określa rozmiar (w bajtach) pola długości, które poprzedza strukturę w zserializowanym ładunku. Użyte wartości z wyliczeniaLengthFieldSizetoZERO(bez pola długości),ONE,TWOiFOUR.field(powtarzane): lista pól, które składają się na strukturę.
Definiowanie pól struktury
Każde pole w sekcji SomeIpStruct musi zawierać:
field_name: nazwa pola. Musi ona dokładnie odpowiadać nazwie odpowiedniego pola zdefiniowanej w komunikacie SDV protobuf, aby zapewnić prawidłowe tłumaczenie komunikatu.field_type: typ danych SOME/IP pola (SomeIpType). Może to być typ prosty, ciąg znaków, tablica lub inna zagnieżdżona struktura.
Typy pól Write SomeIpType
Blok field_type konfiguruje konkretny typ danych za pomocą jednego z tych wariantów:
- Typy proste: użyj
someip_primitivez wartościami takimi jakUINT8,UINT32,INT32,FLOAT32iBOOL. - Ciągi znaków: użyj elementu
someip_stringi określ kodowanie (np.UTF_8,UTF_16_LE) oraz informacje o długości (fixed_lengthlublength_field_size). - Tablice: użyj
someip_arrayi zdefiniujarray_type(czyli kolejny rekursywnySomeIpType) wraz z informacjami o długości (fixed_lengthlublength_field_size). - Zagnieżdżone struktury: użyj znaku
someip_struct, aby rekursywnie osadzić inną definicję struktury.
Przykład: pisanie definicji typu struktury
Oto praktyczny przykład, jak napisać SomeIpStruct w bloku type_definition. Ten ładunek zawiera 8-bitową liczbę całkowitą bez znaku o nazwie interval i 32-bitową liczbę całkowitą bez znaku o nazwie 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
}
}
}
Dodawanie typów złożonych
Aby uwzględnić w strukturze pole ciągu znaków o dynamicznej długości i tablicę, dodaj pola w ten sposób:
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 }
}
}
}