ماژول های HAL را تبدیل کنید

شما می‌توانید ماژول‌های HAL از پیش موجود را با تبدیل هدر در hardware/libhardware/include/hardware به ماژول‌های HIDL HAL به‌روزرسانی کنید.

از 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 کپی می‌شوند. تعریف‌های Pound به enumها منتقل می‌شوند و مواردی که جزئی از HIDL نیستند یا قابل تبدیل نیستند (مانند اعلان‌های تابع استاتیک) در کامنت‌هایی که با متن " NOTE " مشخص شده‌اند، کپی می‌شوند.

فعالیت‌های دستی

ابزار c2hal نمی‌داند وقتی با ساختارهای خاصی مواجه می‌شود چه کاری باید انجام دهد. برای مثال، HIDL هیچ مفهومی از اشاره‌گرهای خام ندارد؛ به همین دلیل، وقتی c2hal با یک اشاره‌گر در فایل‌های هدر مواجه می‌شود، نمی‌داند که آیا اشاره‌گر باید به عنوان یک آرایه یا به عنوان ارجاعی به یک شیء دیگر تفسیر شود. اشاره‌گرهای void نیز به طور مشابه مبهم هستند.

فیلدی مانند int reserved[7] باید در طول انتقال به HIDL به صورت دستی حذف شود. مواردی مانند نام مقدار بازگشتی باید به چیزی معنادارتر به‌روزرسانی شوند؛ برای مثال، تبدیل پارامتر بازگشتی روش‌هایی مانند write in NFC از int32_t write_ret تولید شده خودکار به Status status (که در آن Status یک enum جدید حاوی وضعیت‌های ممکن NFC است).

پیاده‌سازی HAL

پس از اینکه فایل‌های .hal را برای نمایش HAL خود ایجاد کردید، باید فایل‌های makefiles (Make یا Soong) را که پشتیبانی زبان را در C++ و جاوا ایجاد می‌کنند، تولید کنید (مگر اینکه HAL از ویژگی پشتیبانی نشده‌ای در جاوا استفاده کند). اسکریپت ./hardware/interfaces/update-makefiles.sh می‌تواند به طور خودکار فایل‌های makefiles را برای HAL های واقع در دایرکتوری hardware/interfaces تولید کند (برای HAL های موجود در مکان‌های دیگر، کافیست اسکریپت را به‌روزرسانی کنید).

وقتی فایل‌های make به‌روز شدند، شما آماده تولید فایل‌های هدر و پیاده‌سازی متدها هستید. برای جزئیات بیشتر در مورد پیاده‌سازی رابط تولید شده، به HIDL C++ (برای پیاده‌سازی‌های C++) یا HIDL Java (برای پیاده‌سازی‌های جاوا) مراجعه کنید.