המרת מודולי HAL

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