كتابة تعريف لنوع SOME/IP

عند تحديد عمليات الربط بين 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 }
    }
  }
}