خواص ویژه

ویژگی‌های فروشنده

برای پشتیبانی از نیازهای خاص هر شریک، VHAL به ویژگی‌های فروشنده‌ای که فقط از طریق APIهای سیستم قابل دسترسی هستند، اجازه می‌دهد. هنگام کار با ویژگی‌های فروشنده، از دستورالعمل‌های زیر استفاده کنید:

  • همیشه سعی کنید ابتدا از ویژگی‌های سیستم استفاده کنید، ویژگی‌های فروشنده باید به عنوان آخرین راه حل مورد استفاده قرار گیرند، زمانی که هیچ یک از ویژگی‌های سیستم، نیاز شما را برآورده نمی‌کند.
  • برای جلوگیری از چندپارگی اکوسیستم، نباید از ویژگی‌های فروشنده برای تکرار ویژگی‌های خودرو که از قبل در SDK VehiclePropertyIds وجود دارند، استفاده شود. برای کسب اطلاعات بیشتر، به بخش 2.5، الزامات خودرو در CDD مراجعه کنید.
  • برای ایجاد شناسه ملک از فیلدهای زیر استفاده کنید:
    • VehiclePropertyGroup:VENDOR گروه فروشنده فقط برای املاک فروشنده استفاده می‌شود.
    • VehicleArea نوع منطقه مناسب را انتخاب کنید.
    • VehiclePropertyType نوع داده مناسب را انتخاب کنید. نوع BYTES امکان ارسال داده‌های خام را فراهم می‌کند که در بیشتر موارد کافی است. ارسال مکرر داده‌های حجیم از طریق ویژگی‌های فروشنده می‌تواند دسترسی به کل شبکه خودرو را کند کند. هنگام اضافه کردن یک بار داده بزرگ مراقب باشید.
    • Property ID یک شناسه دو بایتی منحصر به فرد برای ویژگی فروشنده انتخاب کنید. برای مثال، 0x1234.
  • VehiclePropConfig.configString را با توضیح کوتاهی از ویژگی فروشنده پر کنید. این به ابزارهای بررسی اعتبار اجازه می‌دهد تا تکرار تصادفی ویژگی‌های موجود خودرو را علامت‌گذاری کنند. به عنوان مثال، "ویژگی سفارشی من برای XYZ".
  • دسترسی از طریق CarPropertyManager (برای کامپوننت‌های جاوا) یا از طریق libvhalclient (برای native). سایر APIهای خودرو را تغییر ندهید زیرا انجام این کار می‌تواند منجر به مشکلات سازگاری در آینده شود.

مجوز املاک فروشنده

مجوز پیش‌فرض برای هر یک از ویژگی‌های فروشنده تعریف‌شده android.car.Car.PERMISSION_VENDOR_EXTENSION است. برای جزئیات دقیق‌تر کنترل مجوز، از ویژگی SUPPORT_CUSTOMIZE_VENDOR_PERMISSION پشتیبانی کنید. این ویژگی STATIC فقط خواندنی است و آرایه پیکربندی آن، مجوزهای مربوط به ویژگی‌های فروشنده را مشخص می‌کند. configArray به صورت زیر تنظیم شده است (i یک عدد صحیح است که از 0 شروع می‌شود):

  • configArray[3 * i] propId، شناسه ویژگی برای ویژگی فروشنده.
  • configArray[3 * i + 1] یک enum در VehicleVendorPermission.aidl برای نشان دادن مجوز خواندن مقدار ویژگی.
  • configArray[3 * i + 2] یک enum در VehicleVendorPermission.aidl برای نشان دادن مجوز نوشتن مقدار ویژگی.

برای مثال، آرایه پیکربندی زیر دو ویژگی فروشنده، vendor_prop_1 و vendor_prop_2 ، را طوری پیکربندی می‌کند که دارای مجوزها باشند:

  • vendor_prop_1 برای خواندن به android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_SEAT و برای نوشتن به android.car.hardware.property.VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_SEAT نیاز دارد.
  • vendor_prop-2 برای خواندن به android.car.hardware.property.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_INFO نیاز دارد و برای برنامه‌های اندروید قابل نوشتن نیست.
configArray = {
  PERMISSION_SET_VENDOR_CATEGORY_SEAT
    vendor_prop_2, PERMISSION_GET_VENDOR_CATEGORY_INFO, PERMISSION_NOT_ACCESSIBLE
}

ویژگی‌های فروشنده‌ای که در این آرایه نیستند، مجوز پیش‌فرض فروشنده را دریافت می‌کنند. وقتی PERMISSION_NOT_ACCESSIBLE انتخاب شود، برنامه‌های اندروید نمی‌توانند به این ویژگی دسترسی داشته باشند. در مثال، برنامه‌های اندروید نمی‌توانند مقداری برای vendor_prop_2 بنویسند. فقط کلاینت‌های بومی VHAL می‌توانند در این ویژگی بنویسند.

سیستم‌های پیشرفته کمک راننده (ADAS)

به ویژگی‌های خودروی ADAS مراجعه کنید.

صندلی و فرمان

به ویژگی‌های SEAT و STEERING_WHEEL مراجعه کنید.

تهویه مطبوع

شما می‌توانید با تنظیم ویژگی‌های مرتبط با HVAC، از VHAL برای کنترل HVAC استفاده کنید. اکثر ویژگی‌های HVAC با نواحی خاصی در خودرو مرتبط هستند، اگرچه چندین مورد از آنها ویژگی‌های عمومی هستند. ویژگی‌های تعریف‌شده نمونه عبارتند از:

ملک هدف
HVAC_TEMPERATURE_SET تنظیم دما بر اساس شناسه منطقه
HVAC_POWER_ON وضعیت توان سیستم HVAC به ازای هر شناسه منطقه.

برای ویژگی‌های HVAC که به وضعیت توان سیستم HVAC وابسته هستند، باید در آرایه پیکربندی HVAC_POWER_ON فهرست شوند. برای مشاهده لیست کامل ویژگی‌های HVAC، HVAC_* را در VehicleProperty.aidl جستجو کنید، به ویژگی‌های سیستم پشتیبانی‌شده مراجعه کنید.

قوانینی برای نگاشت ویژگی‌های HVAC از نوع VehicleArea غیر GLOBAL به AreaIDها: هر «ناحیه» برای یک نوع خاص VehicleArea که تحت تأثیر ویژگی قرار می‌گیرد، باید در یک Area ID برای آن ویژگی گنجانده شود. کنترل‌کننده‌های دما به صندلی‌هایی اختصاص داده می‌شوند که «بیشترین تأثیر را بر آنها دارند»، اما هر صندلی تحت تأثیر باید دقیقاً یک بار گنجانده شود. اختصاص صندلی عقب وسط به AreaID چپ یا راست ممکن است دلخواه به نظر برسد، اما گنجاندن هر صندلی تحت تأثیر در دقیقاً یک AreaID تضمین می‌کند که همه صندلی‌های خودرو بیان شده‌اند و یک روش معقول برای تأثیرگذاری بر هر صندلی در دسترس است.

مثال ۱

یک ماشین دو صندلی جلو (ROW_1_LEFT، ROW_1_RIGHT) و سه صندلی عقب (ROW_2_LEFT، ROW_2_CENTER، ROW_2_RIGHT) دارد. دو واحد کنترل دما وجود دارد، یکی برای سمت راننده و یکی برای سمت سرنشین. یک مجموعه نگاشت معتبر از AreaIDها برای HVAC_TEMPERATURE_SET یک آرایه دو عنصری خواهد بود:

  • ردیف اول_چپ | ردیف دوم_چپ
  • ردیف اول_راست | ردیف دوم_مرکز | ردیف دوم_راست

یک نگاشت جایگزین برای پیکربندی سخت‌افزاری مشابه می‌تواند به صورت زیر باشد:

  • ردیف اول_چپ | مرکز ردیف دوم | ردیف دوم_چپ
  • ردیف اول_راست | ردیف دوم_راست

مثال ۲

یک ماشین سه ردیف صندلی دارد که دو صندلی در ردیف جلو (ROW_1_LEFT، ROW_1_RIGHT) و سه صندلی در ردیف دوم (ROW_2_LEFT، ROW_2_CENTER، ROW_2_RIGHT) و ردیف سوم (ROW_3_LEFT، ROW_3_CENTER، ROW_3_RIGHT) قرار دارند. سه واحد کنترل دما وجود دارد، یکی برای سمت راننده، یکی برای سمت سرنشین و یکی برای عقب. یک راه معقول برای نگاشت HVAC_TEMPERATURE_SET به AreaIDs، یک آرایه سه عنصری است:

  • ردیف_۱_چپ
  • ردیف_۱_راست
  • ردیف_۲_چپ | ردیف_۲_مرکز | ردیف_۲_راست | ردیف_۳_چپ | ردیف_۳_مرکز | ردیف_۳_راست

مثال ۳

یک ماشین دو صندلی جلو (ROW_1_LEFT، ROW_1_RIGHT) و سه صندلی عقب (ROW_2_LEFT، ROW_2_CENTER، ROW_2_RIGHT) دارد. فرض کنید ماشین فقط برای دو صندلی جلو از HVAC_AUTO_ON پشتیبانی می‌کند. یک مجموعه نگاشت معتبر از AreaIDها برای HVAC_AUTO_ON یک آرایه تک عنصری خواهد بود:

  • ردیف_۱_چپ | ردیف_۱_راست

اگر HVAC_AUTO_ON دو واحد کنترل جداگانه برای سمت راننده و سمت سرنشین داشت، نگاشت جایگزین می‌توانست یک آرایه دو عنصری باشد:

  • ردیف_۱_چپ
  • ردیف_۱_راست

ابعاد_خارجی_اطلاعات

ابعاد خارجی یک وسیله نقلیه بر حسب میلی‌متر اندازه‌گیری می‌شود، همانطور که در شکل ۱ نشان داده شده است.

شکل ۱. ابعاد بیرونی خودرو، نمای جلو.
شکل ۲. ابعاد بیرونی خودرو، نمای جانبی.

از ویژگی‌های شرح داده شده در این جدول برای تعریف ابعاد خارجی خودرو استفاده کنید.

اموال خودرو میدان VHAL توضیحات
ارتفاع int32Values[0] فاصله عمودی بین زمین و بلندترین نقطه خودرو. این فرض بر این است که چرخ‌های کارخانه‌ای به طور معمول باد شده‌اند.
طول int32Values[1] فاصله افقی بین بیرونی‌ترین نقاط جلو و عقب خودرو.
عرض، بدون احتساب آینه‌ها int32Values[2] فاصله افقی بین دو نقطه بیرونی در هر طرف خودرو، به استثنای آینه‌های جانبی.
عرض، شامل آینه‌ها int32Values[3] فاصله افقی بین دو نقطه بیرونی در هر طرف خودرو، شامل آینه‌های جانبی.
پایه چرخ int32Values[4] فاصله بین مرکز چرخ‌های جلو و عقب خودرو.
عرض مسیر، جلو int32Values[5] فاصله بین چرخ جلو، که از خط مرکزی شیار یک لاستیک تا خط مرکزی شیار لاستیک مقابل اندازه‌گیری می‌شود.
عرض ریل، عقب int32Values[6] فاصله بین چرخ عقب، از خط مرکزی آج یک تایر تا خط مرکزی آج تایر مقابل اندازه‌گیری می‌شود.
قطر چرخش جدول تا جدول int32Values[7] قطر دایره‌ای که چرخ‌های بیرونی خودرو هنگام چرخش کامل با فرمان کاملاً قفل شده ایجاد می‌کنند.

انطباق با مقررات ایمنی عمومی اتحادیه اروپا

اگر وسیله نقلیه باید از طریق اندروید با الزامات مقررات عمومی ایمنی اتحادیه اروپا (GSR) مطابقت داشته باشد، باید از ویژگی GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT پشتیبانی شود. یک نمونه از موارد استفاده، GSR-ISA (دستیار هوشمند سرعت) است که در مقررات اتحادیه اروپا 2019/2144 تعریف شده است. این ویژگی از اندروید 13 به AIDL VHAL اضافه شده است، با این حال، از زمان انتشار اندروید 12 در Car Service پشتیبانی می‌شود. این ویژگی به عنوان یک ویژگی عدد صحیح جهانی استاتیک فقط خواندنی تعریف شده است، با مقادیر ممکن که توسط GsrComplianceRequirementType enum تعریف می‌شوند:

نام ارزش توضیحات
GSR_COMPLIANCE_NOT_REQUIRED 0 انطباق با GSR الزامی نیست
GSR_COMPLIANCE_REQUIRED_V1 ۱ انطباق با GSR الزامی است و نسخه راه‌حل الزامات ۱ است.

برای پشتیبانی از این ویژگی در HIDL VHAL (در اندروید ۱۲)، فروشندگان باید شناسه ویژگی را به صورت کد ثابت (hard-code) وارد کنند. برای مثال، قطعه کد زیر نحوه پشتیبانی از این ویژگی را در فایل مرجع HIDL VHAL DefaultConfig.h نشان می‌دهد:

{
  .config =
      {
          // GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT
          .prop = 0x11400F47,
          .access = VehiclePropertyAccess::READ,
          .changeMode = VehiclePropertyChangeMode::STATIC,
      },
  // GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1
  .initialValue = {.int32Values = {1}},
}

برای پشتیبانی از این ویژگی در AIDL VHAL (از اندروید ۱۳)، فروشندگان می‌توانند از شناسه ویژگی از VehicleProperty.h و enum از GsrComplianceRequirementType.h استفاده کنند. به عنوان مثال، مانند مرجع AIDL VHAL DefaultProperties.json :

{
  "property": "VehicleProperty::GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT",
  "defaultValue": {
    "int32Values": [
      "GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1"
    ]
  }
}

برای خواندن این ویژگی از یک برنامه اندروید، از CarPropertyManager.getIntProperty استفاده کنید.

  • در اندروید ۱۳ و بالاتر، از VehiclePropertyIds.GENERAL_SAFETY_REGULATION_COMPLIANCE به عنوان شناسه ویژگی استفاده کنید.
  • در اندروید ۱۲، از مقدار ثابت 0x11400F47 به عنوان شناسه ویژگی استفاده کنید. این ویژگی به مجوز Car#PERMISSION_CAR_INFO نیاز دارد.