DriverUI

क्लस्टर यूज़र इंटरफ़ेस (यूआई) को आम तौर पर, स्टीयरिंग व्हील के पीछे एक अलग डिसप्ले में रखा जाता है. ओईएम, क्लस्टर और आईवीआई को धीरे-धीरे एक ही डिसप्ले में जोड़ रहे हैं. इस मिले-जुले यूज़र इंटरफ़ेस (यूआई) को DriverUI कहा जाता है.

DriverUI

पहली इमेज. DriverUI.

DriverUI, Android सिस्टम का एक ऐप्लिकेशन है. यह पूरे इंस्ट्रुमेंट क्लस्टर डिसप्ले को रेंडर करता है. हालांकि, यह सुरक्षा से जुड़े या कानूनी शर्तों के तहत ज़रूरी एलिमेंट को रेंडर नहीं करता. इन एलिमेंट को हाई अवेलेबिलिटी रेंडरर (एचएआर) रेंडर करता है. DriverUI, मीडिया प्लेबैक, फ़ोन कॉल, मैप, नेविगेशन वगैरह से जुड़ी जानकारी दिखाता है. साथ ही, यह Automotive Design for Compose को लागू करता है.

DriverUI को डिफ़ॉल्ट क्लस्टर गतिविधि के तौर पर सेट करना

DriverUI, Android में खास अनुमतियों वाले क्लस्टर ऐप्लिकेशन के तौर पर चलता है. AAOS इसे अपने-आप शुरू करता है.

AAOS, इंस्ट्रुमेंट क्लस्टर बनाने के लिए ClusterHomeManager क्लास का इस्तेमाल करता है. इसे Cluster2 भी कहा जाता है. यह क्लास, इंस्ट्रुमेंट क्लस्टर को लागू करने के तरीके की पहचान करने के लिए ज़रूरी कॉन्फ़िगरेशन के बारे में बताती है. साथ ही, यह बताती है कि AAOS इसके साथ कैसे इंटरैक्ट करता है. Google, Cluster2 एपीआई को लागू करने के लिए रेफ़रंस उपलब्ध कराता है.

प्लैटफ़ॉर्म

एसडीवी पर डिसप्ले सेफ़्टी को बनाया और चलाया जा सकता है. सॉफ़्टवेयर-डिफ़ाइंड वीइकल (एसडीवी) प्लैटफ़ॉर्म:

  • इसके लिए, दो गेस्ट वीएम की ज़रूरत होती है.
  • यह गेस्ट वीएम में, SDV मीडिया (इसे रैपिड बूट वीएम भी कहा जाता है) में एचएआर चलाता है.
  • यह DriverUI को किसी दूसरे गेस्ट SDV IVI वीएम में चलाता है.
  • यह एसडीवी मीडिया वीएम पर, Safety Monitor को चलाता है.

एसडीवी प्लैटफ़ॉर्म का आर्किटेक्चर

दूसरी इमेज. एसडीवी प्लैटफ़ॉर्म का आर्किटेक्चर.

HAR और DriverUI आउटपुट को ब्लेंड करना

एचएआर और DriverUI, अपने यूज़र इंटरफ़ेस (यूआई) को रेंडर करने के लिए अलग-अलग डिसप्ले का इस्तेमाल करते हैं. दोनों आउटपुट कंपोज़िट होते हैं और DriverUI को एक इमेज के तौर पर दिखते हैं.

इसके लिए, एचएआर उन हिस्सों की पारदर्शिता को कंट्रोल करता है जिनमें Android आउटपुट दिखता है. यह आउटपुट, DriverUI से मिलने वाले हार्टबीट मैसेज के आधार पर दिखता है. जब DriverUI उपलब्ध नहीं होता, तब एचएआर को दिल की धड़कन का पता नहीं चलता. साथ ही, यह DriverUI के हिस्सों को ओपेक बना देता है और प्लेसहोल्डर दिखाता है. हार्टबीट मिलने पर, प्लेसहोल्डर हटा दिए जाते हैं और DriverUI के हिस्सों को पारदर्शी के तौर पर सेट कर दिया जाता है.

एचएआर और DriverUI कंपोज़िशन

तीसरी इमेज. HAR और DriverUI कंपोज़िशन.

ऐल्फ़ा कंपोज़िशन और पंच-थ्रू से जुड़ी समस्याएं हल करना

एचएआर, सुरक्षा के लिहाज़ से ज़रूरी है. इसलिए, इसका हार्डवेयर डिसप्ले प्लेन, Android आईवीआई डिसप्ले प्लेन के ऊपर मौजूद होता है. एचएआर में कस्टम व्यू या बाहरी OpenGL ES सरफ़ेस बनाते या डीबग करते समय, पुष्टि करें कि ऐल्फ़ा वैल्यू कैसे सेट की गई हैं:

  • एचएआर प्लेन में DriverUI आउटपुट मौजूद नहीं है: एचएआर को DriverUI से मान्य HeartbeatRequest मैसेज मिलते हैं. हालांकि, एचएआर को DriverUI व्यूपोर्ट रीजन को पारदर्शी (alpha = 0.0) करना होगा, ताकि Android क्लस्टर यूज़र इंटरफ़ेस (यूआई) दिख सके. अगर कोई कस्टम एचएआर लेयर या बैकग्राउंड, DriverUI एरिया पर ओपेक पिक्सल (alpha = 1.0) ड्रॉ करता है, तो इससे Android आउटपुट ब्लॉक हो जाता है.
  • कस्टम 3D या OpenGL सरफ़ेस में अनचाहे पारदर्शी छेद: जब किसी बाहरी OpenGL ES या 3D सरफ़ेस को HAR नोड में रेंडर किया जाता है, तो अपारदर्शी पिक्सल के ऐल्फ़ा चैनल को साफ़ तौर पर 0xFF (alpha = 1.0) पर सेट करें. HAR नोड का उदाहरण: कस्टम 3D गेज या सीन, जो RGB पिक्सल को 0x00 पर छोड़े गए, इस्तेमाल न किए गए ऐल्फ़ा बाइट के साथ लिखता है. ऐल्फ़ा बाइट को 0x00 पर छोड़ने से, कंपोज़िटर उन पिक्सल को पारदर्शी (alpha = 0.0) के तौर पर ट्रीट करता है. साथ ही, HAR लेयर से सीधे तौर पर Android IVI प्लेन में छेद करता है.
  • क्रॉस-वीएम डिसप्ले डाइग्नोस्टिक्स: एचएआर (sdv_media_har_cf) और Android आईवीआई (sdv_ivi_cf_ds) अलग-अलग गेस्ट वीएम में चलते हैं. इसलिए, Android आईवीआई वीएम पर adb shell dumpsys SurfaceFlinger चलाने से सिर्फ़ Android लेयर की जांच होती है. इससे, ऊपर मौजूद एचएआर प्लेन की जानकारी नहीं मिलती.

DriverUI और HAR के बीच कम्यूनिकेशन

DriverUI और एचएआर, रिमोट प्रोसीज़र कॉल (आरपीसी) का इस्तेमाल करके एक-दूसरे से कम्यूनिकेट करते हैं. हार्टबीट मैसेज, आरपीसी चैनल पर भेजे गए डेटा का एक उदाहरण है. इसमें टाइमस्टैंप, इसके फ़ील्ड में से एक के तौर पर शामिल होता है.

gRPC का इस्तेमाल आरपीसी के लिए किया जाता है. SDV पर, SDV comms, 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) {}

अनुरोध और जवाब की जानकारी, ub-automotive सोर्स कोड रिपॉज़िटरी में packages/apps/Car/DriverUI/proto/driverui.proto पर मौजूद Display Safety सोर्स में दी गई है.

SDV प्लैटफ़ॉर्म पर, SDV comms, SDV Gateway Client उपलब्ध कराता है. इससे DriverUI से HAR तक gRPC चैनल को खोजने और उसे सेट अप करने में मदद मिलती है.

आईवीआई टर्मिनल का इस्तेमाल करके इन निर्देशों को लागू करने से, एसडीवी मीडिया को सूचना भेजी जाती है. इससे पूरे क्लस्टर में थीम अपडेट ट्रिगर होती हैं.

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

DriverUI और HAR, दोनों की थीम बदलने के लिए आरपीसी कम्यूनिकेशन.

चौथी इमेज. DriverUI और HAR, दोनों की थीम बदलने के लिए आरपीसी कम्यूनिकेशन.

क्लस्टर पर मीडिया, मैप, और टेलीफ़ोनी की जानकारी दिखाना

आईवीआई के साथ कम्यूनिकेशन करके, DriverUI रेफ़रंस क्लस्टर में मीडिया, मैप, और टेलीफ़ोनी की जानकारी दिखा सकता है. रेफ़रंस इंप्लिमेंटेशन में, मीडिया डिफ़ॉल्ट स्टेट के तौर पर काम करता है. हालांकि, चालू सेवाओं के आधार पर डिसप्ले अपडेट होता है. इसके लिए, यहां दी गई प्राथमिकता के हिसाब से काम किया जाता है:

  1. Maps
  2. टेलीफ़ोनी
  3. मीडिया

सिस्टम, डिफ़ॉल्ट मीडिया स्टेट के बजाय, Maps नेविगेशन या चालू टेलीफ़ोनी सेवाओं को दिखाने को अपने-आप प्राथमिकता देता है.

DriverUI के डिसप्ले की अलग-अलग स्थितियों को इस इमेज में दिखाया गया है:

DriverUI, जिसमें मीडिया और टेलीफ़ोनी सेक्शन को पूरे क्लस्टर में दिखाया गया है.

पांचवीं इमेज. DriverUI, पूरे क्लस्टर में मीडिया और टेलीफ़ोनी सेक्शन दिखा रहा है.

Compose इंटिग्रेशन के लिए Automotive Design

DriverUI, Automotive Design for Compose को लागू करता है, ताकि डिज़ाइन (Figma) को सीधे Android ऐप्लिकेशन में दिखाया जा सके और उनमें बदलाव किया जा सके. यह इंटिग्रेशन, रनटाइम एनवायरमेंट में डिज़ाइन दस्तावेज़ों को रेंडर करने की सुविधा देकर, डिज़ाइन और डेवलपमेंट के बीच के अंतर को कम करता है.

डिज़ाइन ऐसेट ऐक्सेस करना

DriverUI के लिए सैंपल Figma दस्तावेज़, कोड बेस का हिस्सा हैं. इन डिज़ाइन को ऐक्सेस करने और उनमें बदलाव करने के लिए:

  1. packages/apps/Car/DriverUI/src/main/assets/figma/*.dcf से, Compose DCF डिज़ाइन फ़ाइल के लिए लोकल Automotive Design के साथ DriverUI लॉन्च करें.
  2. packages/apps/Car/DriverUI/src/main/assets/DriverUI.fig ऐसेट फ़ाइल ढूंढें.
  3. सोर्स डिज़ाइन देखने या उनमें बदलाव करने के लिए, इस फ़ाइल को Figma में इंपोर्ट करें.

Compose के वर्शन के लिए Automotive Design

  • Gradle, packages/apps/Car/libs/aaos-apps-gradle-project/gradle/libs.versions.toml में designcompose के लिए तय किए गए Automotive Design for Compose के वर्शन का इस्तेमाल करता है.
  • Automotive Design for Compose की रिलीज़, रिलीज़ पेज पर उपलब्ध हैं.

लाइव अपडेट कॉन्फ़िगरेशन

Automotive Design for Compose, डेवलपमेंट मोड में लाइव अपडेट की सुविधा देता है. इससे Figma में किए गए बदलाव, DriverUI में तुरंत रेंडर हो जाते हैं. इससे तेज़ी से टेस्टिंग और डिज़ाइन को बार-बार बदलने की प्रोसेस आसान हो जाती है.

DriverUI के लिए Figma टोकन सेट करने के लिए, यह कमांड चलाएं:

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

Dual VM डिज़ाइन दस्तावेज़ सिंक्रनाइज़ेशन

डुअल वीएम सेटअप में, डिज़ाइन से जुड़े अपडेट सभी सिस्टम पर लागू होने चाहिए, ताकि एक जैसा अनुभव मिलता रहे.

  • DriverUI, Figma डिज़ाइन का नया दस्तावेज़ फ़ेच करता है और उसे HAR को भेजता है. इसके लिए, वह gRPC कम्यूनिकेशन चैनलों का इस्तेमाल करता है. इन चैनलों के बारे में इस पेज पर बताया गया है.
  • इस वजह से, पूरा क्लस्टर Figma डिज़ाइन के नए वर्शन के साथ अपडेट हो जाता है. इससे दोनों वीएम, डिज़ाइन सोर्स के साथ सिंक रहते हैं.

Figma से DriverUI और HAR में डिज़ाइन दस्तावेज़ का लाइव अपडेट.

छठी इमेज. Figma से DriverUI और HAR में डिज़ाइन दस्तावेज़ का लाइव अपडेट.

gRPC चैनल को सुरक्षित करना

gRPC में एसएसएल और टीएलएस इंटिग्रेशन की सुविधा है. यह सर्वर की पुष्टि करने और क्लाइंट और सर्वर के बीच शेयर किए गए सभी डेटा को एन्क्रिप्ट (सुरक्षित) करने के लिए, एसएसएल और टीएलएस के इस्तेमाल को बढ़ावा देता है. क्लाइंट के पास, आपसी पुष्टि के लिए सर्टिफ़िकेट देने के वैकल्पिक तरीके उपलब्ध हैं. gRPC की पुष्टि करने के बारे में ज़्यादा जानकारी के लिए, पुष्टि करना देखें.