הרחבת התיאורים של נכסי 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 }
}  

אובייקט 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) של פלט היעד המובנה.