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