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