מערכת ההפעלה 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 } }
אובייקט Value
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. נכס הרכב מוגדר עם שם וערך.
בכרטיסייה VHAL Properties (מאפייני VHAL) של האמולטור, מתבצע רענון של השם כדי שיהיה אפשר לקרוא אותו.
CURRENT_GEAR
כמצופה.
data_enum
בדוגמה שלמעלה, הערך המוצג הוא 4 כשגלגל השיניים מוגדר לערך פ.
איור 2. הערך מוצג כ-4.
כפי שצריך, בכרטיסייה VHAL Properties (מאפייני VHAL) באמולטור, השם מופיע כך
CURRENT_GEAR
. זאת בניגוד לאמולטור הקיים, שבו הוא מוצג כך
פ.
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 (מאפייני VHAL) של האמולטור, מתבצע רענון של השם כדי שיהיה ניתן לקרוא אותו.
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}/
, הרמה הבסיסית (root)
של פלט היעד המובנה.