عند تحديد عمليات الربط بين SOME/IP والبرامج الوسيطة القابلة للتوسّع والموجّهة نحو الخدمات (SOME/IP) في VSIDL، يمكنك وصف بنية حمولة SOME/IP. يمكنك وصف البنية باستخدام رسالة SomeIpType، التي تتيح لك تصميم النماذج الأولية والسلاسل والمصفوفات والبنيات المعقّدة.
تركز هذه الصفحة على كيفية كتابة تعريف نوع SomeIpStruct، الذي يُستخدم في كتل type_definition لعمليات ربط الأحداث والطرق.
رسالة SomeIpStruct
تمثّل رسالة SomeIpStruct حمولة SOME/IP منظَّمة تتألف من حقول متعدّدة. يستخدم وسيط SOME/IP البنية المحدّدة هنا للترجمة بين وحدات بايت SOME/IP الأولية وحقول رسالة SDV protobuf.
عند تحديد بنية، يمكنك ضبط سمتَين رئيسيتَين:
length_field_size(اختياري): تحدّد حجم (بالبايت) حقل الطول الذي يسبق البنية في الحمولة المتسلسلة. تشمل القيم المستخدَمة من تعدادLengthFieldSizeكلاً منZERO(لا يوجد حقل طول) وONEوTWOوFOUR.field(متكرّر): قائمة بالحقول التي تشكّل البنية.
تحديد حقول البنية
يتطلّب كل حقل داخل SomeIpStruct ما يلي:
field_name: اسم الحقل يجب أن يتطابق هذا الاسم تمامًا مع اسم الحقل المقابل المحدّد في رسالة SDV protobuf لضمان ترجمة الرسالة بشكل صحيح.field_type: نوع بيانات SOME/IP للحقل (SomeIpType). يمكن أن يكون هذا النوع نموذجًا أوليًا أو سلسلة أو مصفوفة أو بنية أخرى متداخلة.
كتابة أنواع حقول SomeIpType
يضبط البلوك field_type نوع البيانات المحدّد باستخدام أحد المتغيّرات التالية:
- الأنواع الأولية: استخدِم
someip_primitiveمع قيم مثلUINT8وUINT32وINT32وFLOAT32وBOOL. - السلاسل: استخدِم
someip_stringوحدِّد الترميز (على سبيل المثال،UTF_8أوUTF_16_LE) ومعلومات الطول (fixed_lengthأوlength_field_size). - المصفوفات: استخدِم
someip_arrayوحدِّدarray_type(وهوSomeIpTypeآخر متكرّر) ومعلومات الطول (fixed_lengthأوlength_field_size). - البنيات المتداخلة: استخدِم
someip_structلتضمين تعريف بنية أخرى بشكل متكرّر.
مثال: كتابة تعريف نوع بنية
في ما يلي مثال عملي على كيفية كتابة SomeIpStruct داخل بلوك type_definition. تحتوي هذه الحمولة على عدد صحيح غير مُوقَّع مكوّن من 8 بتات باسم interval وعدد صحيح غير مُوقَّع مكوّن من 32 بتًا باسم 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
}
}
}
إضافة أنواع معقّدة
لتضمين حقل سلسلة متغيّر الطول ومصفوفة داخل البنية، أضِف حقولاً على النحو التالي:
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 }
}
}
}