Napisz definicję typu SOME/IP

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 wyliczenia LengthFieldSize to ZERO (bez pola długości), ONE, TWOFOUR.
  • 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_primitive z wartościami takimi jak UINT8, UINT32, INT32, FLOAT32BOOL.
  • Ciągi znaków: użyj elementu someip_string i określ kodowanie (np. UTF_8, UTF_16_LE) oraz informacje o długości (fixed_length lub length_field_size).
  • Tablice: użyj someip_array i zdefiniuj array_type (czyli kolejny rekursywny SomeIpType) wraz z informacjami o długości (fixed_length lub length_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 }
    }
  }
}