پیاده سازی مرجع

ما یک پیاده سازی مرجع برای AIDL VHAL ارائه می دهیم. موضوع اصلی سرویس در VehicleService.cpp پیاده سازی شده است. پیاده سازی رابط VHAL در DefaultVehicleHal.cpp قرار دارد.

پیاده سازی مرجع بر اساس معماری دو لایه است. در لایه بالایی، DefaultVehicleHal ، رابط VHAL AIDL را پیاده سازی می کند و منطق کلی VHAL را برای تمام دستگاه های سخت افزاری ارائه می دهد. در لایه پایین، FakeVehicleHardware ، رابط IVehicleHardware را پیاده سازی می کند. این کلاس منطق VHAL تعامل با سخت افزار واقعی یا اتوبوس وسیله نقلیه را شبیه سازی می کند و برای دستگاه خاص است. به صورت اختیاری، فروشندگان می توانند همین معماری را تطبیق دهند، از همان کلاس DefaultVehicleHal مجددا استفاده کنند (آن را برای بازنویسی یک متد گسترش دهند)، و پیاده سازی IVehicleHardware خود را ارائه دهند.

پیاده سازی مرجع VHAL
شکل 1. پیاده سازی مرجع VHAL

DefaultVehicleHal شامل منطق زیر است که عمومی در نظر گرفته می شود و می تواند برای هر پیاده سازی VHAL اعمال شود.

  • رابط IVehicle را پیاده سازی می کند.
  • بررسی های ورودی اولیه، از جمله بررسی شناسه های تکراری را انجام می دهد.
  • اشیاء کلاینت (به عنوان مثال GetValuesClient ) را برای هر عملیات برای هر کلاینت بایندر اختصاص می دهد و هر کدام را به یک استخر جهانی اضافه می کند.
  • منطق پاسخ‌های تماس غیرهمگام را مدیریت می‌کند، مانند افزودن یک درخواست در حال انتظار به یک مجموعه درخواست در انتظار. زمانی که نتایج را دریافت می‌کنیم، درخواست‌های معلق را حل می‌کند یا زمانی که زمان یکی از درخواست‌های در انتظار تمام می‌شود، خطا را برمی‌گرداند.
  • LargeParcelable سریال‌سازی و از سریال خارج می‌کند (به ParcelableUtils.h مراجعه کنید).
  • اشتراک را مدیریت می کند (به SubscriptionManager.h مراجعه کنید).
  • مجوزها را بررسی می کند. (به توابع checkReadPermission و checkWritePermission مراجعه کنید).
  • به طور دوره ای IVehicleHardware.checkHealth را فراخوانی می کند و سیگنال های ضربان قلب را ارسال می کند (به تابع checkHealth مراجعه کنید).

IVehicleHardware یک رابط عمومی است که برای نشان دادن پیاده سازی سخت افزاری خاص VHAL استفاده می شود. پیاده سازی مرجع برای IVehicleHardware FakeVehicleHardware است که از یک نقشه در حافظه برای ذخیره ارزش دارایی استفاده می کند و با اتوبوس واقعی وسیله نقلیه ارتباط برقرار نمی کند. در نظر گرفته شده است که روی یک شبیه ساز اجرا شود و هیچ وابستگی خاص سخت افزاری ندارد. پیاده سازی فروشنده نباید آن را همانطور که هست استفاده کند و باید منطق اتوبوس وسیله نقلیه خاص را اضافه کند.

در اندروید 14، FakeVehicleHardware پیکربندی ویژگی پشتیبانی شده را در زمان اجرا و در حین مقداردهی اولیه از پوشه /vendor/etc/automotive/vhalconfig/ دستگاه، که حاوی یک فایل پیکربندی به سبک JSON است، می خواند. برای فرمت فایل پیکربندی و محتوای فایل پیکربندی به فایل مرجع VHAL README مراجعه کنید.

FakeVehicleHardware همچنین از لغو فایل پیکربندی برای آزمایش پشتیبانی می کند. اگر ویژگی سیستم persist.vendor.vhal_init_value_override تنظیم شده باشد، از فایل پیکربندی پوشه /vendor/etc/automotive/vhaloverride/ روی دستگاه استفاده می کند تا پیکربندی موجود را لغو کند. پیاده سازی فروشنده می تواند از رویکرد مشابهی استفاده کند تا پیکربندی ویژگی پشتیبانی شده از VHAL به صورت سخت کدگذاری نشده باشد و بتوان در زمان شروع به صورت پویا تصمیم گیری کرد. پس از راه اندازی دستگاه، پیکربندی ویژگی خودرو باید ثابت باشد.