برای پشتیبانی از نیازهای خاص هر شریک، 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 میتوانند در این ویژگی بنویسند.
به ویژگیهای SEAT و STEERING_WHEEL مراجعه کنید. شما میتوانید با تنظیم ویژگیهای مرتبط با HVAC، از VHAL برای کنترل HVAC استفاده کنید. اکثر ویژگیهای HVAC با نواحی خاصی در خودرو مرتبط هستند، اگرچه چندین مورد از آنها ویژگیهای عمومی هستند. ویژگیهای تعریفشده نمونه عبارتند از: برای ویژگیهای HVAC که به وضعیت توان سیستم HVAC وابسته هستند، باید در آرایه پیکربندی قوانینی برای نگاشت ویژگیهای HVAC از نوع VehicleArea غیر GLOBAL به AreaIDها: هر «ناحیه» برای یک نوع خاص یک ماشین دو صندلی جلو (ROW_1_LEFT، ROW_1_RIGHT) و سه صندلی عقب (ROW_2_LEFT، ROW_2_CENTER، ROW_2_RIGHT) دارد. دو واحد کنترل دما وجود دارد، یکی برای سمت راننده و یکی برای سمت سرنشین. یک مجموعه نگاشت معتبر از AreaIDها برای یک نگاشت جایگزین برای پیکربندی سختافزاری مشابه میتواند به صورت زیر باشد: یک ماشین سه ردیف صندلی دارد که دو صندلی در ردیف جلو (ROW_1_LEFT، ROW_1_RIGHT) و سه صندلی در ردیف دوم (ROW_2_LEFT، ROW_2_CENTER، ROW_2_RIGHT) و ردیف سوم (ROW_3_LEFT، ROW_3_CENTER، ROW_3_RIGHT) قرار دارند. سه واحد کنترل دما وجود دارد، یکی برای سمت راننده، یکی برای سمت سرنشین و یکی برای عقب. یک راه معقول برای نگاشت یک ماشین دو صندلی جلو (ROW_1_LEFT، ROW_1_RIGHT) و سه صندلی عقب (ROW_2_LEFT، ROW_2_CENTER، ROW_2_RIGHT) دارد. فرض کنید ماشین فقط برای دو صندلی جلو از HVAC_AUTO_ON پشتیبانی میکند. یک مجموعه نگاشت معتبر از AreaIDها برای HVAC_AUTO_ON یک آرایه تک عنصری خواهد بود: اگر ابعاد خارجی یک وسیله نقلیه بر حسب میلیمتر اندازهگیری میشود، همانطور که در شکل ۱ نشان داده شده است. از ویژگیهای شرح داده شده در این جدول برای تعریف ابعاد خارجی خودرو استفاده کنید. اگر وسیله نقلیه باید از طریق اندروید با الزامات مقررات عمومی ایمنی اتحادیه اروپا (GSR) مطابقت داشته باشد، باید از ویژگی برای پشتیبانی از این ویژگی در HIDL VHAL (در اندروید ۱۲)، فروشندگان باید شناسه ویژگی را به صورت کد ثابت (hard-code) وارد کنند. برای مثال، قطعه کد زیر نحوه پشتیبانی از این ویژگی را در فایل مرجع HIDL VHAL برای پشتیبانی از این ویژگی در AIDL VHAL (از اندروید ۱۳)، فروشندگان میتوانند از شناسه ویژگی از برای خواندن این ویژگی از یک برنامه اندروید، از ملک هدف HVAC_TEMPERATURE_SET تنظیم دما بر اساس شناسه منطقه HVAC_POWER_ON وضعیت توان سیستم HVAC به ازای هر شناسه منطقه. HVAC_POWER_ON فهرست شوند. برای مشاهده لیست کامل ویژگیهای HVAC، عبارت HVAC_* را در VehicleProperty.aidl جستجو کنید، به ویژگیهای سیستم پشتیبانیشده مراجعه کنید.VehicleArea که تحت تأثیر ویژگی قرار میگیرد، باید در یک Area ID برای آن ویژگی گنجانده شود. کنترلکنندههای دما به صندلیهایی اختصاص داده میشوند که «بیشترین تأثیر را بر آنها دارند»، اما هر صندلی تحت تأثیر باید دقیقاً یک بار گنجانده شود. اختصاص صندلی عقب وسط به AreaID چپ یا راست ممکن است دلخواه به نظر برسد، اما گنجاندن هر صندلی تحت تأثیر در دقیقاً یک AreaID تضمین میکند که همه صندلیهای خودرو بیان شدهاند و یک روش معقول برای تأثیرگذاری بر هر صندلی در دسترس است.HVAC_TEMPERATURE_SET یک آرایه دو عنصری خواهد بود:HVAC_TEMPERATURE_SET به AreaIDs، یک آرایه سه عنصری است:HVAC_AUTO_ON دو واحد کنترل جداگانه برای سمت راننده و سمت سرنشین داشت، نگاشت جایگزین میتوانست یک آرایه دو عنصری باشد: اموال خودرو میدان VHAL توضیحات ارتفاع int32Values[0] فاصله عمودی بین زمین و بلندترین نقطه خودرو. این فرض بر این است که چرخهای کارخانهای به طور معمول باد شدهاند. طول int32Values[1] فاصله افقی بین بیرونیترین نقاط جلو و عقب خودرو. عرض، بدون احتساب آینهها int32Values[2] فاصله افقی بین دو نقطه بیرونی در هر طرف خودرو، به استثنای آینههای جانبی. عرض، شامل آینهها int32Values[3] فاصله افقی بین دو نقطه بیرونی در هر طرف خودرو، شامل آینههای جانبی. پایه چرخ int32Values[4] فاصله بین مرکز چرخهای جلو و عقب خودرو. عرض مسیر، جلو int32Values[5] فاصله بین چرخ جلو، که از خط مرکزی شیار یک لاستیک تا خط مرکزی شیار لاستیک مقابل اندازهگیری میشود. عرض ریل، عقب int32Values[6] فاصله بین چرخ عقب، از خط مرکزی آج یک تایر تا خط مرکزی آج تایر مقابل اندازهگیری میشود. قطر چرخش جدول تا جدول int32Values[7] قطر دایرهای که چرخهای بیرونی خودرو هنگام چرخش کامل با فرمان کاملاً قفل شده ایجاد میکنند. 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 الزامی است و نسخه راهحل الزامات ۱ است. DefaultConfig.h نشان میدهد:{
.config =
{
// GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT
.prop = 0x11400F47,
.access = VehiclePropertyAccess::READ,
.changeMode = VehiclePropertyChangeMode::STATIC,
},
// GsrComplianceRequirementType::GSR_COMPLIANCE_REQUIRED_V1
.initialValue = {.int32Values = {1}},
}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 به عنوان شناسه ویژگی استفاده کنید.Car#PERMISSION_CAR_INFO نیاز دارد.