سیستمعامل Android Automotive (AAOS) حاوی ویژگیهای رایج VHAL است که میتوان آنها را در پنجره VHAL شبیهساز مشاهده کرد. در نتیجه، می توانید اطلاعات فراوانی در مورد VHAL ها از جمله نام، توضیحات و معنای مقادیر مشاهده کنید. اطلاعات از فراداده ویژگی های VHAL استخراج می شود که به صورت سخت در شبیه ساز QEMU کدگذاری شده است.
هنگامی که ویژگی های VHAL خود را برای استفاده انحصاری در دستگاه های خود اضافه می کنید، مشاهده فراداده VHAL در پنجره VHAL از شما می خواهد که کد را تغییر دهید و یک شبیه ساز QEMU سفارشی بسازید. برای حل این مشکل، می توانید توضیحات خود را با فرمت JSON بنویسید و آنها را در تصویر سیستم خود بنویسید.
نمای کلی
این صفحه نحوه گسترش توضیحات ویژگی های VHAL را در شبیه ساز AAOS توضیح می دهد.
فراداده JSON را برای گسترش ویژگی های VHAL ایجاد کنید
شبیه ساز در مسیر دستگاه مجازی Android (AVD) به دنبال متادیتای اضافی در تمام فایل هایی است که با -types-meta.json
ختم می شوند. انتظار می رود فایل های JSON از آرایه ای از اشیاء Enum
تشکیل شده باشند که در زیر نشان داده شده است.
شیء Enum
شی Enum
با نام VehicleProperty
یک مورد خاص است که می توانید آن را به عنوان یک ریشه در نظر بگیرید. محتویات آن به نقشه ویژگی های خودرو اضافه می شود. سایر 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
در مثال بالا، زمانی که چرخ دنده روی P تنظیم شده است، مقدار نمایش داده شده 4 است.
شکل 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 خود، این اسکریپت پایتون (که در منبع اندروید موجود است) را اجرا کنید تا ویژگی توسعه یافته 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}/
کپی میکند، ریشه خروجی هدف ساخته شده شما.