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