DriverUI

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

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.

Архитектура платформы SDV

Рисунок 2. Архитектура платформы SDV.

Смешивание вывода HAR и DriverUI

HAR и DriverUI используют отдельные дисплеи для отображения своего пользовательского интерфейса. Два выходных изображения являются составными и отображаются в DriverUI как одно изображение.

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

Композиция HAR и 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

RPC-связь для изменения темы оформления как DriverUI, так и HAR.

Рисунок 4. RPC-связь для изменения темы оформления DriverUI и HAR.

Отображение информации о мультимедиа, картах и ​​телефонии на кластере.

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

  1. Карты
  2. Телефония
  3. СМИ

Система автоматически отдает приоритет отображению навигации по картам или активных телефонных услуг над состоянием мультимедиа по умолчанию.

Различные состояния отображения DriverUI показаны на следующем рисунке:

DriverUI демонстрирует раздел «Медиа и телефония» в полном объеме. кластер.

Рисунок 5. Интерфейс DriverUI, демонстрирующий раздел «Медиа и телефония» в полном кластере.

Интеграция Automotive Design с Compose

DriverUI реализует Automotive Design for Compose , позволяя демонстрировать и дорабатывать дизайн (Figma) непосредственно в Android-приложении. Эта интеграция устраняет разрыв между дизайном и разработкой, обеспечивая рендеринг проектной документации в среде выполнения.

Доступ к дизайнерским ресурсам

Примеры Figma-документов для DriverUI являются частью исходного кода. Чтобы получить доступ к этим проектам и изменить их:

  1. Запустите DriverUI, используя локальный файл дизайна Automotive Design for Compose DCF из packages/apps/Car/DriverUI/src/main/assets/figma/*.dcf .
  2. Найдите файл ресурсов packages/apps/Car/DriverUI/src/main/assets/DriverUI.fig .
  3. Импортируйте этот файл в 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, поддерживая синхронизацию обеих виртуальных машин с исходным кодом дизайна.

Обновление дизайн-документа в режиме реального времени из Figma в DriverUI и HAR.

Рисунок 6. Обновление проектной документации в реальном времени из Figma в DriverUI и HAR.

Защитите канал gRPC

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