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

מאפייני ספק

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

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

הרשאה לגישה למאפייני ספק

הרשאת ברירת המחדל לכל מאפייני הספקים המוגדרים היא android.car.Car.PERMISSION_VENDOR_EXTENSION. כדי לקבל רמת פירוט גבוהה יותר של בקרת הרשאות, תומכים במאפיין SUPPORT_CUSTOMIZE_VENDOR_PERMISSION. המאפיין STATIC הזה הוא לקריאה בלבד, ומערך ההגדרות שלו מציין את ההרשאות למאפייני הספק. הערך של 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 משויכים לאזורים מסוימים ברכב, אבל כמה מהם הם מאפיינים גלובליים. דוגמאות למאפיינים מוגדרים:

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

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

כללים למיפוי נכסי מיזוג אוויר מסוג VehicleArea שאינם GLOBAL אל AreaID: כל 'אזור' מסוג 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. המאפיין הזה מוגדר כמאפיין גלובלי סטטי של מספר שלם לקריאה בלבד, עם ערכים אפשריים שמוגדרים על ידי enum‏ 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 ובספירה מ-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 ומעלה, משתמשים ב-<0x0A> VehiclePropertyIds.GENERAL_SAFETY_REGULATION_COMPLIANCE<0x0A> בתור מזהה הנכס.
  • ב-Android 12, משתמשים בערך המקודד הקשיח 0x11400F47 כמזהה המאפיין. בנכס הזה נדרשת ההרשאה Car#PERMISSION_CAR_INFO.