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