دليل نقل البيانات من HIDL VHAL

لنقل عملية تنفيذ حالية لواجهة VHAL المستندة إلى HIDL إلى واجهة VHAL المستندة إلى AIDL، استخدِم بنية التنفيذ المرجعي لواجهة AIDL لتنفيذ واجهة IVehicleHardware.

إذا كانت عملية التنفيذ الحالية لواجهة HIDL تتّبع أيضًا التنفيذ المرجعي لواجهة HIDL، يكون المورّد قد نفّذ فئة VehicleHal. IVehicleHardware تشبه إلى حد كبير VehicleHal.

واجهة VHAL المستندة إلى HIDL واجهة VHAL المستندة إلى AIDL
getAllPropertyConfigs() مطابقة لـ VehicleHal.listProperties()
getValues(callback, requests) يمكن استدعاء VehicleHal.get() لكل طلب واستدعاء عمليات معاودة الاتصال.
dump() مطابقة لـ VehicleHal.dump()
checkHealth() يمكن عرض VehicleHal.get()
registerPropertyChangeCallback() مشابهة لضبط VehicleHal.mOnHalEvent

الاختلافات في أنواع AIDL

عند نقل البيانات من واجهة VHAL المستندة إلى HIDL إلى واجهة VHAL المستندة إلى AIDL، ضَع في اعتبارك هذه الاختلافات.

  1. تنشئ HIDL ملف رأس واحدًا (types.h) لجميع الأنواع التي تم إنشاؤها من types.hal. تنشئ AIDL ملف عنوان واحدًا لكل نوع. على سبيل المثال، VehiclePropValue.h من VehiclePropValue.aidl.

    نتيجةً لذلك، يجب تضمين جميع ملفات الرأس للأنواع التي تحتاج إليها. يحتوي ملف مساعد، VehicleHalTypes.h في مكتبة VehicleHalUtils، على معظم الأنواع الشائعة.

  2. بدلاً من ... استخدام
    hidl_vec std::vector
    hidl_string std::string
    android::sp std::shared_ptr
    android::wp std::weak_ptr
  3. جميع الأنواع المحدّدة في types.hal هي نفسها في AIDL باستثناء ما يلي:
    • تمت إزالة SubscribeFlags لأنّها غير مستخدَمة بسبب إزالة onPropertySet
    • تم الآن تحديد UserFlags في UserInfo.aidl ويجب تحديدها كعلامة بدلاً من تعداد. حقل علامة المستخدم هو عدد صحيح يحتوي على عدة UserInfo.USER_FLAG_XXX عمليات bit-or معًا.
    • تمت إعادة تسمية RawValue في VehiclePropValue ليصبح RawPropValue
    • تمت إعادة تسمية bytes في RawValue ليصبح byteValues