מערכת Android Automotive OS (AAOS) מכילה מאפייני VHAL נפוצים שאפשר לראות בחלון VHAL של אמולטור. כתוצאה מכך, אפשר לראות מידע רב על VHAL, כולל שמות, תיאורים והמשמעות של הערכים. המידע מחולץ מהמטא-נתונים של מאפייני VHAL, שמוטמעים באופן קבוע במהדמ של QEMU.
כשמוסיפים מאפייני VHAL משלכם לשימוש בלעדי במכשירים, כדי להציג את המטא-נתונים של VHAL בחלון VHAL צריך לשנות את הקוד וליצור אמולטור QEMU בהתאמה אישית. כדי לעקוף את הבעיה הזו, אפשר לכתוב תיאורים משלכם בפורמט JSON ולהוסיף אותם לאימג' של המערכת.
סקירה כללית
בדף הזה מוסבר איך להרחיב את התיאורים של מאפייני VHAL במהדמ של AAOS.
יצירת מטא-נתונים מסוג JSON כדי להרחיב את המאפיינים של VHAL
הסימולטור מחפש מטא-נתונים נוספים בכל הקבצים שמסתיימים ב--types-meta.json
בנתיב של מכשיר Android וירטואלי (AVD). קובצי JSON אמורים להכיל מערך של אובייקטים מסוג Enum
, כפי שמוצג בהמשך.
אובייקט של טיפוס בן מנייה (enum)
אובייקט Enum
בשם VehicleProperty
הוא מקרה מיוחד, וניתן להתייחס אליו כאל שורש. התוכן שלו מתווסף למפה של מאפייני הרכב. שדות Enums
אחרים (עם שם שאינו VehicleProperty
) מגדירים מפות של השמות של הערכים המותאמים אישית.
Enum: { "name" : String, "values" : Array of { ValueObject } }
ValueObject
ValueObject: { "name" : String, "value" : Integer, "data_enum" : String, VehicleProperty only, optional, }
ב-VehicleProperty
, השם Enum
מתאר את אופן הצגת הנכס הזה בחלון VHAL של המהדר. הערך הוא property_id
של המאפיין שמתואר על ידי ValueObject
.
data_enum
משייכת את ValueObject
ל-Enum
אחר.
השיוך הזה משמש למיפוי ערך למחרוזת שקריאה לבני אדם, והוא קיים רק עבור ValueObjects
ב-Enum
של VehicleProperty
.
דוגמה ל-VehicleProperty
מוצגת בהמשך:
[ { "name": "VehicleProperty", "values": [ { "name": "CURRENT_GEAR", "value": 289408001 } ] } ]
בדוגמה הזו, property_id
עם value
של 289408001 מסופק כ-name
עבור CURRENT_GEAR
.
במהלך ההדמיה, הנכס הזה כבר מקודד בתור שם, Current Gear.
(אי אפשר לשחזר את התרחיש הזה כי הדף הזה נוצר אחרי שהסרנו את כל המאפיינים שמוגדרים בקוד לצורכי הדגמה).
איור 1. מאפיין VehicleProperty שמוגדר עם שם וערך.
בכרטיסייה VHAL Properties של הסימולטור, השם יתעדכן ל-CURRENT_GEAR
כצפוי.
data_enum
בדוגמה שלמעלה, הערך המוצג הוא 4 כשההילוך מוגדר ל-P.
איור 2. הערך מוצג בתור 4.
כמצופה, בכרטיסייה VHAL Properties (מאפייני VHAL) במהדורת האדמולטור, השם מופיע בתור CURRENT_GEAR
. זאת בניגוד למה שמופיע במהדורה הקיימת של הסימולטור, P.
enum VehicleGear { GEAR_UNKNOWN = 0x0000, GEAR_NEUTRAL = 0x0001, GEAR_REVERSE = 0x0002, GEAR_PARK = 0x0004, GEAR_DRIVE = 0x0008, GEAR_1 = 0x0010, GEAR_2 = 0x0020, GEAR_3 = 0x0040, GEAR_4 = 0x0080, GEAR_5 = 0x0100, GEAR_6 = 0x0200, GEAR_7 = 0x0400, GEAR_8 = 0x0800, GEAR_9 = 0x1000, }
למידע נוסף, ראו ההגדרה של AIDL.
כפי שמוגדר ב-AIDL, הערך של ההילוך Park הוא 4, כלומר צריך לתרגם את הערך 4 ל-P. במקרה כזה, צריך להשתמש ב-data_enum
, שממפה את ערך המאפיין הזה למחרוזת שקריאה לבני אדם ב-Enum
אחר. המהדר משתמש במפה הזו כדי לתרגם את ערכי המאפיינים. לדוגמה:
[ { "name": "VehicleProperty", "values": [ { "name": "CURRENT_GEAR", "value": 289408001, "data_enum": "VehicleGear" } ] }, { "name": "VehicleGear", "values": [ { "name": "GEAR_UNKNOWN", "value": 0 }, { "name": "GEAR_PARK", "value": 4 } ] } ]
מוסיפים את "data_enum": "VehicleGear"
, כך שהמכונה הווירטואלית תשתמש ב-Enum
בשם VehicleGear
כדי לתרגם את ערך המאפיין. מוסיפים עוד Enum
בשם VehicleGear
, כאשר הערך הוא מערך של ValueObject
, שבו ערך הנכס (עם הערך) צריך להופיע בתור שם.
איור 3. הערך מוצג כ-GEAR_PARK.
בכרטיסייה VHAL Properties של הסימולטור, השם יתעדכן ל-CURRENT_GEAR
, כצפוי. ערך המאפיין 4
מוצג בתור GEAR_PARK
.
שימוש במטא-נתונים של JSON כדי להרחיב את מאפייני VHAL
כדי להשתמש במטא-נתונים של JSON כדי להרחיב את המאפיינים של VHAL, מריצים את סקריפט Python הזה (שנמצא במקור של Android) כדי ליצור את ה-JSON של המאפיין המורחב מהמידע ב-AIDL.
קובץ ה-JSON שנוצר כולל ערכים יתירים מסוימים, כמו change_mode
, access
ו-unit
. המידע הזה הוא חלק מנכס ה-VHAL, אבל ערכי ה-JSON האלה לא משפיעים על מה שמוצג בחלון של נכס ה-VHAL במהדר.
הוספת מטא-נתונים בפורמט JSON לתמונת המערכת
חשוב לזכור ששם הקובץ חייב להסתיים ב--types-meta.json
. אחרת, המערכת תתעלם מהקובץ.
הוספת יעד build
מוסיפים את הקובץ -types-meta.json
לתיקייה PRODUCT_COPY_FILE
. לדוגמה:
PRODUCT_COPY_FILES += \ device/generic/car/common/vehicle-types-meta.json:vehicle-types-meta.json
הקוד הזה מעתיק את הקובץ אל out/target/product/{your_target_path}/
, שורש הפלט של היעד שנוצר.