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