میتوانید با تبدیل هدر در 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 (برای پیادهسازی جاوا) را ببینید.