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

نقدّم نموذج تنفيذ مرجعيًا لمكوّن 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 (يجب ضبط هذه السمة في وقت الإنشاء أو في وقت مبكر جدًا أثناء عملية التمهيد قبل بدء VHAL)، يتم استخدامملف الإعدادات من مجلد /vendor/etc/automotive/vhaloverride/ على الجهاز لإلغاء الإعدادات الحالية. يمكن أن يستخدم موفِّر الخدمة نهجًا مشابهًا لكي لا تكون إعدادات المواقع المتوافقة مع VHAL- برمجية ثابتة، بل يمكن تحديدها ديناميكيًا في وقت البدء. يجب أن تكون قائمة إعدادات سمات المركبات ثابتة بعد بدء VHAL.

بدءًا من Android 16، يوفّر GRPCVehicleHardware طريقة أخرى لتنفيذ IVehicleHardware المرجعية. يفترض هذا التنفيذ توفُّر خادم منفصل يعمل على جهاز أو جهاز افتراضي بعيد يحتوي على منطق معالجة الموقع. يعمل VHAL الذي يعمل على أجهزة AAOS كخادم وكيل يعيد توجيه الطلبات إلى الخادم البعيد. اطّلِع على grpc لمعرفة المزيد من التفاصيل.