تبدیل ماژول های HAL

می‌توانید با تبدیل هدر در hardware/libhardware/include/hardware ماژول‌های HAL از قبل موجود را به ماژول‌های 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 نیز فایل make-فایل مورد نیاز را به 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 یک شماره جدید حاوی وضعیت‌های NFC ممکن است).

اجرای HAL

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

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