אפשר לעדכן מודולי HAL קיימים למודולי HIDL HAL על ידי המרת הכותרת ב-hardware/libhardware/include/hardware
.
שימוש ב-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
מומר למודול HAL IAllocDevice
(בקובץ IAllocDevice.hal
).
כל שאר סוגי הנתונים מועתקים לקובץ types.hal
.
הגדרות עם סימן פאונד מועברות ל-enums, ופריטים שלא שייכים ל-HIDL או שלא ניתן להמיר אותם (כמו הצהרות של פונקציות סטטיות) מועתקים להערות שמסומנות בטקסט NOTE
.
פעילויות ידניות
הכלי c2hal
לא יודע מה לעשות כשהוא נתקל במבנים מסוימים. לדוגמה, ב-HIDL אין מושג של מצביעים גולמיים. לכן, כש-c2hal
נתקל במצביע בקובצי כותרת, הוא לא יודע אם המצביע צריך להתפרש כמערך או כהפניה לאובייקט אחר. גם מצביעים מסוג void הם אטומים באופן דומה.
שדה כמו int reserved[7]
צריך להסיר באופן ידני במהלך המעבר ל-HIDL. פריטים כמו השם של ערך ההחזרה צריכים להיות מעודכנים למשהו משמעותי יותר. לדוגמה, המרה של פרמטר ההחזרה של שיטות כמו write
ב-NFC מהערך שנוצר אוטומטית int32_t write_ret
לערך Status status
(כאשר Status
הוא סוג חדש של enum שמכיל סטטוסים אפשריים של NFC).
הטמעה של HAL
אחרי שיוצרים קובצי .hal
שמייצגים את HAL, צריך ליצור את קובצי ה-Makefile (Make או Soong) שיוצרים את התמיכה בשפות ב-C++ וב-Java (אלא אם HAL משתמש בתכונה שלא נתמכת ב-Java). הסקריפט ./hardware/interfaces/update-makefiles.sh
יכול ליצור באופן אוטומטי קובצי makefile עבור HAL שנמצאים בספרייה hardware/interfaces
(כדי ליצור קובצי makefile עבור HAL במיקומים אחרים, פשוט מעדכנים את הסקריפט).
אחרי שמעדכנים את קובצי ה-Makefile, אפשר ליצור קובצי כותרת ולהטמיע שיטות. פרטים על הטמעת הממשק שנוצר זמינים במאמרים HIDL C++ (להטמעות ב-C++) או HIDL Java (להטמעות ב-Java).