הטמעת קובצי עזר

אנחנו מספקים הטמעת עזר ל-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, שמשתמשת במפה בזיכרון כדי לאחסן את ערך המאפיין ולא מתקשרת עם אוטובוס רכב בפועל. היא מיועדת להרצה במהדמה ואין לה יחסי תלות ספציפיים לחומרה. אסור להשתמש ב-API כפי שהוא בממשקי הטמעה של ספקים, אלא צריך להוסיף לו לוגיקה ספציפית ל-Vehicle Bus.

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

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