نحن نقدم تطبيقًا مرجعيًا لـ AIDL VHAL. يتم تنفيذ مؤشر ترابط الخدمة الرئيسي في 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. راجع ملف VHAL README المرجعي للتعرف على تنسيق ملف التكوين ومحتوى ملف التكوين.
يدعم FakeVehicleHardware
أيضًا تجاوز ملف التكوين للاختبار. إذا تم تعيين خاصية النظام persist.vendor.vhal_init_value_override
، فإنها تستخدم ملف التكوين من المجلد /vendor/etc/automotive/vhaloverride/
على الجهاز لتجاوز التكوين الحالي. يمكن أن يستخدم تطبيق البائع أسلوبًا مشابهًا بحيث لا يكون تكوين الخاصية المدعوم من VHAL مرمزًا بشكل ثابت ويمكن تحديده ديناميكيًا في وقت البدء. يجب أن يكون تكوين خصائص المركبة ثابتًا بمجرد بدء تشغيل الجهاز.