הגדרות נכס

כל מאפיין נתמך מוגדר על ידי הגדרת מאפיין שמוגדרת באמצעות מבנה VehiclePropConfig, ויש לו את השדות הבאים.

שדה תיאור
prop

מזהה הנכס. הערך צריך להיות אחד ממאפייני המערכת המוגדרים מתוך VehicleProperty.aidl או מאפיין של ספק. מזהה הנכס נוצר באמצעות פעולת OR ברמת הביטים של השדות הבאים (מימין לשמאל):

  • ‫(0x00000000) 16 ביטים: מזהה ייחודי בטווח 0x0100 עד 0xffff.
  • ‫(0x00000000) 8 ביטים: סוגי מאפיינים שמגדירים את הסוג של המאפיין.
  • ‫(0x00000000) 4 ביטים: סוגי אזורים.
  • ‫(0x00000000) 4 ביטים: VehiclePropertyGroup הערך הוא SYSTEM (0x10000000) או VENDOR (0x20000000). במאמר מאפייני ספקים מפורטים המאפיינים שאפשר להתאים אישית.

לדוגמה,
INFO_VIN (0x11100100) = UniqueID (0x00000100) | VehiclePropertyType.STRING (0x00100000) | VehicleArea.GLOBAL (0x01000000) | VehiclePropertyGroup.SYSTEM (0x10000000)

access
  • מצב הגישה לנכס. חייב להיות אחד מהערכים READ, WRITE או READ_WRITE.
  • למאפייני מערכת, הערך צריך להיות אחד ממצבי הגישה המוגדרים שמתועדים בVehicleProperty.aidl.
  • בנכסים עם גישה לפי אזור, זהו קבוצת המשנה המקסימלית של הגישה לפי אזור. לדוגמה, אם לנכסים יש שני אזורים עם גישה READ ו-READ_WRITE, צריך להגדיר את הערך הזה כ-READ.
changeMode
  • שינוי המצב של הנכס. צריך להשתמש באחד מהערכים הבאים: STATIC, ON_CHANGE או CONTINUOUS. ‫STATIC מציין שערך המאפיין לא משתנה אף פעם אחרי אתחול המערכת. ‫ON_CHANGE מציין ש-VHAL צריך לדווח על שינויים בערך. ‫CONTINUOUS פירושו שערך המאפיין משתנה באופן רציף, וממשק VHAL צריך לדווח על סמך קצב הדגימה של המינוי.
  • למאפייני מערכת, הערך הזה צריך להיות שווה למצב השינוי שמתועד ב-VehicleProperty.aidl.
configArray מערך אופציונלי שמכיל הגדרות ספציפיות למאפיין. השדה יכול להיות ריק. למאפייני מערכת מסוימים, למשל GEAR_SELECTION, למערך ההגדרות יש משמעות מיוחדת וחובה לציין אותו.
configString מחרוזת אופציונלית שמכילה הגדרה ספציפית למאפיין. השדה יכול להיות ריק.
minSampleRate וגם maxSampleRate קצב הדגימה המינימלי והמקסימלי הנתמך של נכס רציף (בהרץ). לא משתמשים בו אם המאפיין לא רציף. ההטמעה של VHAL צריכה לאפשר את minSampleRate ו-maxSampleRate. לא צריך לתמוך בכל קצב דגימה בין המינימום למקסימום.

סוגי נכסים

מוגדר כ-enums ב-VehiclePropertyType.aidl. בטבלה הבאה מפורטים סוגי המאפיינים הנתמכים.

סוג הנכס ערך תיאור
STRING 0x00100000 מאפיין מחרוזת, נעשה בו שימוש בשדה stringValue בערך מאפיין הרכב.
BOOLEAN 0x00200000 המאפיין Boolean, משתמש ברכיב הראשון בשדה int32Values ב-Vehicle property value. ‫0 פירושו false, ‫None 0 פירושו true.
INT32 0x00400000 המאפיין Integer, משתמש ברכיב הראשון בשדה int32Values ב-Vehicle property value.
INT32_VEC 0x00410000 Integer[], משתמש ברכיבים בשדה int32Values ב-Vehicle property value.
INT64 0x00500000 נכס ארוך, משתמש ברכיב הראשון בשדה int64Values בערך מאפיין הרכב.
INT64_VEC 0x00510000 המאפיין Long[] משתמש ברכיבים בשדה int64Values ב-Vehicle property value.
FLOAT 0x00600000 המאפיין Float, משתמש ברכיב הראשון בשדה floatValues ב-Vehicle property value.
FLOAT_VEC 0x00610000 המאפיין Float[] משתמש ברכיבים בשדה floatValues ב-Vehicle property value.
BYTES 0x00700000 המאפיין byte[] משתמש ברכיבים בשדה byteValues ב-Vehicle property value.
MIXED 0x00e00000 נכס מסוג מעורב. כל שילוב של סוגים סקלריים או וקטוריים. הפורמט המדויק צריך להיות מוגדר במערך ההגדרות בהגדרות הנכס.

במקרה של נכסים מסוג MIXED של ספקים, צריך להגדיר את הפורמט של configArray במבנה הבא:

  • configArray[0], הערך 1 מציין שלמאפיין יש ערך String
  • configArray[1], הערך 1 מציין שלמאפיין יש ערך Boolean
  • configArray[2], הערך 1 מציין שלמאפיין יש ערך Integer
  • configArray[3], המספר מציין את הגודל של Integer[] בנכס
  • configArray[4], הערך 1 מציין שלמאפיין יש ערך Long
  • configArray[5], המספר מציין את הגודל של Long[] בנכס
  • configArray[6], הערך 1 מציין שלמאפיין יש ערך Float
  • configArray[7], המספר מציין את הגודל של Float[] בנכס
  • configArray[8], המספר מציין את הגודל של byte[] בנכס.

לדוגמה, configArray = {1, 1, 1, 3, 0, 0, 0, 0, 0} מציין שלמאפיין יש ערך String, ערך Boolean, ערך Integer ומערך עם שלושה מספרים שלמים.

הגדרת מזהה אזור

בנוסף, כל הגדרת נכס יכולה להכיל רשימה של הגדרות מזהי אזורים. הרשימה הזו היא אופציונלית בנכסים גלובליים, ונדרשת בנכסים אזוריים (נכסים עם כמה אזורים נתמכים). לכל הגדרה של מזהה אזור יש את השדות הבאים.

שדה תיאור
areaId המזהה של האזור הזה. מידע על מזהי אזורים
minInt32Value וגם maxInt32Value
  • ערך מינימלי ומקסימלי אופציונלי למאפיינים מסוג INT32 בזמן האתחול. חובה להזין 0 לכל שאר הסוגים. המערכת מתעלמת מהערכים האלה אם שניהם הם 0.
  • בנכס גלובלי, אם צריך להגדיר ערך מינימלי ומקסימלי, צריך להשתמש בהגדרת אזור אחת עם מזהה האזור 0.
  • הערך הזה הוא סטטי ולא ישתנה גם אם ערך המינימום או המקסימום ישתנו בזמן הריצה. מטמיעים את IVehicle#getMinMaxSupportedValue כדי להגדיר ערך דינמי מינימלי או מקסימלי.
minInt64Value וגם maxInt64Value
  • ערך מינימלי ומקסימלי אופציונלי למאפיינים מסוג INT64 בזמן האתחול. חובה להזין 0 לכל שאר הסוגים. המערכת מתעלמת מהערכים האלה אם שניהם הם 0.
  • בנכס גלובלי, אם צריך להגדיר ערך מינימלי ומקסימלי, צריך להשתמש בהגדרת אזור אחת עם מזהה האזור 0.
  • הערך הזה הוא סטטי ולא ישתנה גם אם ערך המינימום או המקסימום ישתנו בזמן הריצה. מטמיעים את IVehicle#getMinMaxSupportedValue כדי להגדיר ערך דינמי מינימלי או מקסימלי.
minFloatValue וגם maxFloatValue
  • ערך מינימלי ומקסימלי אופציונלי למאפיינים מסוג Float בזמן האתחול. חובה להזין 0 לכל שאר הסוגים. המערכת מתעלמת מהערכים האלה אם שניהם הם 0.0.
  • בנכס גלובלי, אם צריך להגדיר ערך מינימלי ומקסימלי, צריך להשתמש בהגדרת אזור אחת עם מזהה האזור 0.
  • הערך הזה הוא סטטי ולא ישתנה גם אם ערך המינימום או המקסימום ישתנו בזמן הריצה. מטמיעים את IVehicle#getMinMaxSupportedValue כדי להגדיר ערך דינמי מינימלי או מקסימלי.
(חדש ב-Android 14)
supportedEnumValues
  • רשימה אופציונלית של ערכים נתמכים בזמן האתחול, אם המאפיין מוגדר כמאפיין מסוג enum. אם לא מציינים ערך (ריק) או אם הגרסה של Android היא לפני גרסה 14, המערכת מניחה שכל ערכי ה-enum נתמכים.
  • בנכס גלובלי, אם צריך להגדיר ערכי enum נתמכים, צריך להשתמש בהגדרת אזור אחת עם מזהה האזור 0.
  • הערך הזה סטטי ולא ישתנה גם אם הערכים הנתמכים ישתנו בזמן הריצה. מטמיעים את IVehicle#getSupportedValuesLists לערכים דינמיים נתמכים.
  • ההגדרה הזו רלוונטית רק למאפיינים מסוג enum. בשאר הסוגים, השדה הזה צריך להיות ריק. כדי להציג ערכים נתמכים לסוגים אחרים שאינם enum, משתמשים בפונקציה IVehicle#getSupportedValuesLists.
(חדש ב-Android 15)
supportVariableUpdateRate
  • האם יש תמיכה בקצב עדכון משתנים. ההגדרה הזו רלוונטית רק לנכסים רציפים.
  • אם הערך הוא true, האפליקציה יכולה להפעיל קצב עדכון משתנה למינוי כדי לקבל אירועי עדכון של מאפיינים רק כשערך המאפיין משתנה (כלומר, מאפיינים רציפים מטופלים כמאפיינים שמשתנים).
  • אם כל המנויים של מאפיין מסוים מפעילים קצב עדכון משתנה, בקשת המינוי ל-VHAL מפעילה קצב עדכון משתנה למאפיין, ו-VHAL צריך לשלוח אירועי עדכון של המאפיין רק כשערך המאפיין משתנה.
  • אם מנוי כלשהו מבקש קצב עדכון קבוע, בקשת המינוי ל-VHAL משביתה את קצב העדכון המשתנה של המאפיין, ומערכת AAOS מסננת את האירועים הכפולים עבור הלקוחות שמבקשים קצב עדכון משתנה.
  • מומלץ מאוד לתמוך בקצב עדכון משתנה לכל המאפיינים הרציפים שאינם פעימות לב, כדי לשפר את הביצועים, אלא אם נתוני המאפיין גדולים (לדוגמה, מערך בייטים בגודל 1k) ועשויים לתפוס כמות גדולה של זיכרון לצורך שמירה במטמון.
(חדש ב-Android 16)
hasSupportedValueInfo
  • אם הערך הוא לא null, המאפיין מציין ערכים מינימליים או מקסימליים נתמכים, או רשימה של ערכים נתמכים.
  • השדה הזה קובע אם ממשקי ה-API הדינמיים של הערכים הנתמכים: getMinMaxSupportedValue, getSupportedValuesLists, subscribeSupportedValueChange, unsubscribeSupportedValueChange נתמכים עבור מזהה המאפיין ומזהה האזור הזה.
  • אם לא null, צריך להטמיע את ממשקי ה-API האלה ב-VHAL עבור מזהה הנכס ומזהה האזור.
  • אם null או ב-Android 15 או בגרסאות קודמות, לא תהיה תמיכה בערכים דינמיים של מזהה הנכס ומזהה האזור. הלקוח חייב להשתמש במידע הסטטי על הערכים הנתמכים שמופיע בהגדרת מאפייני הרכב.

סוגי אזורים

מוגדר כ-enums ב-VehicleArea.aidl. סוגי האזורים הנתמכים מפורטים בהמשך.

סוג האזור ערך תיאור
GLOBAL 0x01000000 הנכס הזה הוא נכס גלובלי ואין לו כמה אזורים.
חלון 0x03000000 אזור שמבוסס על חלונות, משתמש ב-VehicleAreaWindow enum.
MIRROR 0x04000000 אזור שמבוסס על שיקופים, נעשה שימוש ב-VehicleAreaMirror enum.
סיאט 0x05000000 אזור שמבוסס על רישיונות, משתמש ב-enum‏ VehicleAreaSeat.
DOOR 0x06000000 אזור שמבוסס על דלתות, נעשה שימוש ב-enum‏ VehicleAreaDoor.
גלגל 0x07000000 השטח מבוסס על גלגלים, ומשתמש ב-enum‏ VehicleAreaWheel.

בכל נכס מחולק לאזורים צריך להשתמש בסוג אזור שהוגדר מראש. לכל סוג אזור יש קבוצה של דגלים בינאריים שמוגדרים בספירה (enum) של סוג האזור. לדוגמה, אזור המושב מגדיר את הערכים הבאים של enum:‏ 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 ההגדרה חלה רק על המושב האחורי הימני.

מידע נוסף זמין במאמר בנושא HVAC.