Menulis definisi jenis SOME/IP

Saat menentukan pemetaan middleware berorientasi layanan yang skalabel melalui IP (SOME/IP) di VSIDL, Anda menjelaskan struktur payload SOME/IP. Anda menjelaskan struktur menggunakan pesan SomeIpType, yang memungkinkan Anda memodelkan primitif, string, array, dan struct kompleks.

Halaman ini berfokus pada cara menulis definisi jenis SomeIpStruct, yang digunakan dalam blok type_definition untuk pemetaan peristiwa dan metode.

Pesan SomeIpStruct

Pesan SomeIpStruct merepresentasikan payload SOME/IP terstruktur yang terdiri dari beberapa kolom. Struktur yang ditentukan di sini digunakan oleh broker SOME/IP untuk menerjemahkan antara byte SOME/IP mentah dan kolom pesan protobuf SDV.

Saat menentukan struct, Anda mengonfigurasi dua properti utama:

  • length_field_size (opsional): Menentukan ukuran (dalam byte) kolom panjang yang mendahului struct dalam payload yang diserialisasi. Nilai yang digunakan dari enum LengthFieldSize mencakup ZERO (tidak ada kolom panjang), ONE, TWO, dan FOUR.
  • field (berulang): Daftar kolom yang membentuk struct.

Menentukan kolom struct

Setiap kolom di dalam SomeIpStruct memerlukan:

  • field_name: Nama kolom. Nama ini harus sama persis dengan nama kolom yang sesuai yang ditentukan dalam pesan protobuf SDV untuk memastikan terjemahan pesan yang tepat.
  • field_type: Jenis data SOME/IP dari kolom (SomeIpType). Ini bisa berupa primitif, string, array, atau struct bertingkat lainnya.

Menulis jenis kolom SomeIpType

Blok field_type mengonfigurasi jenis data tertentu menggunakan salah satu varian berikut:

  • Jenis primitif: Gunakan someip_primitive dengan nilai seperti UINT8, UINT32, INT32, FLOAT32, dan BOOL.
  • String: Gunakan someip_string dan tentukan encoding (misalnya, UTF_8, UTF_16_LE) dan informasi panjang (fixed_length atau length_field_size).
  • Array: Gunakan someip_array dan tentukan array_type (yang merupakan SomeIpType rekursif lain), beserta informasi panjang (fixed_length atau length_field_size).
  • Struct bertingkat: Gunakan someip_struct untuk menyematkan definisi struct lain secara rekursif.

Contoh: Menulis definisi jenis struct

Berikut adalah contoh praktis cara menulis SomeIpStruct di dalam blok type_definition. Payload ini berisi bilangan bulat 8-bit tanpa tanda bernama interval dan bilangan bulat 32-bit tanpa tanda bernama 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
    }
  }
}

Menambahkan jenis kompleks

Untuk menyertakan kolom string panjang dinamis dan array di dalam struct, tambahkan kolom seperti ini:

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 }
    }
  }
}