يمكنك تحديث وحدات 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).