تحويل وحدات 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 مؤشرًا في ملفات الرأس، لا يعرف ما إذا كان يجب تفسير المؤشر على أنّه صفيف أو مرجع إلى عنصر آخر. تكون مؤشرات Void أيضًا غير شفافة بالمثل.

يجب إزالة حقل مثل 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 أن ينشئ تلقائيًاملفّات make لبرامج HAL المتوفّرة في الدليل hardware/interfaces (بالنسبة إلى برامج HAL في مواقع أخرى، ما عليك سوى تعديل النص البرمجي).

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