يحتوي نظام التشغيل 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
مع value
289408001 ك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}/
، وهو جذر
ملف الإخراج المستهدف الذي تم إنشاؤه.