המרת מודולים של HAL

אפשר לעדכן מודולי 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.hal).IAllocDevice

כל שאר סוגי הנתונים מועתקים לקובץ 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 (ל-HAL במיקומים אחרים, פשוט מעדכנים את הסקריפט).

אחרי שמעדכנים את קובצי ה-Makefile, אפשר ליצור קובצי כותרת ולהטמיע שיטות. פרטים על הטמעת הממשק שנוצר זמינים במאמרים בנושא HIDL C++‎ (להטמעות ב-C++‎) או HIDL Java (להטמעות ב-Java).