הרחבת התיאורים של מאפייני VHAL במהלך ההדמיה

מערכת 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}/, שורש הפלט של היעד שנוצר.