Традиционно интерфейс приборной панели располагался за рулевым колесом на отдельном дисплее. Однако производители постепенно объединили приборную панель и информационно-развлекательную систему в один дисплей. Этот объединенный интерфейс называется DriverUI.

Рисунок 1. DriverUI.
DriverUI — это системное приложение для Android, которое отображает всю приборную панель целиком, за исключением элементов, имеющих отношение к безопасности или нормативным требованиям, которые отображаются с помощью высокодоступного рендерера (HAR). DriverUI отображает информацию, связанную с воспроизведением мультимедиа, телефонными звонками, картами, навигацией и многим другим, и реализует интерфейс Automotive Design for Compose .
DriverUI — это приложение кластера по умолчанию.
DriverUI запускается в Android как привилегированное кластерное приложение, и AAOS запускает его автоматически.
AAOS использует класс ClusterHomeManager , также известный как Cluster2 , для создания кластеров приборов. Этот класс определяет конфигурацию, необходимую для идентификации реализации кластера приборов и того, как AAOS взаимодействует с ним. Google предоставляет эталонные реализации API Cluster2.
Платформы
Вы можете создавать и запускать системы Display Safety на платформе SDV. Платформа программно-определяемых транспортных средств (SDV):
- Требуется две гостевые виртуальные машины.
- Запускает HAR на носителях SDV (также известных как виртуальные машины для быстрой загрузки) в гостевой виртуальной машине.
- Запускает DriverUI в другой гостевой виртуальной машине SDV IVI.
- Запускает монитор безопасности на виртуальной машине SDV Media.

Рисунок 2. Архитектура платформы SDV.
Смешивание вывода HAR и DriverUI
HAR и DriverUI используют отдельные дисплеи для отображения своего пользовательского интерфейса. Два выходных изображения являются составными и отображаются в DriverUI как одно изображение.
Для этого HAR управляет прозрачностью областей, в которых отображается вывод Android, на основе сигналов подтверждения от DriverUI. Когда DriverUI недоступен, HAR обнаруживает отсутствие сигналов подтверждения и делает области DriverUI непрозрачными, отображая заглушки. Когда сигналы подтверждения получены, заглушки удаляются, и области DriverUI становятся прозрачными.

Рисунок 3. Состав HAR и DriverUI.
Взаимодействие между DriverUI и HAR
Интерфейсы DriverUI и HAR взаимодействуют друг с другом посредством удаленных вызовов процедур (RPC). Сообщение "пульс" — это пример данных, передаваемых по каналу RPC, и одним из его полей является метка времени.
gRPC используется для RPC-вызовов. На SDV, SDV Communications предоставляет клиент SDV Gateway для обнаружения и установления канала связи между 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) {}
The request and response details are in the Display Safety source at packages/apps/Car/DriverUI/proto/driverui.proto in the ub-automotive source code repository.
На платформе SDV компания SDV Communications предоставляет клиент SDV Gateway Client для обнаружения и установления канала 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

Рисунок 4. RPC-связь для изменения темы оформления DriverUI и HAR.
Отображение информации о мультимедиа, картах и телефонии на кластере.
Благодаря взаимодействию с IVI, DriverUI может отображать информацию для разделов «Медиа», «Карты» и «Телефония» в эталонном кластере. Хотя в эталонной реализации состояние «Медиа» является состоянием по умолчанию, отображение обновляется в зависимости от активных служб в соответствии со следующим приоритетом:
- Карты
- Телефония
- СМИ
Система автоматически отдает приоритет отображению навигации по картам или активных телефонных услуг над состоянием мультимедиа по умолчанию.
Различные состояния отображения DriverUI показаны на следующем рисунке:

Рисунок 5. Интерфейс DriverUI, демонстрирующий раздел «Медиа и телефония» в полном кластере.
Интеграция Automotive Design с Compose
DriverUI реализует Automotive Design for Compose , позволяя демонстрировать и дорабатывать дизайн (Figma) непосредственно в Android-приложении. Эта интеграция устраняет разрыв между дизайном и разработкой, обеспечивая рендеринг проектной документации в среде выполнения.
Доступ к дизайнерским ресурсам
Примеры Figma-документов для 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. - Импортируйте этот файл в Figma , чтобы просмотреть исходные эскизы или внести изменения.
Автомобильный дизайн для версии Compose
- Gradle использует версию Automotive Design for Compose, указанную для
designcomposeвpackages/apps/Car/libs/aaos-apps-gradle-project/gradle/libs.versions.toml. - Релизы Automotive Design for Compose доступны на странице релизов .
Конфигурация обновления в реальном времени
Automotive Design for Compose поддерживает обновления в реальном времени в режиме разработки, позволяя мгновенно отображать изменения, внесенные в Figma, в DriverUI. Это упрощает тестирование и ускоряет циклы итераций проектирования .
Выполните следующую команду, чтобы установить токен Figma для DriverUI:
adb shell am startservice \
-n "com.android.car.driverui/com.android.designcompose.ApiKeyService" \
-a setApiKey \
-e ApiKey $FIGMA_ACCESS_TOKEN \
--user 0
Синхронизация проектной документации для двух виртуальных машин
В конфигурации с двумя виртуальными машинами обновления дизайна должны распространяться через границы виртуальных машин для обеспечения согласованности.
- DriverUI получает последнюю версию проектного документа Figma и передает ее в HAR, используя каналы связи gRPC, подробно описанные на этой странице.
- В результате весь кластер обновляется с учетом последних версий дизайна Figma, поддерживая синхронизацию обеих виртуальных машин с исходным кодом дизайна.

Рисунок 6. Обновление проектной документации в реальном времени из Figma в DriverUI и HAR.
Защитите канал gRPC
gRPC интегрирует SSL и TLS и способствует использованию SSL и TLS для аутентификации сервера и шифрования всех данных, которыми обмениваются клиент и сервер. Для клиентов доступны дополнительные механизмы предоставления сертификатов для взаимной аутентификации. Дополнительную информацию об аутентификации gRPC см. в разделе «Аутентификация» .