رابط کاربری مجموعه فرمان (Cluster UI) به طور سنتی در یک صفحه نمایش جداگانه پشت فرمان قرار میگرفت. تولیدکنندگان اصلی تجهیزات (OEM) به تدریج مجموعه فرمان و IVI را در یک صفحه نمایش واحد ترکیب میکنند. این رابط کاربری ترکیبی، DriverUI نام دارد.

شکل ۱. رابط کاربری درایور.
DriverUI یک برنامه سیستم اندروید است که کل صفحه نمایش داشبورد را رندر میکند، به جز عناصر مرتبط با ایمنی یا نظارتی که توسط رندرکننده با قابلیت دسترسی بالا (HAR) رندر میشوند. DriverUI اطلاعات مربوط به پخش رسانه، تماسهای تلفنی، نقشهها، ناوبری و موارد دیگر را نمایش میدهد و Automotive Design را برای Compose پیادهسازی میکند.
DriverUI به عنوان فعالیت پیشفرض کلاستر
DriverUI به عنوان یک برنامه کلاستر ممتاز در اندروید اجرا میشود و AAOS آن را به طور خودکار شروع میکند.
AAOS از کلاس ClusterHomeManager که به آن Cluster2 نیز گفته میشود، برای ساخت خوشههای ابزار دقیق استفاده میکند. این کلاس پیکربندی مورد نیاز برای شناسایی پیادهسازی خوشه ابزار دقیق و نحوه تعامل AAOS با آن را مشخص میکند. گوگل پیادهسازیهای مرجع APIهای Cluster2 را ارائه میدهد.
پلتفرمها
شما میتوانید Display Safety را روی SDV بسازید و اجرا کنید. پلتفرم نرمافزاری خودرو (SDV):
- به دو ماشین مجازی مهمان نیاز دارد.
- HAR را در SDV Media (که با نام ماشین مجازی بوت سریع نیز شناخته میشود) در یک ماشین مجازی مهمان اجرا میکند.
- DriverUI را در یک ماشین مجازی مهمان دیگر SDV IVI اجرا میکند.
- مانیتور ایمنی را روی SDV Media VM اجرا میکند.

شکل 2. معماری پلتفرم SDV.
خروجی HAR و DriverUI را با هم ترکیب کنید
HAR و DriverUI از نمایشگرهای جداگانهای برای رندر رابط کاربری خود استفاده میکنند. این دو خروجی ترکیبی هستند و به عنوان یک تصویر برای DriverUI ظاهر میشوند.
برای دستیابی به این هدف، HAR شفافیت نواحیای را که خروجی اندروید در آنها ظاهر میشود، بر اساس پیامهای ضربان قلب از DriverUI کنترل میکند. هنگامی که DriverUI در دسترس نیست، HAR فقدان ضربان قلب را تشخیص میدهد و نواحی DriverUI را مات میکند و placeholderها را نمایش میدهد. هنگامی که ضربان قلب دریافت میشود، placeholderها حذف میشوند و نواحی DriverUI شفاف تنظیم میشوند.

شکل ۳. ترکیب HAR و DriverUI.
ارتباط DriverUI و HAR
DriverUI و HAR با استفاده از فراخوانیهای رویه از راه دور (RPC) با یکدیگر ارتباط برقرار میکنند. پیام ضربان قلب نمونهای از دادههای ارسال شده از طریق کانال RPC است و شامل یک مهر زمانی به عنوان یکی از فیلدهای آن است.
gRPC برای RPCها استفاده میشود. در SDV، ارتباطات SDV، SDV Gateway Client را برای کشف و ایجاد کانال از DriverUI به HAR فراهم میکند. سرویس gRPC یک فایل بافر پروتکل تعریف میکند:
// Heartbeat.
rpc Heartbeat(HeartbeatRequest) returns (HeartbeatResponse) {}
// Document switched in the DriverUI.
rpc DocumentSwitched(DocumentSwitchedRequest) returns (DocumentSwitchedResponse) {}
// Document updated in the DriverUI. Unary RPC.
rpc DocumentUpdated(DocumentUpdatedRequest) returns (DocumentUpdatedResponse) {}
// Document updated in the DriverUI. Requests are streamed with each request
// containing a part of the document and the entire document is assembled from these
// chunks by the server.
rpc DocumentUpdatedStreaming(stream DocumentUpdatedRequest) returns (DocumentUpdatedResponse) {}
/// Request for HAR to change design tokens.
rpc DesignTokenUpdate(DesignTokenUpdateRequest) returns (DesignTokenUpdateResponse) {}
// Request to change the current locale used in HAR.
rpc LocaleUpdate(LocaleUpdateRequest) returns (LocaleUpdateResponse) {}
// Requests to swap a certain variant at a Figma node.
rpc ChangeVariant(ChangeVariantRequest) returns (ChangeVariantResponse) {}
// Requests to change the container (display/root node) configuration (dpi, size) in HAR.
rpc ChangeContainerConfiguration(ChangeContainerConfigurationRequest) returns (ChangeContainerConfigurationResponse) {}
جزئیات درخواست و پاسخ در منبع Display Safety در packages/apps/Car/DriverUI/proto/driverui.proto در مخزن کد منبع ub-automotive قرار دارد.
در پلتفرم SDV، ارتباطات SDV، کلاینت دروازه SDV را برای کشف و ایجاد یک کانال gRPC از DriverUI به HAR فراهم میکند.
اجرای این دستورات با استفاده از ترمینال IVI، ارتباط را به SDV Media ارسال میکند و باعث بهروزرسانی تم در کل کلاستر میشود.
adb shell cmd car_service inject-key -d 1 9 # Purple Theme
adb shell cmd car_service inject-key -d 1 8 # Blue Theme

شکل ۴. ارتباط RPC برای تغییر تم DriverUI و HAR.
نمایش اطلاعات رسانه، نقشهها و تلفن روی خوشه
از طریق ارتباط با IVI، رابط کاربری درایور میتواند اطلاعات مربوط به رسانه، نقشهها و تلفن را در خوشه مرجع نمایش دهد. اگرچه رسانه به عنوان حالت پیشفرض در پیادهسازی مرجع عمل میکند، اما نمایش بر اساس سرویسهای فعال و طبق اولویت زیر بهروزرسانی میشود:
- نقشهها
- تلفن
- رسانه
سیستم به طور خودکار نمایش ناوبری نقشهها یا سرویسهای تلفنی فعال را نسبت به وضعیت پیشفرض رسانه در اولویت قرار میدهد.
حالتهای مختلف نمایش DriverUI در شکل زیر نشان داده شده است:

شکل ۵. DriverUI بخش رسانه و تلفن را در یک خوشه کامل نمایش میدهد.
طراحی خودرو برای ادغام Compose
رابط کاربری درایور، طراحی خودرو برای Compose را پیادهسازی میکند تا به طرحها (فیگما) اجازه دهد مستقیماً در برنامه اندروید نمایش داده شوند و تکرار شوند. این ادغام با فعال کردن رندر اسناد طراحی در محیط زمان اجرا، شکاف بین طراحی و توسعه را پر میکند.
دسترسی به داراییهای طراحی
اسناد نمونه فیگما برای DriverUI بخشی از کدبیس هستند. برای دسترسی و تغییر این طرحها:
- DriverUI را با فایل طراحی محلی Automotive Design for Compose DCF از
packages/apps/Car/DriverUI/src/main/assets/figma/*.dcfاجرا کنید. - فایل دارایی
packages/apps/Car/DriverUI/src/main/assets/DriverUI.figرا پیدا کنید. - برای مشاهده طرحهای منبع یا ایجاد تغییرات، این فایل را به فیگما وارد کنید.
طراحی خودرو برای نسخه Compose
- گریدل از نسخه Automotive Design for Compose که برای
designcomposeدرpackages/apps/Car/libs/aaos-apps-gradle-project/gradle/libs.versions.tomlمشخص شده است، استفاده میکند. - نسخههای Automotive Design for Compose در صفحه نسخهها موجود است.
پیکربندی بهروزرسانی زنده
طراحی خودرو برای Compose از بهروزرسانیهای زنده در حالت توسعه پشتیبانی میکند و امکان میدهد تغییرات ایجاد شده در Figma فوراً در DriverUI رندر شوند. این امر تست سریع و چرخههای تکرار طراحی سریعتر را تسهیل میکند.
دستور زیر را برای تنظیم توکن فیگما برای DriverUI اجرا کنید:
adb shell am startservice \
-n "com.android.car.driverui/com.android.designcompose.ApiKeyService" \
-a setApiKey \
-e ApiKey $FIGMA_ACCESS_TOKEN \
--user 0
هماهنگسازی سند طراحی دو ماشین مجازی
در یک پیکربندی دوگانه ماشین مجازی، بهروزرسانیهای طراحی باید در سراسر مرزها منتشر شوند تا سازگاری حفظ شود.
- DriverUI آخرین سند طراحی فیگما را دریافت کرده و با استفاده از کانالهای ارتباطی gRPC که در این صفحه به تفصیل شرح داده شدهاند، به HAR منتقل میکند.
- در نتیجه، کل کلاستر با جدیدترین نسخههای طراحی فیگما بهروزرسانی میشود و هر دو ماشین مجازی را با منبع طراحی همگام نگه میدارد.

شکل ۶. بهروزرسانی زنده سند طراحی از Figma به DriverUI و HAR.
کانال gRPC را ایمن کنید
gRPC با SSL و TLS یکپارچه شده است و استفاده از SSL و TLS را برای احراز هویت سرور و رمزگذاری تمام دادههای رد و بدل شده بین کلاینت و سرور ترویج میدهد. مکانیسمهای اختیاری برای کلاینتها جهت ارائه گواهی برای احراز هویت متقابل در دسترس است. برای اطلاعات بیشتر در مورد احراز هویت gRPC، به بخش احراز هویت مراجعه کنید.