ویژگی های خودرو

رابط لایه انتزاعی سخت افزار خودرو (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 را دریافت کنید

VHAL مثال HVAC را دریافت کنید

شکل 1 . دریافت دمای HVAC (CS = CarService، VHAL = Vehicle HAL)

تنظیم تماس ها

تماس set یک عملیات ناهمزمان است که شامل اعلان رویداد پس از ایجاد تغییر درخواستی می شود. در یک عملیات معمولی، یک تماس set منجر به ایجاد یک درخواست تغییر در سراسر شبکه خودرو می شود. برخی از تماس‌های set ممکن است به داده‌های اولیه نیاز داشته باشند تا آماده باشند، اما در حین تنظیم اولیه، چنین داده‌هایی ممکن است هنوز در دسترس نباشند. در چنین مواردی، تماس set باید -EAGAIN . برخی از ویژگی ها با روشن / خاموش کردن جداگانه باید -ESHUTDOWN وقتی ویژگی خاموش است و تنظیم نمی شود. تا زمانی set موثر واقع نشود، get لزوماً همان مقداری که تنظیم شده است را بر نمی گرداند. برای مثال، set HVAC Temperature .

نمونه مجموعه VHAL HVAC

شکل 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

شما می توانید از VHAL برای کنترل HVAC با تنظیم ویژگی های مربوط به 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 پشتیبانی شده را فهرست می کند. این عدد به عنوان اولین عدد صحیح در آرایه اعداد صحیح ویژگی وسیله نقلیه استفاده می شود و نحوه رمزگشایی بقیه پیام را تعیین می کند.