قم بتوسيع أوصاف خاصية VHAL في المحاكي

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

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

ملخص

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

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

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

كائن التعداد

يعد كائن Enum الذي يحمل اسم VehicleProperty حالة خاصة حيث يمكنك اعتباره جذرًا. تتم إضافة محتوياته إلى خريطة خصائص السيارة. تحدد 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 Gear . (لا يمكنك إعادة إنتاج هذا السيناريو حيث تم تأليف هذه الصفحة بعد إزالة كافة الخصائص المضمنة لأغراض العرض التوضيحي.)

الشكل 1. ملكية المركبة محددة بالاسم والقيمة.

في علامة التبويب خصائص 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، فإن قيمة معدات الركن هي 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}/ ، وهو جذر الإخراج المستهدف المدمج.