میتوانید با تبدیل سرصفحه در 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) مراجعه کنید.