تحويل وحدات HAL

يمكنك تعديل وحدات HAL الحالية إلى وحدات HIDL HAL من خلال تحويل العنوان في hardware/libhardware/include/hardware.

استخدام c2hal

تتولّى الأداة معظم أعمال التحويل، ما يقلّل من عدد التغييرات اليدوية المطلوبة.c2hal على سبيل المثال، لإنشاء ملف .hal HIDL لواجهة 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. يتم نقل تعريفات Pound إلى التعدادات، ويتم نسخ العناصر التي ليست جزءًا من HIDL أو التي لا يمكن تحويلها (مثل تعريفات الدوال الثابتة) إلى التعليقات التي تحمل النص "NOTE".

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

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

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

تنفيذ طبقة HAL

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

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