Menulis definisi jenis SOME/IP

Saat menentukan pemetaan middleware berorientasi layanan (SOME/IP) yang skalabel melalui IP di VSIDL, Anda menjelaskan serialisasi format kabel dan encoding payload dari setiap pesan SOME/IP. Dengan menggunakan definisi SomeIpType dan SomeIpStruct, Anda dapat memodelkan primitif, string, array, dan struct bertingkat yang cocok dengan AUTOSAR ARXML (SOMEIP-TRANSFORMATION-PROPS) dan aturan encoding payload stack SOME/IP (termasuk COVESA vsomeip).

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 (tanpa 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 terkait yang ditentukan dalam pesan protobuf SDV untuk memastikan terjemahan pesan yang tepat.
  • field_type: Jenis data SOME/IP 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 atau 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 }
    }
  }
}

Memetakan encoding payload AUTOSAR ARXML dan vsomeip

Saat mengintegrasikan SDV AAOS dengan unit kontrol elektronik (ECU) AUTOSAR eksternal atau stack SOME/IP seperti COVESA vsomeip, pastikan VSIDL type_definition Anda cocok dengan parameter serialisasi melalui kabel yang ditentukan dalam ARXML (SOMEIP-TRANSFORMATION-PROPS dan SOMEIP-DATA-PROTOTYPE-TRANSFORMATION-PROPS) atau konfigurasi vsomeip sistem Anda:

Parameter AUTOSAR ARXML dan vsomeip Setara dengan VSIDL SomeIpType Aturan serialisasi melalui kabel dan encoding payload
sizeOfStructLengthField (0, 1, 2, 4 byte) SomeIpStruct.length_field_size (ZERO, ONE, TWO, FOUR) Menambahkan awalan panjang byte eksplisit sebelum payload struct yang diserialisasi. Tetapkan ke ZERO untuk struktur tata letak tetap tanpa awalan panjang.
sizeOfArrayLengthField (0, 1, 2, 4 byte) SomeIpArray.length_field_size (ZERO, ONE, TWO, FOUR) atau fixed_length Array dinamis memerlukan awalan kolom panjang (ONE, TWO, atau FOUR byte) yang menunjukkan panjang byte elemen array yang diserialisasi.
sizeOfStringLengthField dan encoding (UTF-8, UTF-16LE, UTF-16BE) SomeIpString.string_encoding dan length_field_size atau fixed_length Mencocokkan aturan serialisasi string AUTOSAR (termasuk tanda urutan byte dan penanganan penghentian null) untuk string dengan panjang variabel dan panjang tetap.
Jenis dasar primitif (uint8, uint16, uint32, float32, boolean) SomeIpPrimitive (UINT8, UINT16, UINT32, INT32, FLOAT32, BOOL) Mengenkode nilai primitif dalam urutan byte jaringan (big-endian secara default sesuai spesifikasi SOME/IP) yang cocok dengan kolom protobuf target.