כדי לעדכן מודולי 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).