DriverUI

Gösterge grubu kullanıcı arayüzü, geleneksel olarak direksiyonun arkasında ayrı bir ekranda yer alır. OEM'ler, gösterge panelini ve IVI'yı kademeli olarak tek bir ekranda birleştiriyor. Bu birleşik kullanıcı arayüzü, DriverUI'dır.

DriverUI

Şekil 1. DriverUI.

DriverUI, yüksek kullanılabilirlik oluşturucu (HAR) tarafından oluşturulan güvenlikle ilgili veya yasal düzenlemelere tabi öğeler hariç olmak üzere tüm gösterge paneli ekranını oluşturan bir Android sistem uygulamasıdır. DriverUI; medya oynatma, telefon aramaları, haritalar, navigasyon ve daha fazlasıyla ilgili bilgileri gösterir ve Automotive Design for Compose'u uygular.

Varsayılan küme etkinliği olarak DriverUI

DriverUI, Android'de ayrıcalıklı bir küme uygulaması olarak çalışır ve AAOS tarafından otomatik olarak başlatılır.

AAOS, gösterge panelleri oluşturmak için ClusterHomeManager sınıfını (Cluster2 olarak da bilinir) kullanır. Bu sınıf, bir gösterge paneli uygulamasını tanımlamak için gereken yapılandırmayı ve AAOS'un bu uygulamayla nasıl etkileşimde bulunduğunu belirtir. Google, Cluster2 API'lerinin referans uygulamalarını sağlar.

Platformlar

SDV'de Display Safety'yi derleyip çalıştırabilirsiniz. Yazılım tanımlı araç (SDV) platformu:

  • İki konuk sanal makine gerekir.
  • HAR'ı, SDV Media'da (hızlı başlatma sanal makinesi olarak da bilinir) bir konuk sanal makinede çalıştırır.
  • DriverUI'yi başka bir konuk SDV IVI sanal makinesinde çalıştırır.
  • SDV Media sanal makinesinde Güvenlik Monitörü'nü çalıştırır.

SDV platform mimarisi

Şekil 2. SDV platform mimarisi.

HAR ve DriverUI çıkışını birleştirme

HAR ve DriverUI, kullanıcı arayüzlerini oluşturmak için ayrı ekranlar kullanır. İki çıkış birleştirilir ve DriverUI'da tek bir görüntü olarak görünür.

Bunu sağlamak için HAR, DriverUI'dan gelen sinyal mesajlarına göre Android çıkışının göründüğü alanların şeffaflığını kontrol eder. DriverUI kullanılamadığında HAR, kalp atışlarının olmadığını algılar ve DriverUI alanlarını opak hale getirerek yer tutucuları gösterir. Sinyaller alındığında yer tutucular kaldırılır ve DriverUI alanları şeffaf olacak şekilde ayarlanır.

HAR ve DriverUI oluşturma

Şekil 3. HAR ve DriverUI oluşturma.

Alfa kompozisyonu ve delme ile ilgili sorunları giderme

HAR, güvenlik açısından kritik olduğundan donanım ekran düzlemi, Android IVI ekran düzleminin üzerinde yer alır. HAR'da özel görünümler veya harici OpenGL ES yüzeyleri oluştururken ya da bunlarda hata ayıklarken alfa değerlerinin nasıl ayarlandığını doğrulayın:

  • HAR düzleminde eksik DriverUI çıkışı: HAR, DriverUI'dan geçerli HeartbeatRequest mesajları alırken DriverUI görüntü alanı bölgesini şeffaf (alpha = 0.0) olarak temizlemelidir. Böylece, alttaki Android küme kullanıcı arayüzü görünür. Özel bir HAR katmanı veya arka plan, DriverUI alanının üzerine opak pikseller (alpha = 1.0) çiziyorsa altındaki Android çıkışını engeller.
  • Özel 3D veya OpenGL yüzeylerinde istenmeyen şeffaf delikler: Harici bir OpenGL ES veya 3D yüzeyi bir HAR düğümüne (ör. 0x00 değerinde kullanılmayan bir alfa baytı bırakılmış RGB piksel yazan özel bir 3D gösterge veya sahne) oluşturduğunuzda opak piksellerin alfa kanalını açıkça 0xFF (alpha = 1.0) olarak ayarlayın. Alfa baytının 0x00 değerinde bırakılması, birleştiricinin bu pikselleri şeffaf (alpha = 0.0) olarak değerlendirmesine ve HAR katmanından alttaki Android IVI düzlemine doğrudan bir delik açmasına neden olur.
  • Sanal makineler arası ekran teşhisi: HAR (sdv_media_har_cf) ve Android IVI (sdv_ivi_cf_ds) ayrı konuk sanal makinelerde çalıştığından, Android IVI sanal makinesinde adb shell dumpsys SurfaceFlinger komutunu çalıştırmak yalnızca Android katmanlarını inceler ve üstteki HAR düzlemini göremez.

DriverUI ve HAR iletişimi

DriverUI ve HAR, uzak prosedür çağrılarını (RPC'ler) kullanarak birbirleriyle iletişim kurar. Sinyal mesajı, RPC kanalı üzerinden gönderilen verilere bir örnektir ve alanlarından biri zaman damgasıdır.

RPC'ler için gRPC kullanılır. SDV'de SDV iletişimi, DriverUI'dan HAR'a bir kanal keşfetmek ve oluşturmak için SDV Ağ Geçidi İstemcisi'ni sağlar. gRPC hizmeti, bir protokol arabelleği dosyası tanımlar:


// 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) {}

İstek ve yanıt ayrıntıları, ub-automotive kaynak kodu deposundaki packages/apps/Car/DriverUI/proto/driverui.proto adresinde bulunan Display Safety kaynağında yer alır.

SDV platformunda SDV comms, DriverUI'dan HAR'a gRPC kanalı bulup oluşturmak için SDV Gateway Client'ı sağlar.

Bu komutlar IVI terminali kullanılarak yürütüldüğünde SDV Media'ya iletişim gönderilir ve tüm kümede tema güncellemeleri tetiklenir.

adb shell cmd car_service inject-key -d 1 9 # Purple Theme
adb shell cmd car_service inject-key -d 1 8 # Blue Theme

Hem DriverUI hem de HAR temasını değiştirmek için RPC iletişimi.

Şekil 4. Hem DriverUI hem de HAR temasını değiştirmek için RPC iletişimi.

Gösterge panelinde medya, harita ve telefon bilgilerini görüntüleme

DriverUI, IVI ile iletişim kurarak referans kümesinde medya, haritalar ve telefonla ilgili bilgileri gösterebilir. Referans uygulamada varsayılan durum olarak Medya kullanılsa da ekran, etkin hizmetlere göre aşağıdaki öncelik sırasına göre güncellenir:

  1. Haritalar
  2. Telefon
  3. Medya

Sistem, varsayılan medya durumu yerine Haritalar navigasyonunu veya etkin telefon hizmetlerini göstermeye otomatik olarak öncelik verir.

Çeşitli DriverUI görüntüleme durumları aşağıdaki şekilde gösterilmiştir:

Medya ve Telefon bölümünü tam kümede gösteren DriverUI.

Şekil 5. Tam gösterge panelinde Medya ve Telefon bölümünü gösteren DriverUI.

Otomotiv için Tasarım'ı Compose ile entegre etme

DriverUI, tasarımların (Figma) doğrudan Android uygulamasında gösterilmesine ve yinelenmesine olanak tanımak için Automotive Design for Compose'u uygular. Bu entegrasyon, tasarım dokümanlarının çalışma zamanı ortamında oluşturulmasını sağlayarak tasarım ile geliştirme arasındaki boşluğu doldurur.

Tasarım öğelerine erişme

DriverUI için örnek Figma belgeleri, kod tabanının bir parçasıdır. Bu tasarımlara erişmek ve bunları değiştirmek için:

  1. packages/apps/Car/DriverUI/src/main/assets/figma/*.dcf konumundaki yerel Automotive Design for Compose DCF tasarım dosyasıyla DriverUI'ı başlatın.
  2. packages/apps/Car/DriverUI/src/main/assets/DriverUI.fig öğe dosyasını bulun.
  3. Kaynak tasarımları görüntülemek veya değişiklik yapmak için bu dosyayı Figma'ya aktarın.

Compose için Otomotiv Tasarımı sürümü

  • Gradle, packages/apps/Car/libs/aaos-apps-gradle-project/gradle/libs.versions.toml içinde designcompose için belirtilen Automotive Design for Compose sürümünü kullanır.
  • Automotive Design for Compose sürümlerini sürümler sayfasında bulabilirsiniz.

Canlı haberler yapılandırması

Automotive Design for Compose, geliştirme modunda Anlık Bilgilendirmeleri destekler. Bu sayede, Figma'da yapılan değişiklikler DriverUI'da anında uygulanır. Bu sayede hızlı test ve daha hızlı tasarım iterasyonu döngüleri kolaylaşır.

DriverUI için Figma jetonunu ayarlamak üzere aşağıdaki komutu çalıştırın:

adb shell am startservice \
  -n "com.android.car.driverui/com.android.designcompose.ApiKeyService" \
  -a setApiKey \
  -e ApiKey $FIGMA_ACCESS_TOKEN \
  --user 0

İkili sanal makine tasarım dokümanı senkronizasyonu

İkili sanal makine kurulumunda, tutarlılığı korumak için tasarım güncellemelerinin sınırlar arasında yayılması gerekir.

  • DriverUI, en son Figma tasarım dokümanını getirir ve bu sayfada ayrıntılı olarak açıklanan gRPC iletişim kanallarını kullanarak HAR'a iletir.
  • Böylece, kümenin tamamı en son Figma tasarım iterasyonlarıyla güncellenir ve her iki sanal makine de tasarım kaynağıyla senkronize edilir.

Tasarım dokümanının Figma'dan DriverUI ve HAR'a canlı güncellemesi.

Şekil 6. Tasarım dokümanının Figma'dan DriverUI ve HAR'a canlı güncellemesi.

gRPC kanalının güvenliğini sağlama

gRPC, SSL ve TLS entegrasyonuna sahiptir. Sunucunun kimliğini doğrulamak ve istemci ile sunucu arasında paylaşılan tüm verileri şifrelemek için SSL ve TLS kullanımını teşvik eder. İstemcilerin karşılıklı kimlik doğrulama için sertifika sağlamasına yönelik isteğe bağlı mekanizmalar mevcuttur. gRPC kimlik doğrulaması hakkında daha fazla bilgi için Kimlik Doğrulama başlıklı makaleyi inceleyin.