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