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 enumLengthFieldSizemencakupZERO(tidak ada kolom panjang),ONE,TWO, danFOUR.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_primitivedengan nilai sepertiUINT8,UINT32,INT32,FLOAT32, danBOOL. - String: Gunakan
someip_stringdan tentukan encoding (misalnya,UTF_8,UTF_16_LE) dan informasi panjang (fixed_lengthataulength_field_size). - Array: Gunakan
someip_arraydan tentukanarray_type(yang merupakanSomeIpTyperekursif lain), beserta informasi panjang (fixed_lengthataulength_field_size). - Struct bertingkat: Gunakan
someip_structuntuk 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 }
}
}
}