הטמעת הפניה

אנחנו מספקים הטמעת עזר ל-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, והוספה של כל אחד מהם למאגר גלובלי.
  • ניהול הלוגיקה של קריאות חזרה אסינכרניות (callbacks), כמו הוספת בקשה בהמתנה למאגר של בקשות בהמתנה. הפונקציה פותרת בקשות בהמתנה כשאנחנו מקבלים את התוצאות, או מחזירה שגיאה כשהזמן לטעינת אחת מהבקשות בהמתנה פג.
  • סריאליזציה ופענוח של 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 מוגדר (צריך להגדיר את הנכס הזה בזמן ה-build או בשלב מוקדם מאוד במהלך האתחול לפני האיפוס של VHAL), המערכת משתמשת בקובץ התצורה מהתיקייה /vendor/etc/automotive/vhaloverride/ במכשיר כדי לשנות את התצורה הקיימת. אפשר להשתמש בגישה דומה בהטמעה של ספק, כך שההגדרות של הנכסים הנתמכים ב-VHAL לא יהיו מקודדות ואפשר יהיה להחליט עליהן באופן דינמי בזמן ההתחלה. רשימת ההגדרות של מאפייני הרכב חייבת להיות סטטית אחרי שמפעילים את VHAL.

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