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

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

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

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

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

  • تنفيذ واجهة IVehicle
  • تُجري عمليات التحقّق الأساسية من الإدخالات، بما في ذلك التحقّق من المعرّفات المكرّرة.
  • تخصّص هذه السمة عناصر العميل (مثل GetValuesClient) لكل عملية لكل عميل من عملاء Binder، وتضيف كل عنصر إلى مجموعة عامة.
  • تدير هذه السمة منطق عمليات معاودة الاتصال غير المتزامنة، مثل إضافة طلب في انتظار المراجعة إلى مجموعة طلبات في انتظار المراجعة. يحلّ الطلبات المعلّقة عند تلقّي النتائج أو يعرض خطأ عند انتهاء المهلة المحدّدة لأحد الطلبات المعلّقة.
  • تتم عملية التسلسل وإلغاء التسلسل لـ 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 لمزيد من التفاصيل.