DriverUI

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

DriverUI

पहली इमेज. DriverUI.

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

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

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

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

प्लैटफ़ॉर्म

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

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

SDV प्लैटफ़ॉर्म का आर्किटेक्चर

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

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

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

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

HAR और DriverUI कंपोज़िशन

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

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

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

RPC के लिए gRPC का इस्तेमाल किया जाता है. एसडीवी पर, एसडीवी कम्यूनिकेशन, एसडीवी गेटवे क्लाइंट उपलब्ध कराता है, ताकि 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 चैनल का पता लगाया जा सकता है और उसे सेट अप किया जा सकता है.

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

ड्राइवर यूज़र इंटरफ़ेस (यूआई) और एचएआर, दोनों के थीम को बदलने के लिए आरपीसी कम्यूनिकेशन.

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

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

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

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

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

नीचे दिए गए डायग्राम में, DriverUI की अलग-अलग स्थितियां दिखाई गई हैं:

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

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

Compose इंटिग्रेशन के लिए ऑटोमोटिव डिज़ाइन

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 वर्शन के लिए ऑटोमोटिव डिज़ाइन

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

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

Compose के लिए Automotive Design, डेवलपमेंट मोड में लाइव अपडेट की सुविधा देता है. इससे 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

दो वीएम के डिज़ाइन से जुड़े दस्तावेज़ों को सिंक करना

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

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

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

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

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

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