توضیحات دارایی VHAL را در شبیه ساز گسترش دهید

سیستم‌عامل 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}/ کپی می‌کند، ریشه خروجی هدف ساخته شده شما.