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