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

מאפייני ספק

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

  • configArray[3 * i] propId, מזהה הנכס של ספק ה-WIP.
  • 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_WHEEL

מערכות חימום, אוורור ומיזוג אוויר

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

מאפיין (property) מטרה
HVAC_TEMPERATURE_SET הגדרת טמפרטורה לפי מזהה אזור.
HVAC_POWER_ON מצב ההפעלה של מערכת בקרת האקלים לפי מזהה אזור.

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

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