נכסים מיוחדים

מאפייני הספק

כדי לתמוך בצרכים ספציפיים של שותפים, VHAL מאפשר גישה לנכסי ספקים רק דרך ממשקי API של מערכת. כשעובדים עם נכסי ספקים, כדאי לפעול לפי ההנחיות הבאות:

  • תמיד כדאי לנסות להשתמש קודם במאפייני המערכת, ומומלץ להשתמש במאפייני הספק רק כחלופה אחרונה, במקרים שבהם אף אחד ממאפייני המערכת לא מספק את הדרישה.
  • כדי למנוע פיצול של הסביבה העסקית, אסור להשתמש במאפייני הספק כדי לשכפל מאפייני רכב שכבר קיימים ב-SDK‏ VehiclePropertyIds. מידע נוסף זמין בקטע 2.5, דרישות לכלי רכב במסמך ה-CDD.
  • משתמשים בשדות הבאים כדי ליצור את מזהה הנכס:
    • הקבוצה VehiclePropertyGroup:VENDOR VENDOR משמשת רק לנכסי ספקים.
    • VehicleArea בוחרים את סוג האזור המתאים.
    • VehiclePropertyType בוחרים את סוג הנתונים המתאים. הסוג BYTES מאפשר להעביר נתונים גולמיים, וזהו מספיק ברוב המקרים. שליחת נתונים גדולים בתדירות גבוהה דרך מאפייני ספקים יכולה להאט את הגישה של כל הרכב לרשת. חשוב להיזהר כשמוסיפים עומס נתונים גדול.
    • Property ID בוחרים מזהה ייחודי בן שני בייטים לנכס הספק. לדוגמה, 0x1234.
  • ממלאים את השדה VehiclePropConfig.configString בתיאור קצר של נכס הספק. כך הכלים לבדיקת התקינות יכולים לסמן שכפול לא מכוון של מאפייני רכב קיימים. לדוגמה, 'הנכס המותאם אישית שלי ל-XYZ'.
  • גישה דרך CarPropertyManager (לרכיבי Java) או דרך libvhalclient (לרכיבים מקומיים). אין לשנות ממשקי API אחרים של רכב, כי הפעולה הזו עלולה לגרום לבעיות תאימות בעתיד.

הרשאה לנכסי ספקים

הרשאת ברירת המחדל לכל נכסי הספקים שמוגדרים היא android.car.Car.PERMISSION_VENDOR_EXTENSION. כדי לקבל בקרת הרשאות מפורטת יותר, צריך לתמוך בנכס SUPPORT_CUSTOMIZE_VENDOR_PERMISSION. המאפיין הסטטי הזה הוא לקריאה בלבד, ומערך התצורה שלו מציין את ההרשאות למאפייני הספק. הערך של configArray מוגדר באופן הבא (i הוא מספר שלם שמתחיל ב-0):

  • configArray[3 * i] propId, מזהה הנכס של נכס הספק.
  • configArray[3 * i + 1] ערך enum ב-VehicleVendorPermission.aidl שמציין את ההרשאה לקרוא את ערך הנכס.
  • configArray[3 * i + 2] ערך enum ב-VehicleVendorPermission.aidl כדי לציין את ההרשאה לכתוב את ערך הנכס.

לדוגמה, מערך התצורה הבא מגדיר שני מאפייני ספקים, vendor_prop_1 ו-vendor_prop_2, עם ההרשאות הבאות:

  • vendor_prop_1 מחייב את android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_SEAT לקריאה, ואת android.car.hardware.property.VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_SEAT לכתיבת נתונים.
  • vendor_prop-2 דורשת android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_INFO לקריאה, ולא ניתן לכתוב בה לאפליקציות ל-Android.
configArray = {
  PERMISSION_SET_VENDOR_CATEGORY_SEAT
    vendor_prop_2, PERMISSION_GET_VENDOR_CATEGORY_INFO, PERMISSION_NOT_ACCESSIBLE
}

לנכסי הספק שלא נמצאים במערך הזה תהיה הרשאת ברירת המחדל של הספק. כשהאפשרות PERMISSION_NOT_ACCESSIBLE מסומנת, לאפליקציות ל-Android אין גישה לנכס. בדוגמה הזו, אפליקציות ל-Android לא יכולות לכתוב ערך עבור vendor_prop_2. רק לקוחות VHAL מקומיים יכולים לכתוב בנכס הזה.

מערכות מתקדמות לעזרת הנהג (ADAS)

מאפייני רכב של ADAS

SEAT ו-STEERING

מאפייני המושב וההגה

בקרת אקלים

אפשר להשתמש ב-VHAL כדי לשלוט ב-HVAC על ידי הגדרת מאפיינים שקשורים ל-HVAC. רוב מאפייני בקרת האקלים משויכים לאזורים מסוימים ברכב, אבל יש כמה מאפיינים גלובליים. דוגמאות למאפיינים מוגדרים:

נכס מטרה
HVAC_TEMPERATURE_SET הגדרת טמפרטורה לפי מזהה אזור.
HVAC_POWER_ON מצב המתח של מערכת בקרת האקלים לפי מזהה אזור.

למאפייני HVAC שתלויים במצב החשמל של מערכת בקרת האקלים, צריך לציין אותם במערך ההגדרות HVAC_POWER_ON. כדי לראות רשימה מלאה של מאפייני HVAC, מחפשים את HVAC_* ב-VehicleProperty.aidl. אפשר לעיין במאפייני המערכת הנתמכים. נכסים.

כללים למיפוי נכסי HVAC מסוג VehicleArea שאינם גלובלים למזהי אזורים: כל 'אזור' מסוג VehicleArea ספציפי שמושפע מהנכס חייב להיכלל במזהה אזור של הנכס הזה. פקדי הטמפרטורה מוקצים למושב 'שהכי מושפע מהם', אבל כל מושב מושפע חייב להיכלל בדיוק פעם אחת. יכול להיות שההקצאה של המושב האחורי האמצעי ל-AreaID שמשמאל או מימין נראית שרירותית, אבל ההכללה של כל המושב מושפע ב-AreaID אחד בלבד מבטיחה שכל המושב ברכב מוצגים ויש דרך סבירה להשפיע על כל מושב.

דוגמה 1

ברכב יש שני מושבים קדמיים (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_CENTER | ROW_2_LEFT
  • ROW_1_RIGHT | ROW_2_RIGHT

דוגמה 2

ברכב יש שלוש שורות מושבים, עם שני מושבים בשורה הקדמית (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 ל-AreaIDs היא מערך של שלושה רכיבים:

  • ROW_1_LEFT
  • ROW_1_RIGHT
  • ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT

דוגמה 3

ברכב יש שני מושבים קדמיים (ROW_1_LEFT, ‏ ROW_1_RIGHT) ושלושה מושבים אחוריים (ROW_2_LEFT, ‏ ROW_2_CENTER, ‏ ROW_2_RIGHT). נניח שהרכב תומך ב-HVAC_AUTO_ON רק בשני המושבים הקדמיים. קבוצת מיפוי תקינה של מזהי אזורים עבור HVAC_AUTO_ON תהיה מערך של רכיב יחיד:

  • ROW_1_LEFT | ROW_1_RIGHT

אם ל-HVAC_AUTO_ON היו שתי יחידות בקרה נפרדות לצד הנהג ולצד הנוסע, מיפוי חלופי יהיה מערך של שני רכיבים:

  • ROW_1_LEFT
  • ROW_1_RIGHT

INFO_EXTERIOR_DIMENSIONS

המימדים החיצוניים של הרכב נמדדים במילימטרים, כפי שמוצג באיור 1.

איור 1. המימדים החיצוניים של הרכב, תצוגה קדמית.
איור 2. מידות חיצוניות של רכב, תצוגה צדדית.

אפשר להשתמש במאפיינים שמפורטים בטבלה הזו כדי להגדיר את המימדים החיצוניים של הרכב.

מאפיין הרכב השדה VHAL תיאור
גובה int32Values[0] המרחק האנכי בין הקרקע לנקודה הגבוהה ביותר ברכב. ההנחה היא שגלגלי המפעל נאטמו בלחץ אוויר תקין.
אורך int32Values[1] המרחק האופקי בין הנקודות החיצוניות ביותר בחלק הקדמי והאחורי של הרכב.
רוחב, לא כולל מראות int32Values[2] המרחק האופקית בין שתי הנקודות החיצוניות ביותר בכל צד של הרכב, לא כולל את מראות הצד.
רוחב, כולל מראות int32Values[3] המרחק האופקי בין שתי הנקודות החיצוניות ביותר בכל צד של הרכב, כולל מראות הצד.
בסיס הגלגלים int32Values[4] המרחק בין מרכז הגלגלים הקדמיים והגלגלים האחוריים של הרכב.
רוחב המסילה, קדמי int32Values[5] המרחק בין הגלגל הקדמי, שנמדד מהקו המרכזי של חתך אחד של הצמיג לקו המרכזי של חתך הצמיג השני.
רוחב המסילה, אחורי int32Values[6] המרחק בין הגלגל האחורי, שנמדד מהקו המרכזי של חתך אחד של הצמיג לקו המרכזי של חתך הצמיג השני.
קוטר הפניה מדרכה לדרכה int32Values[7] הקוטר של המעגל שנוצר על ידי הגלגלים החיצוניים של הרכב כשמבצעים סיבוב מלא עם הגה נעול לחלוטין.

תאימות לתקנות הבטיחות הכלליות של האיחוד האירופי

אם הרכב צריך לעמוד בדרישות של תקנות הבטיחות הכלליות באיחוד האירופי (GSR) דרך Android, צריכה להיות תמיכה בנכס GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT. דוגמה לתרחישים לדוגמה היא GSR-ISA (בקרת מהירות חכמה) כפי שמוגדר בתקנה 2019/2144 של האיחוד האירופי. הנכס הזה מתווסף ל-AIDL VHAL מ-Android 13, אבל הוא נתמך ב-Car Service מאז השקת Android 12. המאפיין הזה מוגדר כמאפיין שלם גלובלי סטטי לקריאה בלבד, עם ערכים אפשריים שמוגדרים על ידי המאפיין המנוקד GsrComplianceRequirementType:

שם ערך תיאור
GSR_COMPLIANCE_NOT_REQUIRED 0 אין צורך בתאימות ל-GSR
GSR_COMPLIANCE_REQUIRED_V1 1 נדרשת תאימות ל-GSR וגרסת הפתרון של הדרישה היא 1.

כדי לתמוך במאפיין הזה ב-HIDL VHAL (ב-Android 12), הספקים צריכים להטמיע את מזהה הנכס בקוד. לדוגמה, קטע הקוד הבא מראה איך הדבר נתמך ב-VHAL של HIDL לדוגמה DefaultConfig.h:

{
  .config =
      {
          // GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT
          .prop = 0x11400F47,
          .access = VehiclePropertyAccess::READ,
          .changeMode = VehiclePropertyChangeMode::STATIC,
      },
  // GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1
  .initialValue = {.int32Values = {1}},
}

כדי לתמוך במאפיין הזה ב-AIDL VHAL (החל מ-Android 13), ספקים יכולים להשתמש במזהה הנכס מ-VehicleProperty.h וב-enum מ-GsrComplianceRequirementType.h. לדוגמה, כמו ב-AIDL VHAL המצורף DefaultProperties.json:

{
  "property": "VehicleProperty::GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT",
  "defaultValue": {
    "int32Values": [
      "GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1"
    ]
  }
}

כדי לקרוא את המאפיין הזה מאפליקציה ל-Android, משתמשים ב-CarPropertyManager.getIntProperty.

  • ב-Android 13 ואילך, צריך להשתמש ב-VehiclePropertyIds.GENERAL_SAFETY_REGULATION_COMPLIANCE בתור מזהה הנכס.
  • ב-Android 12, משתמשים בערך המקודד מראש 0x11400F47 בתור מזהה הנכס. בנכס הזה נדרשת ההרשאה Car#PERMISSION_CAR_INFO.