ما یک پیاده سازی مرجع برای AIDL VHAL ارائه می دهیم. موضوع اصلی سرویس در VehicleService.cpp
پیاده سازی شده است. پیاده سازی رابط VHAL در DefaultVehicleHal.cpp
قرار دارد.
پیاده سازی مرجع بر اساس معماری دو لایه است. در لایه بالایی، DefaultVehicleHal
، رابط VHAL AIDL را پیاده سازی می کند و منطق کلی VHAL را برای تمام دستگاه های سخت افزاری ارائه می دهد. در لایه پایین، FakeVehicleHardware
، رابط IVehicleHardware
را پیاده سازی می کند. این کلاس منطق VHAL تعامل با سخت افزار واقعی یا اتوبوس وسیله نقلیه را شبیه سازی می کند و برای دستگاه خاص است. به صورت اختیاری، فروشندگان می توانند همین معماری را تطبیق دهند، از همان کلاس DefaultVehicleHal
مجددا استفاده کنند (آن را برای بازنویسی یک متد گسترش دهند)، و پیاده سازی IVehicleHardware
خود را ارائه دهند.
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
تنظیم شده باشد (این ویژگی باید در زمان ساخت یا خیلی زود هنگام راهاندازی قبل از شروع VHAL تنظیم شود)، از فایل پیکربندی پوشه /vendor/etc/automotive/vhaloverride/
روی دستگاه استفاده میکند تا پیکربندی موجود را لغو کند. پیاده سازی فروشنده می تواند از رویکرد مشابهی استفاده کند تا پیکربندی ویژگی پشتیبانی شده از VHAL به صورت سخت کدگذاری نشده باشد و بتوان در زمان شروع به صورت پویا تصمیم گیری کرد. پس از مقداردهی اولیه VHAL، لیست تنظیمات ویژگی خودرو باید ثابت باشد.
با شروع اندروید 16، GRPCVehicleHardware
مرجع دیگری برای پیاده سازی IVehicleHardware
ارائه می دهد. این پیاده سازی فرض می کند که یک سرور جداگانه در حال اجرا بر روی یک ماشین راه دور یا VM است که حاوی منطق مدیریت ویژگی است. VHAL در حال اجرا بر روی دستگاه های AAOS به عنوان یک پروکسی عمل می کند که درخواست ها را به سرور راه دور ارسال می کند. برای جزئیات بیشتر به grpc مراجعه کنید.