نقدّم
نموذج تنفيذ مرجعيًا
لمكوّن VHAL في AIDL. يتم تنفيذ سلسلة التعليمات الرئيسية للخدمة
في
VehicleService.cpp
.
يمكن العثور على تنفيذ واجهة VHAL على الرابط
DefaultVehicleHal.cpp
.
يستند التنفيذ المرجعي إلى بنية من طبقتَين. في الطبقة العليا،
DefaultVehicleHal
، يتم تنفيذ واجهة VHAL AIDL وتوفير منطق VHAL
العام لجميع الأجهزة. في الطبقة السفلية، ينفذ FakeVehicleHardware
واجهة IVehicleHardware
. تحاكي هذه الفئة منطق VHAL
للتفاعل مع الأجهزة الفعلية أو ناقل المركبة، وهي خاصة بالجهاز. يمكن للمورّدين
اختياريًا تكييف هذه البنية نفسها وإعادة استخدام فئة DefaultVehicleHal
نفسها (بتوسيع
نطاقها لإعادة كتابة طريقة) وتقديم تنفيذ IVehicleHardware
خاص بهم.
يحتوي 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-
برمجية ثابتة، بل يمكن تحديدها ديناميكيًا في وقت البدء.
يجب أن تكون إعدادات خصائص المركبة ثابتة بعد تشغيل الجهاز.