توسيع أوصاف سمات VHAL في المحاكي

يحتوي نظام التشغيل Android Automotive (AAOS) على سمات VHAL شائعة يمكن الاطّلاع عليها في نافذة VHAL الخاصة بالمحاكي. نتيجةً لذلك، يمكنك الاطّلاع على الكثير من المعلومات عن فهارس VHAL، بما في ذلك الأسماء والأوصاف ومعنى القيم. يتم استخراج المعلومات من البيانات الوصفية لمواصفات VHAL، والتي يتم تضمينها بشكل ثابت في emu QEMU.

عند إضافة سمات VHAL لاستخدامها حصريًا على أجهزتك، يتطلّب عرض البيانات الوصفية لـ VHAL في نافذة VHAL تعديل الرمز وإنشاء محاكي QEMU مخصّص. للتغلب على هذه المشكلة، يمكنك كتابة الأوصاف بنفسك بتنسيق JSON وإضافتها إلى ملف تكوين النظام.

نظرة عامة

توضّح هذه الصفحة بالتفصيل كيفية توسيع أوصاف خصائص VHAL في محاكي AAOS.

إنشاء بيانات وصفية بتنسيق JSON لتوسيع نطاق خصائص VHAL

يبحث المحاكي عن بيانات وصفية إضافية في جميع الملفات التي تنتهي بـ -types-meta.json في مسار جهاز Android الظاهري (AVD). من المتوقّع أن تتألّف ملفات JSON من مصفوفة من عناصر Enum كما هو موضّح أدناه.

عنصر التعداد

عنصر Enum الذي يحمل الاسم VehicleProperty هو حالة خاصة في That يمكنك اعتباره جذرًا. تتم إضافة محتوياته إلى خريطة خصائص المركبات. 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 مع value289408001 كname لـ CURRENT_GEAR. في المحاكي، تمّ ترميز هذه السمة بشكلٍ ثابت كاسم، وهو Current Gear. (لا يمكنك إعادة إنتاج هذا السيناريو لأنّه تم إنشاء هذه الصفحة بعد إزالة جميع المواقع المبرمَجة لأغراض توضيحية).

الشكل 1: تمّ تعريف VehicleProperty بالاسم والقيمة.

في علامة التبويب خصائص VHAL في المحاكي، تتم إعادة تحميل الاسم ليظهر على النحو التالي: CURRENT_GEAR على النحو المتوقّع.

data_enum

في المثال أعلاه، القيمة المعروضة هي 4 عندما يتم ضبط الترس على P.

الشكل 2: القيمة المعروضة على أنّها 4

كما هو متوقّع، يظهر الاسم في علامة التبويب خصائص 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 للمحاكي، تتم إعادة تحميل الاسم ليظهر على النحو التالي: CURRENT_GEAR، كما هو متوقّع. يتم عرض قيمة السمة 4 على النحو التالي: GEAR_PARK.

استخدام البيانات الوصفية بتنسيق JSON لتوسيع نطاق خصائص VHAL

لاستخدام البيانات الوصفية بتنسيق JSON لتوسيع نطاق سمات VHAL، يمكنك تشغيل النص البرمجي Python (المضمّن في مصدر Android) لإنشاء ملف JSON للسمة الموسّعة من المعلومات الواردة في ملف IDE.

يتضمّن ملف JSON الناتج بعض القيم المكرّرة، مثل change_mode access وunit. على الرغم من أنّ هذه المعلومات هي جزء من سمة VHAL، لا تؤثّر قيم JSON هذه في ما يتم عرضه في نافذة سمة VHAL في المحاكي.

إضافة بيانات وصفية بتنسيق JSON إلى صورة النظام

يُرجى العِلم أنّ اسم الملف يجب أن ينتهي بـ -types-meta.json. وإذا لم يكن الأمر كذلك، يتم تجاهل الملف.

إضافة هدف إنشاء

أضِف ملف -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}/، وهو جذر ملف الإخراج المستهدف الذي تم إنشاؤه.