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

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