נכסי רכב

ממשק 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

VHAL קבל דוגמה ל-HVAC

איור 1 . קבל טמפרטורת HVAC (CS = CarService, VHAL = Vehicle HAL)

הגדר שיחות

קריאה set היא פעולה אסינכרונית הכוללת התראה על אירוע לאחר ביצוע שינוי מבוקש. בפעולה טיפוסית, קריאה set מובילה לבקשת שינוי ברחבי רשת הרכב. set מסוימות עשויות לדרוש נתונים ראשוניים כדי להיות מוכנים, אך במהלך האתחול, ייתכן שנתונים כאלה לא יהיו זמינים עדיין. במקרים כאלה, הקריאה set צריכה להחזיר -EAGAIN . חלק מהמאפיינים עם הדלקה/כיבוי נפרד צריכים להחזיר -ESHUTDOWN כאשר המאפיין כבוי ולא ניתן לבצע את ההגדרה. עד set ייעשה יעיל, get לא בהכרח מחזיר את אותו ערך כמו מה שהוגדר. לדוגמה, set HVAC Temperature .

VHAL הגדר דוגמה ל-HVAC

איור 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 או ביישומי Android מורשים. הנתונים המשותפים ב-VMS נועדו להיות מוגבלים לנתוני מפה לשימוש מערכות רכב ואפליקציות תומכות.

VMS מיועד לשימוש רק בהטמעות של Android Automotive; AOSP אינו מכיל לקוחות ברירת מחדל המפרסמים או נרשמים ל-VMS. עבור המאפיין VMS ב-VHAL, סוגי ההודעות ומבני הנתונים מתוארים ב-VHAL 2.0 ב- VmsMessageType enum, המפרט את סוגי הודעות ה-VMS הנתמכות. מנה זו משמשת כמספר השלם הראשון במערך המספרים השלמים של מאפייני הרכב וקובע כיצד שאר ההודעה מפוענחת.