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

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

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

نظرة عامة

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

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

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

كائن Enum

ويعتبر الكائن Enum الذي يحمل الاسم VehicleProperty حالة خاصة في That's. فيمكنك اعتبارها جذرًا. تتم إضافة محتواه إلى خريطة خصائص المركبة. مشاكل أخرى Enums (باسم غير VehicleProperty) تحدّد خرائط الأسماء القيم المخصصة.

Enum: {
  "name" : String,
  "values" : Array of { 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 الترس. (لا يمكنك إعادة إنتاج هذا السيناريو، حيث تمت كتابة هذه الصفحة بعد إزالة جميع ملفات البيانات الخصائص لأغراض التوضيح).

الشكل 1. يتم تحديد خاصية السيارة من خلال الاسم والقيمة.

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

تعداد البيانات

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

الشكل 2. يتم عرض القيمة على شكل 4.

على النحو المنشود، في علامة التبويب خصائص 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، تبلغ قيمة ترس بارك 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 الموسّع من المعلومات رخصة اللغة الإنجليزية (AIDL).

يتضمن ملف 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}/، الجذر من الناتج المستهدف المُبني.