הטמעת הפניה

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

ההטמעה לדוגמה מבוססת על ארכיטקטורה של שתי שכבות. בשכבה העליונה, ‫DefaultVehicleHal, מיושם ממשק VHAL AIDL ומסופקת לוגיקת VHAL כללית לכל מכשירי החומרה. בשכבה התחתונה, FakeVehicleHardware, מוטמע הממשק IVehicleHardware. המחלקות האלה מדמות את הלוגיקה של VHAL באינטראקציה עם חומרה או עם אפיק נתונים של רכב, והן ספציפיות למכשיר. אופציונלית, ספקים יכולים להתאים את אותה ארכיטקטורה, לעשות שימוש חוזר באותה מחלקה 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.