ממשק Vehicle Hardware Abstraction Layer (VHAL) מגדיר את המאפיינים שיצרני OEM יכולים ליישם ומכיל מטא נתונים של מאפיינים (לדוגמה, האם המאפיין הוא int ואילו מצבי שינוי מותרים). ממשק VHAL מבוסס על גישה (לקרוא, לכתוב, להירשם) למאפיין, שהוא הפשטה לפונקציה ספציפית.
ממשקי HAL
ה-VHAL משתמש בממשקים הבאים:
-
getAllPropConfigs()
יוצר(vec<VehiclePropConfig>propConfigs)
רשום את התצורה של כל המאפיינים הנתמכים על ידי ה-VHAL. CarService משתמש במאפיינים נתמכים בלבד. -
getPropConfigs(vec<int32_t> props)
יוצר(StatusCode status,vec<VehiclePropConfig> propConfigs);
החזר את התצורה של המאפיינים שנבחרו. -
set(VehiclePropValue propValue)
יוצר(StatusCodestatus);
כתוב ערך לנכס. תוצאת הכתיבה מוגדרת לפי מאפיין. -
subscribe(IVehicleCallback callback, vec<SubscribeOptions> options)
יוצר(StatusCode status);
התחל לעקוב אחר שינוי ערך נכס. עבור נכס אזורי,unsubscribe(IVehicleCallback callback, int32_t propId)
יוצר(StatusCode status);
ה-VHAL משתמש בממשקי התקשרות חוזרים הבאים:
-
oneway onPropertyEvent(vec<VehiclePropValue>propValues);
מודיע על שינוי ערך של נכס הרכב. יש לעשות רק עבור נכסים מנויים. -
oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
החזר שגיאה ברמת VHAL גלובלית או שגיאה לכל מאפיין. שגיאה גלובלית גורמת ל-HAL להפעיל מחדש, מה שעלול להוביל להפעלה מחדש של רכיבים אחרים (כולל יישומים).
נכסי רכב
מאפיינים יכולים להיות לקריאה בלבד, כתיבה בלבד (משמשת להעברת מידע לרמת VHAL), או קריאה וכתיבה (תמיכה ברוב המאפיינים היא אופציונלית). כל מאפיין מזוהה באופן ייחודי על ידי מפתח int32 ויש לו סוג מוגדר מראש ( value_type
):
-
BYTES
-
BOOLEAN
-
EPOCH_TIME
-
FLOAT
-
FLOAT[]
-
INT32
-
INT32[]
-
INT64
-
INT64[]
-
STRING
-
MIXED
לנכס אזורי עשוי להיות יותר מערך אחד, בהתבסס על מספר האזורים הנתמכים על ידי הנכס.
סוגי שטחים
ה-VHAL מגדיר מספר סוגי אזורים:
סוג אזור | תיאור |
---|---|
GLOBAL | נכס זה הוא יחיד ואין לו מספר אזורים. |
WINDOW | אזור המבוסס על חלונות, משתמש VehicleAreaWindow enum. |
MIRROR | שטח המבוסס על מראות, משתמש VehicleAreaMirror enum. |
SEAT | שטח המבוסס על מושבים, משתמש VehicleAreaSeat enum. |
DOOR | שטח המבוסס על דלתות, משתמש VehicleAreaDoor enum. |
WHEEL | אזור המבוסס על גלגלים, משתמש VehicleAreaWheel enum. |
כל נכס אזורי חייב להשתמש בסוג שטח מוגדר מראש. לכל סוג אזור יש קבוצה של דגלי סיביות המוגדרים ב-enum עבור סוג השטח. לדוגמה, אזור SEAT
מגדיר את ספורי VehicleAreaSeat
:
-
ROW_1_LEFT = 0x0001
-
ROW_1_CENTER = 0x0002
-
ROW_1_RIGHT = 0x0004
-
ROW_2_LEFT = 0x0010
-
ROW_2_CENTER = 0x0020
-
ROW_2_RIGHT = 0x0040
-
ROW_3_LEFT = 0x0100
- ...
מזהי אזור
נכסים אזוריים מקבלים מענה באמצעות מזהי אזור. כל נכס אזורי עשוי לתמוך במזהה אזור אחד או יותר. מזהה אזור מורכב מדגל אחד או יותר מהרשימה המתאימה לו. לדוגמה, נכס המשתמש VehicleAreaSeat
עשוי להשתמש במזהי האזור הבאים:
פריט | תיאור |
---|---|
ROW_1_LEFT | ROW_1_RIGHT | מזהה האזור חל על שני המושבים הקדמיים. |
ROW_2_LEFT | חל רק על המושב השמאלי האחורי. |
ROW_2_RIGHT | חל רק על המושב הימני האחורי. |
מצב נכס
כל ערך נכס מגיע עם ערך VehiclePropertyStatus
. זה מציין את המצב הנוכחי של הנכס:
פריט | תיאור |
---|---|
AVAILABLE | הנכס זמין והערך תקף. |
UNAVAILABLE | ערך הנכס אינו זמין כעת. משמש לתכונות מושבתות זמנית עבור נכס נתמך. |
ERROR | משהו לא בסדר בנכס הזה. |
הגדרת נכס
השתמש VehiclePropConfig
כדי לספק מידע תצורה עבור כל מאפיין. המידע כולל:
מִשְׁתַנֶה | תיאור |
---|---|
access | r , w , rw |
changeMode | מייצג את אופן הפיקוח על נכס, על שינוי לעומת רציף. |
areaConfigs | ערכי areaId , min max . |
configArray | פרמטרי תצורה נוספים. |
configString | מידע נוסף הועבר כמחרוזת. |
minSampleRate | maxSampleRate |
prop | מזהה נכס, int |
מאפייני אזור טיפול
נכס אזורי שווה ערך לאוסף של מספר נכסים שבהם ניתן לגשת לכל תת-נכס עם ערך מזהה האזור שצוין.
-
get
call עבור נכס אזורי תמיד כולל את מזהה האזור בבקשה. לכן, רק הערך הנוכחי של מזהה האזור המבוקש מוחזר. אם הנכס הוא גלובלי, אזי אזור מזהה הוא 0. - קריאה
set
עבור נכס אזורי תמיד כוללת את מזהה האזור בבקשה. לכן, רק מזהה האזור המבוקש משתנה. - שיחת
subscribe
מייצרת אירועים עבור כל מזהי האזור עבור הנכס.
קבל שיחות
במהלך האתחול, ייתכן שהערך של הנכס עדיין לא יהיה זמין מכיוון שעדיין לא התקבלה הודעת רשת הרכב התואמת. במקרים כאלה, הקריאה get
צריכה להחזיר -EAGAIN
. לחלק מהמאפיינים (כגון HVAC) יש מאפיין הפעלה/כיבוי נפרד. קריאה get
עבור נכס כזה (כשהיא כבויה) אמורה להחזיר סטטוס UNAVAILABLE
במקום להחזיר שגיאה. לדוגמה, קבל את טמפרטורת HVAC
איור 1 . קבל טמפרטורת HVAC (CS = CarService, VHAL = Vehicle HAL)
הגדר שיחות
בפעולה טיפוסית, קריאה set
מובילה לבקשת שינוי ברחבי רשת הרכב. שיחה set
היא באופן אידיאלי פעולה אסינכרונית שחוזרת בהקדם האפשרי, אך היא יכולה להיות גם סינכרונית. שיחות set
עשויות לדרוש נתונים ראשוניים כדי להיות מוכנים, אך במהלך האתחול, ייתכן שנתונים כאלה לא יהיו זמינים עדיין. במקרים כאלה, הקריאה set
צריכה להחזיר את StatusCode#TRY_AGAIN
. מאפיינים מסוימים עם הפעלה וכיבוי נפרדים צריכים להחזיר את StatusCode#NOT_AVAILABLE
או StatusCode#NOT_AVAILABLE_DISABLED
כאשר set
כבוי ולא ניתן להגדיר. עד set
הופך לאפקטיבי, get
לא בהכרח מחזיר את אותו ערך כמו מה שהוגדר. לדוגמה, set HVAC Temperature
.
איור 2 . הגדרת טמפרטורת HVAC (CS = CarService, VHAL = Vehicle HAL)
טיפול במאפיינים מותאמים אישית
כדי לתמוך בצרכים ספציפיים לשותף, ה-VHAL מאפשר מאפיינים מותאמים אישית המוגבלים לאפליקציות מערכת. השתמש בהנחיות הבאות בעת עבודה עם מאפיינים מותאמים אישית:
- יש ליצור מזהה נכס באמצעות השדות הבאים:
-
VehiclePropertyGroup:VENDOR
קבוצתVENDOR
משמשת רק עבור מאפיינים מותאמים אישית. -
VehicleArea
בחר סוג אזור מתאים. -
VehiclePropertyType
בחר את סוג הנתונים המתאים. סוגBYTES
מאפשר העברת נתונים גולמיים אשר מספיקים ברוב המקרים. שליחת נתונים גדולים בתדירות גבוהה דרך מאפיינים מותאמים אישית יכולה להאט את הגישה של כל רשת הרכבים - היזהר בעת הוספת מטען גדול. -
Property ID
בחר מזהה של ארבע נשנושים עבור הנכס המותאם אישית.
-
- כדי למנוע פיצול מערכת אקולוגית, אין להשתמש במאפיינים מותאמים אישית כדי לשכפל מאפייני רכב שכבר קיימים ב- ( VehiclePropertyIds SDK).
- מלא את
VehiclePropConfig.configString
עם תיאור קצר של המאפיין המותאם אישית. זה מאפשר לכלים לבדיקת שפיות לסמן שכפול מקרי של מאפייני רכב קיימים. לדוגמה, "מצב אור סכנה". - גישה דרך
CarPropertyManager
(עבור רכיבי Java) או דרך ה-API של Vehicle Network Service (עבור מקורי). אל תשנה ממשקי API אחרים לרכב שכן פעולה זו עלולה להוביל לבעיות תאימות עתידיות. - לאחר הטמעת מאפייני הספק, בחר רק את רשימת ההרשאות ברשימה של
VehicleVendorPermission
עבור מאפייני הספק. מיפוי הרשאות ספקים למאפייני מערכת ישבור את ה-CTS וה-VTS.
טיפול במאפייני HVAC
אתה יכול להשתמש ב-VHAL כדי לשלוט ב-HVAC על ידי הגדרת מאפיינים הקשורים ל-HVAC. רוב נכסי HVAC הם נכסים אזוריים, אם כי חלקם הם נכסים שאינם אזוריים (גלובליים). מאפיינים מוגדרים לדוגמה כוללים:
תכונה | מַטָרָה |
---|---|
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET | הגדר טמפרטורה לכל אזור. |
VEHICLE_PROPERTY_HVAC_RECIRC_ON | בקרת מחזור מחדש לכל אזור. |
כדי לראות רשימה מלאה של נכסי HVAC, חפש את VEHICLE_PROPERTY_HVAC_*
ב- types.hal
. כאשר נכס HVAC משתמש VehicleAreaSeat
, חלים כללים נוספים למיפוי נכס HVAC אזורי למזהי אזור. כל מושב פנוי במכונית חייב להיות חלק ממזהה אזור במערך מזהה אזור.
דוגמה אחת. לרכב יש שני מושבים קדמיים ( ROW_1_LEFT, ROW_1_RIGHT
) ושלושה מושבים אחוריים ( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT
). לרכב יש שתי יחידות בקרת טמפרטורה: צד הנהג וצד הנוסע.
- ערכת מיפוי חוקית של מזהי אזורים עבור
HVAC_TEMPERATURE SET
היא:-
ROW_1_LEFT | ROW_2_LEFT
-
ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
-
- מיפוי חלופי עבור אותה תצורת חומרה הוא:
-
ROW_1_LEFT | ROW_2_LEFT | ROW_2_CENTER
-
ROW_1_RIGHT | ROW_2_RIGHT
-
דוגמה שתיים. לרכב יש שלוש שורות מושבים עם שני מושבים בשורה הראשונה ( ROW_1_LEFT, ROW_1_RIGHT
), שלושה מושבים בשני ( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT
), ושלושה בשורות השלישית ( ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT
). לרכב שלוש יחידות בקרת טמפרטורה: צד הנהג, צד הנוסע והאחורי. דרך סבירה למיפוי HVAC_TEMPERATURE_SET
למזהי אזור היא כמערך של שלושה אלמנטים:
-
ROW_1_LEFT
-
ROW_1_RIGHT
-
ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT
טיפול במאפייני החיישן
מאפייני חיישן VHAL מייצגים נתוני חיישן אמיתיים או מידע מדיניות כגון מצב נהיגה. חלק ממידע החיישנים (כגון מצב נהיגה ומצב יום/לילה) נגיש לכל אפליקציה ללא הגבלה מכיוון שהנתונים הם חובה לבניית אפליקציה בטוחה לרכב. מידע חיישן אחר (כגון מהירות רכב) רגיש יותר ודורש הרשאות ספציפיות שמשתמשים יכולים לנהל.
ראה את מאפייני החיישן הנתמכים (ב- types.hal
).
שירות מפות רכב
שירות מפות הרכב (VMS) מספק מנגנון להחלפת נתוני מפה בין לקוחות דרך ממשק פאב/משנה כדי לתמוך בתכונות רכב נפוצות, כגון מערכות סיוע לנהג מתקדמות (ADAS) . לקוחות יכולים לכלול מערכות רכב המתממשקות דרך מאפיין VMS ב-VHAL או ביישומי אנדרואיד מועדפים. הנתונים המשותפים ב-VMS נועדו להיות מוגבלים לנתוני מפה לשימוש מערכות רכב ואפליקציות תומכות.
VMS מיועד לשימוש רק בהטמעות של Android Automotive; AOSP אינו מכיל לקוחות ברירת מחדל המפרסמים או נרשמים ל-VMS. עבור המאפיין VMS ב-VHAL, סוגי ההודעות ומבני הנתונים מתוארים ב-VHAL 2.0 ב- VmsMessageType
enum, המפרט את סוגי הודעות ה-VMS הנתמכות. מנה זו משמשת כמספר השלם הראשון במערך המספרים השלמים של מאפייני הרכב וקובע כיצד שאר ההודעה מפוענחת.