التنفيذ المرجعي

نقدّم نموذج تنفيذ مرجعيًا لمكوّن VHAL في AIDL. يتم تنفيذ سلسلة التعليمات الرئيسية للخدمة في VehicleService.cpp. يمكن العثور على تنفيذ واجهة VHAL على الرابط DefaultVehicleHal.cpp.

يستند التنفيذ المرجعي إلى بنية من طبقتَين. في الطبقة العليا، DefaultVehicleHal، يتم تنفيذ واجهة VHAL AIDL وتوفير منطق VHAL العام لجميع الأجهزة. في الطبقة السفلية، ينفذ FakeVehicleHardware واجهة IVehicleHardware. تحاكي هذه الفئة منطق VHAL للتفاعل مع الأجهزة الفعلية أو ناقل المركبة، وهي خاصة بالجهاز. يمكن للمورّدين اختياريًا تكييف هذه البنية نفسها وإعادة استخدام فئة DefaultVehicleHal نفسها (بتوسيع نطاقها لإعادة كتابة طريقة) وتقديم تنفيذ IVehicleHardware خاص بهم.

تنفيذ مرجع VHAL
الشكل 1. مرجع تنفيذ VHAL

يحتوي DefaultVehicleHal على المنطق التالي الذي يُعدّ عامًا ويمكن تطبيقه على أي عملية تنفيذ لـ VHAL.

  • تنفيذ واجهة IVehicle
  • تُجري عمليات فحص أساسية للبيانات المُدخلة، بما في ذلك التحقّق من عدم توفّر أرقام تعريف مكرّرة.
  • تخصيص عناصر العميل (مثل GetValuesClient) لكل عملية لكل عميل رابط، وإضافة كل عنصر إلى مجموعة عالمية
  • تدير منطق عمليات الاستدعاء غير المتزامنة، مثل إضافة طلب في انتظار المراجعة إلى مجموعة طلبات في انتظار المراجعة. يحلّ الطلبات المعلّقة عند تلقّي النتائج أو يعرض خطأ عند انتهاء مهلة أحد الطلبات المعلّقة
  • تُستخدم لتحويل LargeParcelable إلى سلسلة وتحويلها من سلسلة (راجِع ParcelableUtils.h).
  • إدارة الاشتراك (راجِع SubscriptionManager.h)
  • التحقّق من الأذونات (اطّلِع على الدالتَين checkReadPermission و checkWritePermission).
  • تستدعي هذه الدالة IVehicleHardware.checkHealth بشكل دوري وترسل إشارات فحص الحالة (اطّلِع على دالة checkHealth).

IVehicleHardware هي واجهة عامة تُستخدَم لتمثيل تنفيذ VHAL الخاص بالأجهزة. التنفيذ المرجعي لـ IVehicleHardware هو FakeVehicleHardware، الذي يستخدم خريطة في الذاكرة لتخزين قيمة السمة ولا يتواصل مع ناقل بيانات المركبة الفعلي. ومن المفترض أن يتم تشغيله على محاكي بدون أي تبعيات خاصة بالأجهزة. يجب ألا تستخدم عمليات تنفيذ المورّدين هذا الإطار كما هو، ويجب أن تضيف منطقًا خاصًا بوحدة تحكّم المركبة.

في Android 14، يقرأ FakeVehicleHardware إعدادات الموقع المتوافقة أثناء التشغيل أثناء الإعداد من مجلد /vendor/etc/automotive/vhalconfig/ على الجهاز، الذي يحتوي على ملف إعدادات بتنسيق JSON. اطّلِع على ملف README المرجعي لـ VHAL لمعرفة تنسيق ملف الإعدادات ومحتواه.

تتيح FakeVehicleHardware أيضًا إلغاء ملف الإعدادات للاختبار. في حال ضبط خاصيّة النظام persist.vendor.vhal_init_value_override، يتم استخدام ملف الإعداد من مجلد /vendor/etc/automotive/vhaloverride/ على الجهاز لإلغاء الإعدادات الحالية. يمكن أن يستخدم موفِّر الخدمة نهجًا مشابهًا لكي لا تكون إعدادات المواقع المتوافقة مع VHAL- برمجية ثابتة، بل يمكن تحديدها ديناميكيًا في وقت البدء. يجب أن تكون إعدادات خصائص المركبة ثابتة بعد تشغيل الجهاز.