הטמעת הפניה

אנחנו מספקים הטמעה לדוגמה של AIDL VHAL. ה-thread הראשי של השירות מיושם ב-VehicleService.cpp. היישום של ממשק VHAL נמצא בכתובת DefaultVehicleHal.cpp.

ההטמעה לדוגמה מבוססת על ארכיטקטורה של שתי שכבות. בשכבה העליונה, ‫DefaultVehicleHal, מיושם ממשק VHAL AIDL ומסופקת לוגיקת VHAL גנרית לכל מכשירי החומרה. בשכבה התחתונה, FakeVehicleHardware, מוטמע הממשק IVehicleHardware. המחלקות האלה מדמות את הלוגיקה של VHAL באינטראקציה עם חומרה או עם אוטובוס רכב בפועל, והן ספציפיות למכשיר. לחלופין, ספקים יכולים להתאים את אותה ארכיטקטורה, לעשות שימוש חוזר באותה מחלקה של DefaultVehicleHal (להרחיב אותה כדי לשכתב שיטה) ולספק הטמעה משלהם של DefaultVehicleHal.IVehicleHardware

הטמעה לדוגמה של VHAL
איור 1. הטמעה לדוגמה של VHAL

DefaultVehicleHal מכיל את הלוגיקה הבאה, שנחשבת גנרית ויכולה לחול על כל הטמעה של VHAL.

  • מטמיע את הממשק IVehicle.
  • מבצע בדיקות בסיסיות של הקלט, כולל בדיקה של מזהים כפולים.
  • מקצה אובייקטים של לקוח (לדוגמה, GetValuesClient) לכל פעולה עבור כל לקוח של Binder, ומוסיף כל אחד מהם למאגר גלובלי.
  • מנהל את הלוגיקה של קריאות חוזרות אסינכרוניות, כמו הוספת בקשה בהמתנה למאגר בקשות בהמתנה. הפונקציה פותרת בקשות בהמתנה כשהתוצאות מתקבלות, או מחזירה שגיאה אם אחת מהבקשות בהמתנה חורגת מהזמן הקצוב לתפוגה.
  • סדרות וביטול סדרות של LargeParcelable (ראו ParcelableUtils.h).
  • ניהול המינוי (ראו SubscriptionManager.h).
  • בודק הרשאות. (מידע נוסף על הפונקציות checkReadPermission ו-checkWritePermission).
  • הפונקציה IVehicleHardware.checkHealth נקראת מעת לעת ושולחת אותות פעימת לב (ראו את הפונקציה checkHealth).

IVehicleHardware הוא ממשק כללי שמשמש לייצוג של הטמעה ספציפית לחומרה של VHAL. ההטמעה לדוגמה של IVehicleHardware היא FakeVehicleHardware, שמשתמשת במפה בזיכרון כדי לאחסן את ערך המאפיין ולא מתקשרת עם אוטובוס רכב בפועל. היא מיועדת להרצה באמולטור ואין לה תלות ספציפית בחומרה. הטמעות של ספקים לא יכולות להשתמש בו כמו שהוא, והן צריכות להוסיף לוגיקה ספציפית לאוטובוסים.

החל מ-Android 14, ‏ FakeVehicleHardware קורא את הגדרות המאפיינים הנתמכים בזמן הריצה במהלך האתחול מתיקיית /vendor/etc/automotive/vhalconfig/ במכשיר, שמכילה קובץ הגדרות בסגנון JSON. למידע על הפורמט והתוכן של קובץ ההגדרות, אפשר לעיין בקובץ ה-README של VHAL.

FakeVehicleHardware תומך גם בביטול של קובץ תצורה לצורך בדיקה. אם מאפיין המערכת persist.vendor.vhal_init_value_override מוגדר (המאפיין הזה צריך להיות מוגדר בזמן הבנייה או בשלב מוקדם מאוד במהלך האתחול, לפני האתחול של VHAL), המערכת משתמשת בקובץ ההגדרות מהתיקייה /vendor/etc/automotive/vhaloverride/ במכשיר כדי לבטל את ההגדרות הקיימות. הטמעה של ספק יכולה להשתמש בגישה דומה כדי שהגדרת המאפיין הנתמך VHAL- לא תהיה מקודדת באופן קשיח, וניתן יהיה להחליט עליה באופן דינמי בזמן ההתחלה. רשימת ההגדרות של מאפייני הרכב צריכה להיות סטטית אחרי האתחול של VHAL.

החל מ-Android 16, ‏ GRPCVehicleHardware מספק הטמעה נוספת של הפניה IVehicleHardware. ההטמעה הזו מניחה שיש שרת נפרד שפועל במכונה או במכונה וירטואלית (VM) מרחוק, שמכילה את לוגיקת הטיפול בנכס. ה-VHAL שפועל במכשירי AAOS משמש כפרוקסי שמעביר בקשות לשרת המרוחק. פרטים נוספים זמינים במאמר בנושא grpc.