تبدیل واحدهای HAL

می‌توانید با تبدیل سرصفحه در hardware/libhardware/include/hardware، واحدهای HAL ازقبل موجود را به واحدهای HAL از نوع HIDL به‌روز کنید.

استفاده از 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 همچنین فایل ساخت موردنیاز را به HAL اضافه می‌کند. از اینجا می‌توانید تغییرات دستی را برای تبدیل کامل HAL انجام دهید.

فعالیت‌های c2hal

وقتی c2hal را اجرا می‌کنید، همه چیز در فایل سرایند به فایل‌های .hal منتقل می‌شود.

‫c2hal ساختارهایی را که حاوی اشاره‌گرهای تابع در فایل سرایند ارائه‌شده است شناسایی می‌کند و هر ساختار را به فایل میانای جداگانه‌ای تبدیل می‌کند. برای مثال، alloc_device_t به پیمانه IAllocDevice HAL (در فایل IAllocDevice.hal) تبدیل می‌شود.

همه انواع داده‌های دیگر در فایل types.hal کپی می‌شوند. تعریف‌های پوندی به شمارش‌ها منتقل می‌شوند و مواردی که بخشی از HIDL نیستند یا قابل تبدیل نیستند (مثل بیانیه‌های تابع ایستا) در نظراتی که با نوشتار «NOTE» علامت‌گذاری شده‌اند کپی می‌شوند.

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

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

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

پیاده‌سازی لایه انتزاع سخت‌افزار

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

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