واسط لایه انتزاعی سخت افزار خودرو (VHAL) ویژگی هایی را که OEM ها می توانند پیاده سازی کنند را تعریف می کند و حاوی ابرداده ویژگی است (به عنوان مثال، آیا این ویژگی یک int است و کدام حالت های تغییر مجاز است). رابط VHAL مبتنی بر دسترسی (خواندن، نوشتن، اشتراک) یک ویژگی است که یک انتزاع برای یک تابع خاص است.
رابط های HAL
VHAL از اینترفیس های زیر استفاده می کند:
-
getAllPropConfigs()
تولید می کند(vec<VehiclePropConfig>propConfigs)
پیکربندی تمام ویژگی های پشتیبانی شده توسط VHAL را فهرست کنید. CarService فقط از ویژگی های پشتیبانی شده استفاده می کند. -
getPropConfigs(vec<int32_t> props)
ایجاد می کند(StatusCode status,vec<VehiclePropConfig> propConfigs);
پیکربندی خواص انتخاب شده را برگردانید. -
set(VehiclePropValue propValue)
ایجاد می کند(StatusCodestatus);
یک مقدار برای ملک بنویسید. نتیجه نوشتن در هر ویژگی تعریف می شود. -
subscribe(IVehicleCallback callback, vec<SubscribeOptions> options)
ایجاد می کند(StatusCode status);
نظارت بر تغییر ارزش دارایی را شروع کنید. برای ویژگی منطقه بندی شده،unsubscribe(IVehicleCallback callback, int32_t propId)
(StatusCode status);
VHAL از واسط های پاسخ به تماس زیر استفاده می کند:
-
oneway onPropertyEvent(vec<VehiclePropValue>propValues);
تغییر ارزش اموال وسیله نقلیه را مطلع می کند. باید فقط برای املاک مشترک انجام شود. -
oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
خطا یا خطای سطح جهانی VHAL در هر ویژگی را برگردانید. خطای جهانی باعث راه اندازی مجدد HAL می شود که می تواند منجر به راه اندازی مجدد سایر مؤلفه ها (از جمله برنامه ها) شود.
خواص خودرو
ویژگی ها می توانند فقط خواندنی، فقط نوشتنی (برای انتقال اطلاعات به سطح VHAL استفاده می شود)، یا خواندن و نوشتن (پشتیبانی از اکثر ویژگی ها اختیاری است). هر ویژگی به طور منحصر به فرد توسط یک کلید int32 شناسایی می شود و دارای یک نوع از پیش تعریف شده است ( value_type
):
-
BYTES
-
BOOLEAN
-
EPOCH_TIME
-
FLOAT
-
FLOAT[]
-
INT32
-
INT32[]
-
INT64
-
INT64[]
-
STRING
-
MIXED
یک ویژگی پهنه بندی شده ممکن است بر اساس تعداد مناطق پشتیبانی شده توسط ویژگی، بیش از یک مقدار داشته باشد.
انواع منطقه
VHAL چندین نوع ناحیه را تعریف می کند:
نوع منطقه | توضیحات |
---|---|
GLOBAL | این ملک تک تن است و چند ناحیه ندارد. |
WINDOW | ناحیه مبتنی بر ویندوز، از Enum VehicleAreaWindow استفاده می کند. |
MIRROR | منطقه مبتنی بر آینه، از VehicleAreaMirror enum استفاده می کند. |
SEAT | منطقه بر اساس صندلی، از VehicleAreaSeat enum استفاده می کند. |
DOOR | منطقه بر اساس درب، از VehicleAreaDoor enum استفاده می کند. |
WHEEL | منطقه مبتنی بر چرخ، از VehicleAreaWheel enum استفاده می کند. |
هر ویژگی منطقه بندی شده باید از نوع منطقه از پیش تعریف شده استفاده کند. هر نوع ناحیه دارای مجموعه ای از پرچم های بیت است که در یک enum برای نوع ناحیه تعریف شده است. به عنوان مثال، ناحیه SEAT
شماره های VehicleAreaSeat
تعریف می کند:
-
ROW_1_LEFT = 0x0001
-
ROW_1_CENTER = 0x0002
-
ROW_1_RIGHT = 0x0004
-
ROW_2_LEFT = 0x0010
-
ROW_2_CENTER = 0x0020
-
ROW_2_RIGHT = 0x0040
-
ROW_3_LEFT = 0x0100
- ...
شناسه های منطقه
ویژگی های منطقه بندی شده از طریق شناسه های منطقه نشان داده می شوند. هر ویژگی منطقه بندی شده ممکن است از یک یا چند شناسه منطقه پشتیبانی کند. شناسه منطقه از یک یا چند پرچم از شماره مربوطه خود تشکیل شده است. برای مثال، یک ویژگی با استفاده از VehicleAreaSeat
ممکن است از شناسههای ناحیه زیر استفاده کند:
مورد | توضیحات |
---|---|
ROW_1_LEFT | ROW_1_RIGHT | شناسه منطقه برای هر دو صندلی جلو اعمال می شود. |
ROW_2_LEFT | فقط برای صندلی عقب چپ اعمال می شود. |
ROW_2_RIGHT | فقط برای صندلی عقب راست اعمال می شود. |
وضعیت ملک
هر مقدار دارایی دارای یک مقدار VehiclePropertyStatus
است. این نشان دهنده وضعیت فعلی ملک است:
مورد | توضیحات |
---|---|
AVAILABLE | ملک موجود است و ارزش آن معتبر است. |
UNAVAILABLE | ارزش ملک در حال حاضر در دسترس نیست. برای ویژگیهای غیرفعال موقت برای یک ویژگی پشتیبانی شده استفاده میشود. |
ERROR | مشکلی در این ویژگی وجود دارد. |
پیکربندی یک ویژگی
از VehiclePropConfig
برای ارائه اطلاعات پیکربندی برای هر ویژگی استفاده کنید. اطلاعات شامل:
متغیر | توضیحات |
---|---|
access | r ، w ، rw |
changeMode | نحوه نظارت بر یک ویژگی را در تغییر در مقابل پیوسته نشان می دهد. |
areaConfigs | مقادیر areaId ، min و max . |
configArray | پارامترهای پیکربندی اضافی |
configString | اطلاعات اضافی به عنوان یک رشته ارسال می شود. |
minSampleRate | maxSampleRate |
prop | شناسه ملک، بین |
ویژگی های منطقه رسیدگی
یک ویژگی منطقهبندی شده معادل مجموعهای از ویژگیهای متعدد است که در آن میتوان به هر ویژگی فرعی با مقدار Area ID مشخص شده دسترسی داشت.
-
get
تماس برای ملک منطقهای همیشه شامل شناسه منطقه در درخواست میشود. بنابراین، فقط مقدار فعلی برای شناسه منطقه درخواستی برگردانده می شود. اگر ویژگی جهانی است، شناسه منطقه 0 است. - فراخوانی
set
برای ویژگی منطقهبندی شده همیشه شامل شناسه منطقه در درخواست میشود. بنابراین، فقط شناسه منطقه درخواستی تغییر می کند. - تماس
subscribe
رویدادها را برای همه شناسههای منطقه برای ملک ایجاد میکند.
تماس بگیرید
در طول مقداردهی اولیه، ممکن است مقدار ویژگی هنوز در دسترس نباشد زیرا پیام شبکه خودروی منطبق هنوز دریافت نشده است. در چنین مواردی، تماس get
باید بازگردد -EAGAIN
. برخی از ویژگی ها (مانند HVAC) دارای ویژگی روشن/خاموش جداگانه هستند. فراخوانی get
برای چنین ویژگی (هنگامی که خاموش است) باید به جای بازگرداندن یک خطا، وضعیت UNAVAILABLE
را بازگرداند. به عنوان مثال، دمای HVAC را دریافت کنید
شکل 1 . دریافت دمای HVAC (CS = CarService، VHAL = Vehicle HAL)
تنظیم تماس ها
در یک عملیات معمولی، یک تماس set
منجر به ایجاد یک درخواست تغییر در سراسر شبکه خودرو می شود. یک تماس set
در حالت ایده آل یک عملیات ناهمزمان است که در اسرع وقت برمی گردد، اما می تواند همزمان نیز باشد. برخی از تماسهای set
ممکن است نیاز به دادههای اولیه داشته باشند، اما در حین تنظیم اولیه، چنین دادههایی ممکن است هنوز در دسترس نباشند. در چنین مواردی، تماس set
باید StatusCode#TRY_AGAIN
برگرداند. برخی از ویژگیها با روشن و خاموش کردن جداگانه، باید StatusCode#NOT_AVAILABLE
یا StatusCode#NOT_AVAILABLE_DISABLED
برگردانند، زمانی که ویژگی خاموش است و set
نمیشود. تا زمانی که set
موثر واقع نشود، get
لزوماً همان مقداری که تنظیم شده است را بر نمی گرداند. برای مثال، set HVAC Temperature
.
شکل 2 . تنظیم دمای HVAC (CS = CarService، VHAL = Vehicle HAL)
رسیدگی به خواص سفارشی
برای پشتیبانی از نیازهای خاص شریک، VHAL به ویژگی های سفارشی اجازه می دهد که به برنامه های سیستم محدود می شوند. هنگام کار با ویژگی های سفارشی از دستورالعمل های زیر استفاده کنید:
- شناسه ملک باید با استفاده از فیلدهای زیر ایجاد شود:
-
VehiclePropertyGroup:VENDOR
گروهVENDOR
فقط برای خواص سفارشی استفاده می شود. -
VehicleArea
نوع منطقه مناسب را انتخاب کنید. -
VehiclePropertyType
نوع داده مناسب را انتخاب کنید. نوعBYTES
اجازه ارسال داده های خام را می دهد که در بیشتر موارد کافی است. ارسال دادههای بزرگ به طور مکرر از طریق ویژگیهای سفارشی میتواند دسترسی کل شبکه خودرو را کند کند — هنگام اضافه کردن محموله بزرگ مراقب باشید. -
Property ID
یک شناسه چهار نیبل برای ویژگی سفارشی انتخاب کنید.
-
- برای جلوگیری از تکه تکه شدن اکوسیستم، ویژگیهای سفارشی نباید برای تکرار ویژگیهای وسیله نقلیه که قبلاً در ( VehiclePropertyIds SDK) وجود دارد، استفاده شود.
-
VehiclePropConfig.configString
با توضیح کوتاهی از ویژگی سفارشی پر کنید. این به ابزارهای بررسی سلامت عقل اجازه میدهد تا تکرار تصادفی ویژگیهای خودروی موجود را علامتگذاری کنند. به عنوان مثال، "حالت نور خطر". - دسترسی از طریق
CarPropertyManager
(برای اجزای جاوا) یا از طریق Vehicle Network Service API (برای بومی). API های دیگر خودرو را تغییر ندهید زیرا انجام این کار می تواند منجر به مشکلات سازگاری در آینده شود. - پس از پیاده سازی ویژگی های فروشنده، فقط لیست مجوزها را در فهرست
VehicleVendorPermission
برای ویژگی های فروشنده انتخاب کنید. نگاشت مجوزهای فروشنده به ویژگی های سیستم، CTS و VTS را از بین می برد.
مدیریت خواص HVAC
با تنظیم ویژگی های مربوط به HVAC می توانید از VHAL برای کنترل HVAC استفاده کنید. اکثر ویژگی های HVAC دارای ویژگی های منطقه بندی شده هستند، اگرچه تعدادی از آنها خصوصیات غیر منطقه ای (جهانی) هستند. ویژگی های تعریف شده نمونه عبارتند از:
اموال | هدف |
---|---|
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET | تنظیم دما در هر منطقه |
VEHICLE_PROPERTY_HVAC_RECIRC_ON | کنترل گردش مجدد در هر منطقه |
برای مشاهده لیست کاملی از ویژگی های HVAC، VEHICLE_PROPERTY_HVAC_*
را در types.hal
جستجو کنید. هنگامی که ویژگی HVAC از VehicleAreaSeat
استفاده می کند، قوانین اضافی برای نگاشت یک ویژگی HVAC منطقه بندی شده به شناسه های منطقه اعمال می شود. هر صندلی موجود در خودرو باید بخشی از شناسه منطقه در آرایه شناسه منطقه باشد.
مثال یک. یک خودرو دارای دو صندلی جلو ( ROW_1_LEFT, ROW_1_RIGHT
) و سه صندلی عقب ( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT
) است. این خودرو دارای دو واحد کنترل دما است: سمت راننده و سمت سرنشین.
- مجموعه نقشهبرداری معتبری از شناسههای ناحیه برای
HVAC_TEMPERATURE SET
است:-
ROW_1_LEFT | ROW_2_LEFT
-
ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
-
- یک نگاشت جایگزین برای همان پیکربندی سخت افزاری این است:
-
ROW_1_LEFT | ROW_2_LEFT | ROW_2_CENTER
-
ROW_1_RIGHT | ROW_2_RIGHT
-
مثال دوم. یک ماشین دارای سه ردیف صندلی با دو صندلی در ردیف جلو ( 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
به شناسههای ناحیه، به صورت یک آرایه سه عنصری است:
-
ROW_1_LEFT
-
ROW_1_RIGHT
-
ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT
کنترل ویژگی های سنسور
ویژگیهای حسگر VHAL نشاندهنده دادههای واقعی حسگر یا اطلاعات خطمشی مانند وضعیت رانندگی است. برخی از اطلاعات حسگر (مانند وضعیت رانندگی و حالت روز/شب) توسط هر برنامه ای بدون محدودیت قابل دسترسی است زیرا داده ها برای ساختن یک برنامه وسیله نقلیه ایمن اجباری هستند. سایر اطلاعات حسگر (مانند سرعت خودرو) حساس تر است و به مجوزهای خاصی نیاز دارد که کاربران بتوانند آن را مدیریت کنند.
ویژگی های حسگر پشتیبانی شده را ببینید (در types.hal
).
سرویس نقشه خودرو
سرویس نقشه خودرو (VMS) مکانیزمی را برای تبادل داده های نقشه بین مشتریان از طریق یک رابط میخانه/فرعی برای پشتیبانی از ویژگی های رایج خودرو، مانند سیستم های پیشرفته کمک راننده (ADAS) فراهم می کند. کلاینتها میتوانند سیستمهای خودرو را از طریق ویژگی VMS در VHAL یا برنامههای Android ممتاز وارد کنند. دادههای به اشتراکگذاشتهشده در VMS به دادههای نقشه برای استفاده توسط سیستمهای خودرو و برنامههای پشتیبانی محدود میشود.
VMS فقط برای استفاده در پیاده سازی Android Automotive در نظر گرفته شده است. AOSP شامل کلاینت های پیش فرضی نیست که VMS را منتشر کرده یا در آن مشترک شوند. برای ویژگی VMS در VHAL، انواع پیام و ساختارهای داده در VHAL 2.0 در فهرست VmsMessageType
توضیح داده شده است، که انواع پیام های VMS پشتیبانی شده را فهرست می کند. این عدد به عنوان اولین عدد صحیح در آرایه اعداد صحیح ویژگی وسیله نقلیه استفاده می شود و نحوه رمزگشایی بقیه پیام را تعیین می کند.