מאפיינים מיוחדים

מאפייני הספק

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

  • תמיד כדאי לנסות להשתמש קודם במאפייני המערכת, ומומלץ להשתמש במאפייני הספק רק כחלופה אחרונה, במקרים שבהם אף אחד ממאפייני המערכת לא מספק את הדרישה.
  • כדי למנוע פיצול של הסביבה העסקית, אסור להשתמש במאפייני הספק כדי לשכפל מאפייני רכב שכבר קיימים ב-SDK‏ VehiclePropertyIds. מידע נוסף זמין בקטע 2.5, דרישות לכלי רכב במסמך ה-CDD.
  • משתמשים בשדות הבאים כדי ליצור את מזהה הנכס:
    • הקבוצה VehiclePropertyGroup:VENDOR VENDOR משמשת רק לנכסי ספקים.
    • VehicleArea בוחרים את סוג האזור המתאים.
    • VehiclePropertyType בוחרים את סוג הנתונים המתאים. הסוג BYTES מאפשר להעביר נתונים גולמיים, וזהו מספיק ברוב המקרים. שליחת Big Data בתדירות גבוהה דרך מאפייני הספק עלולה להאט את הגישה המלאה לרשת הרכב. חשוב להיזהר כשמוסיפים עומס נתונים גדול.
    • Property ID בוחרים מזהה ייחודי בן שני בייטים לנכס הספק. לדוגמה, 0x1234.
  • ממלאים את VehiclePropConfig.configString בתיאור קצר של נכס הספק. כך הכלים לבדיקת התקינות יכולים לסמן שכפול לא מכוון של מאפייני רכב קיימים. לדוגמה, 'My custom property for XYZ'.
  • הגישה דרך CarPropertyManager (לרכיבי Java) או דרך libvhalclient (לרכיבי Native). אין לשנות ממשקי 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

מושב והגה

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

בקרת אקלים

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

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

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

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

דוגמה 1

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

  • 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 רק בשני המושבים הקדמיים. קבוצת מיפוי תקינה של מזהי AreaID עבור 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), הספקים צריכים להטמיע את מזהה הנכס בקוד. לדוגמה, קטע הקוד הבא מראה איך זה נתמך בקובץ העזר HIDL VHAL 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.