تحويل وحدات HAL

يمكنك تحديث وحدات HAL الموجودة مسبقًا إلى وحدات HIDL HAL عن طريق تحويل الرأس في hardware/libhardware/include/hardware .

باستخدام c2hal

تتولى أداة c2hal معظم أعمال التحويل، مما يقلل من عدد التغييرات اليدوية المطلوبة. على سبيل المثال، لإنشاء ملف HIDL .hal لـ NFC HAL:

make c2hal
c2hal -r android.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport -p android.hardware.nfc@1.0 hardware/libhardware/include/hardware/nfc.h

تضيف هذه الأوامر ملفات في hardware/interfaces/nfc/1.0/ . سيؤدي تشغيل hardware/interfaces/update-makefiles.sh من الدليل $ANDROID_BUILD_TOP إلى إضافة ملف makefile المطلوب إلى HAL. من هنا، يمكنك إجراء تغييرات يدوية لتحويل HAL بشكل كامل.

أنشطة c2hal

عند تشغيل c2hal ، يتم نقل كل شيء في ملف الرأس إلى ملفات .hal .

يحدد c2hal البنيات التي تحتوي على مؤشرات دالة في ملف الرأس المقدم ويحول كل بنية إلى ملف واجهة منفصل. على سبيل المثال، يتم تحويل alloc_device_t إلى وحدة IAllocDevice HAL (في الملف IAllocDevice.hal ).

يتم نسخ كافة أنواع البيانات الأخرى إلى ملف types.hal . يتم نقل تعريفات الجنيه إلى التعدادات، ويتم نسخ العناصر التي ليست جزءًا من HIDL أو غير قابلة للتحويل (مثل إعلانات الوظائف الثابتة) إلى التعليقات المميزة بالنص " NOTE ".

الأنشطة اليدوية

لا تعرف أداة c2hal ما يجب فعله عندما تواجه بنيات معينة. على سبيل المثال، لا يوجد لدى HIDL مفهوم للمؤشرات الأولية؛ ولهذا السبب، عندما يواجه c2hal مؤشرًا في ملفات الرأس، فإنه لا يعرف ما إذا كان يجب تفسير المؤشر كمصفوفة أو كمرجع لكائن آخر. المؤشرات الفارغة أيضًا معتمة بالمثل.

يجب إزالة الحقل مثل int reserved[7] يدويًا أثناء الانتقال إلى HIDL. يجب تحديث العناصر مثل اسم القيمة المرجعة إلى شيء ذي معنى أكبر؛ على سبيل المثال، تحويل معلمة الإرجاع لطرق مثل write في NFC من int32_t write_ret تم إنشاؤه تلقائيًا إلى Status status (حيث تكون Status عبارة عن تعداد جديد يحتوي على حالات NFC محتملة).

تنفيذ HAL

بعد قيامك بإنشاء ملفات .hal لتمثيل HAL الخاص بك، يجب عليك إنشاء ملفات makefiles (Make أو Soong) التي تنشئ دعم اللغة في C++ وJava (ما لم تستخدم HAL ميزة غير مدعومة في Java). يمكن للبرنامج النصي ./hardware/interfaces/update-makefiles.sh إنشاء ملفات تكوين لـ HALs الموجودة في دليل hardware/interfaces (بالنسبة لـ HALs في مواقع أخرى، ما عليك سوى تحديث البرنامج النصي).

عندما يتم تحديث ملفات makefiles، تكون جاهزًا لإنشاء ملفات الرأس وتنفيذ الأساليب. للحصول على تفاصيل حول تنفيذ الواجهة التي تم إنشاؤها، راجع HIDL C++ (لتطبيقات C++) أو HIDL Java (لتطبيقات Java).