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

כדי לעדכן מודולי HAL קיימים למודולי HAL של HIDL, צריך להמיר את הכותרת בקובץ hardware/libhardware/include/hardware.

שימוש ב-c2hal

הכלי c2hal מטפל ברוב העבודה של ההמרות, ומצמצם את מספר השינויים הידניים הנדרשים. לדוגמה, כדי ליצור קובץ .hal של HIDL עבור ה-HAL של NFC:

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 מזהה מבנים (structs) שמכילים מצביעים לפונקציות בקובץ הכותרת שסופק, וממיר כל מבנה לקובץ ממשק נפרד. לדוגמה, alloc_device_t מומר למודול HAL‏ IAllocDevice (בקובץ IAllocDevice.hal).

כל סוגי הנתונים האחרים מועתקים לקובץ types.hal. הגדרות של סימן הפרונטיקס מועברות לממשקי enum, ופריטים שלא נכללים ב-HIDL או שלא ניתן להמיר אותם (כמו הצהרות על פונקציות סטטיות) מועתקים לתגובות שמסומנות בטקסט NOTE.

פעילויות ידניות

הכלי c2hal לא יודע מה לעשות כשנתקל במבנים מסוימים. לדוגמה, ב-HIDL אין מושג של מצביעים גולמיים. לכן, כש-c2hal נתקל במצביע בקובצי כותרות, הוא לא יודע אם צריך לפרש את המצביע כמערך או כהפניה לאובייקט אחר. גם הפונקציות Void pointers הן אטומות באופן דומה.

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

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