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