Display Safety का इस्तेमाल शुरू करना

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

कोड ऐक्सेस करना

इस सेक्शन में, HAR और DriverUI डिसप्ले सेफ्टी कॉम्पोनेंट के कोडबेस को ऐक्सेस करने के बारे में बताया गया है.

ज़्यादा अपटाइम वाला रेंडरर

ज़्यादा अपटाइम वाले रेंडरर (एचएआर) के लिए कोडबेस, packages/services/display_safety/ पर मुख्य रिपॉज़िटरी चेकआउट के तौर पर उपलब्ध है.

HAR के लिए कोडबेस को इस तरह से स्ट्रक्चर किया गया है:

  • फ़्रेमवर्क: इसमें प्लैटफ़ॉर्म, रेंडरिंग, ऐनिमेशन, और ऑडियो के लिए मुख्य फ़्रेमवर्क इंटरफ़ेस शामिल होते हैं.
  • रेफ़रंस: इसमें फ़्रेमवर्क इंटरफ़ेस के लिए, प्लैटफ़ॉर्म के हिसाब से लागू किए गए तरीके शामिल होते हैं. साथ ही, इसमें HAR रेफ़रंस ऐप्लिकेशन और सुरक्षा टूल चेन (डिज़ाइन कंपाइलर, सुरक्षा मॉनिटर) का कोड भी शामिल होता है.
  • सेवा: Android के लिए खास तौर पर बनाई गई सेवाएं. इनका इस्तेमाल, कॉम्पोनेंट के बीच वाहन का डेटा भेजने और पाने के लिए किया जाता है. साथ ही, ये सेवाएं APEX डेटा पैकेज के लिए परिभाषाएं भी उपलब्ध कराती हैं.
  • प्रीबिल्ट: यह प्रीबिल्ट बाइनरी के लिए रैपर उपलब्ध कराता है. जैसे, Impeller ग्राफ़िक्स लाइब्रेरी.

Harry reference app का कोड, packages/services/display_safety/reference/harry_app पर मौजूद है.

HAR के डायरेक्ट्री स्ट्रक्चर के बारे में ज़्यादा जानने के लिए, सुरक्षा कोड का स्ट्रक्चर दिखाएं लेख पढ़ें

सुरक्षा मॉनिटर

सुरक्षा मॉनिटर का कोडबेस, मुख्य रिपॉज़िटरी के चेकआउट के तौर पर packages/services/display_safety/reference/safety-monitor पर उपलब्ध है.

सेफ़्टी मॉनिटर कोड इस तरह से बनाया गया है:

  • main.rs: यह टेलटेल आर्टफ़ैक्ट फ़ेच करता है, वाहन के डेटा सर्वर को शुरू करता है, और टेलटेल मॉनिटरिंग लूप शुरू करता है. टेलटेल की विज़िबिलिटी की जानकारी की तुलना, टेलटेल की जांच के नतीजों से की जाती है. इसके बाद, एसडीवी लॉग का इस्तेमाल करके नतीजे दिए जाते हैं.
  • Vehicle_data_server.rs: यह सर्वर, वाहन के डेटा की सदस्यता लेता है. साथ ही, मुख्य लूप के लिए टेलटेल की दृश्यता को अपडेट करता है.
  • Telltale_monitoring.rs: यह लूप में चलता है. यह screencap crate का इस्तेमाल करके, स्क्रीनबफ़र की कॉपी फ़ेच करता है. साथ ही, यह telltales के लिए तय किए गए क्षेत्रों की जांच करता है. इसके बाद, टेलटेल जांच के नतीजे मुख्य लूप को भेजे जाते हैं.

DriverUI

DriverUI, अनबंडल किए गए कोडबेस के तौर पर उपलब्ध है. इसे ub-automotive-master ब्रांच से ऐक्सेस किया जा सकता है.

mkdir ub-automotive-master && cd ub-automotive-master
repo init -u https://android.googlesource.com/platform/manifest -b ub-automotive-master
repo sync -cq

अनबंडल्ड और Google सोर्स के बारे में ज़्यादा जानने के लिए, अनबंडल्ड ऐप्लिकेशन इंटिग्रेट करना लेख पढ़ें.

बनाना और चलाना

इस सेक्शन में, SDV Media में HAR और SDV के इन-व्हीकल इन्फ़ोटेनमेंट (IVI) में DriverUI के टारगेट को कंपाइल और लागू करने की प्रोसेस के बारे में बताया गया है. इससे SDV के साथ पूरा क्लस्टर सलूशन हासिल किया जा सकता है.

गेस्ट वीएम

पहली इमेज. सुरक्षा के लिए दो वीएम वाले स्ट्रक्चर को दिखाएं.

HAR और SDV मीडिया टारगेट बनाना

  • बेस मीडिया टारगेट: sdv_media_cf
    • ब्यौरा: एसडीवी मीडिया स्टैक के लिए एक खास टारगेट, जिससे अलग-अलग मीडिया फ़्रेमवर्क की टेस्टिंग की जा सकती है.
    • डायरेक्ट्री की जगह: device/google/sdv/
  • HAR इंटिग्रेटेड टारगेट: sdv_media_har_cf
    • ब्यौरा: यह टारगेट, मीडिया स्टैक को HAR के साथ इंटिग्रेट करता है. साथ ही, Cuttlefish पर SDV मीडिया को एक्ज़ीक्यूट करता है.
    • डायरेक्ट्री की जगह: device/google/sdv_dsplay_safety/
    • बिल्ड को लागू करना:
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-userdebug
m -j

DriverUI बनाना

ub-automotive-master ब्रांच से, CommandLine या AndroidStudio का इस्तेमाल करके, अनबंडल्ड ऐप्लिकेशन बनाए जा सकते हैं.

Android Studio में, Gradle फ़ाइल इंपोर्ट करें: packages/apps/Car/libs/aaos-apps-gradle-project/build.gradle

यह मुख्य Gradle प्रोजेक्ट है. इसमें DriverUI के साथ-साथ सभी अनबंडल्ड ऐप्लिकेशन शामिल हैं. Gradle का इस्तेमाल करके प्रोजेक्ट बनाएं:

# To build only DriverUI module of aaos-apps-gradle-project use
./gradlew :driver-ui:assemble

बिल्ड पूरा होने के बाद, DriverUI APK यहां उपलब्ध होता है: out/aaos-apps-gradle-build/driver-ui/outputs/apk/default/debug/ driver-ui-default-debug.apk

DriverUI कोड, packages/apps/Car/DriverUI पर उपलब्ध है

ध्यान दें: DriverUI, मुख्य Gradle प्रोजेक्ट का सबमॉड्यूल है. इसलिए, सभी Gradle टास्क को aaos-apps-gradle-project का इस्तेमाल करके चलाया जाता है.

DriverUI की मदद से SDV IVI टारगेट बनाना

  • बुनियादी टारगेट: sdv_ivi_cf
    • ब्यौरा: यह x86-64 आर्किटेक्चर पर IVI के लिए, एसडीवी का बुनियादी टारगेट है.
    • डायरेक्ट्री की जगह: device/google/sdv/
  • DriverUI Integrated Target: sdv_ivi_cf_ds

    • ब्यौरा: यह टारगेट, बेस आईवीआई कॉन्फ़िगरेशन को बढ़ाता है, ताकि इसमें डिसप्ले सेफ्टी कॉम्पोनेंट शामिल किए जा सकें. यह टारगेट, डिसप्ले की सुरक्षा से जुड़ी सेवाओं और इंस्ट्रूमेंट क्लस्टर में होने वाली इंटरैक्शन की पुष्टि करने के लिए ज़रूरी है.
    • डायरेक्ट्री की जगह: device/google/sdv_dsplay_safety/
    • DriverUI बाइनरी जोड़ें: DriverUI.apk को packages/apps/Car/DriverUIPrebuilt में कॉपी करें. साथ ही, ब्लूप्रिंट Android.bp फ़ाइल को भी कॉपी करें.

      # Create a blueprint file, contents of this file are shown in the next step
      touch /path/to/aosp_repo_root/packages/apps/Car/DriverUIPrebuilt/Android.bp
      # Copy DriverUI.apk built
      cp /path/to/ub-automotive-master/out/aaos-apps-gradle-build/driver-ui/outputs/apk/default/debug/driver-ui-default-debug.apk /path/to/aosp_repo_root/packages/apps/Car/DriverUIPrebuilt/DriverUI.apk
      

Android.bp को इस तरह सेट अप किया जाना चाहिए कि वह मॉड्यूल के नाम DriverUIPrebuilt का इस्तेमाल करे और DriverUIStubApp को बदल दे:

android_app_import {
    name: "DriverUIPrebuilt",
    overrides: ["DriverUIStubApp"],
    apk: "DriverUI.apk",
    privileged: true,
    product_specific: true,
    certificate: "platform",
    required: ["allowed_privapp_com.android.car.driverui"],

    optional_uses_libs: [
        "androidx.window.extensions",
        "androidx.window.sidecar",
    ],
    enforce_uses_libs: false,
    dex_preopt: {
        enabled: false,
    },
}
  • बिल्ड को लागू करना:

    # In the root of the Android source
    source build/envsetup.sh
    lunch sdv_ivi_cf_ds-trunk_staging-userdebug
    m -j
    

टारगेट डिप्लॉयमेंट

दोनों टारगेट के लिए बिल्ड प्रोसेस पूरी होने के बाद, Cuttlefish की सुविधाएं इस सेक्शन में बताए गए तरीके से टारगेट शुरू करने में मदद करती हैं.

SDV मीडिया और HAR डिप्लॉयमेंट

HAR टारगेट, पहले से तय किए गए sdv-media-config.json कॉन्फ़िगरेशन का इस्तेमाल करके बनाया जाता है. यह device/google/sdv_media_cf.mk में तय किया जाता है.

ध्यान दें: SDV Media और SDV IVI, दोनों को डिसप्ले सेफ्टी क्लस्टर के लिए Unlocked बूट मोड में लॉन्च किया गया है. ज़्यादा जानकारी के लिए, SDV बूट मोड देखें.

# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-userdebug
cvd create --extra_bootconfig_args="androidboot.sdv.boot_mode=unlocked androidboot.sdv.instance_name=instance1 androidboot.virt.address=3"

टर्मिनल बनाने के बाद, यह ब्राउज़र में लोकल होस्ट पोर्ट पर टारगेट को ऐक्सेस करने के लिए लॉग दिखाएगा: Point your browser to https://localhost:8443 to interact with the device.

SDV Media VM में HAR

दूसरी इमेज. HAR के साथ Safety SDV Media VM दिखाएं.

एसडीवी आईवीआई और ड्राइवरयूआई डिप्लॉयमेंट

SDV IVI DriverUI टारगेट, device/google/sdv_ivi_cf.mk में तय किए गए मौजूदा sdv-ivi-config.json का इस्तेमाल शुरू करता है. आपके पास बूट कॉन्फ़िगरेशन के अतिरिक्त पैरामीटर तय करने का विकल्प भी होता है. साथ ही, क्लस्टर स्क्रीन के लिए डिसप्ले के सही डाइमेंशन भी तय किए जा सकते हैं.

# In the root of the Android source
source build/envsetup.sh
lunch sdv_ivi_cf_ds-trunk_staging-userdebug
cvd create --extra_bootconfig_args="androidboot.sdv.boot_mode=unlocked androidboot.sdv.instance_name=instance2 androidboot.virt.address=4" --display1=width=1920,height=720

टारगेट शुरू होने के बाद, टर्मिनल में लॉग दिखते हैं. इनसे लोकल होस्ट पोर्ट Point your browser to https://localhost:8443 to interact with the device. पर ब्राउज़र में टारगेट को ऐक्सेस किया जा सकता है

SDV-IVI और DriverUI टारगेट को डिप्लॉय करने पर, दो डिसप्ले शुरू हो जाते हैं: एक SDV-IVI सिस्टम के लिए और दूसरा DriverUI के लिए. DriverUI, खास अधिकारों वाला क्लस्टर ऐप्लिकेशन है. यह ClusterHomeManager क्लास (इसे Cluster2 भी कहा जाता है) का इस्तेमाल करता है.

SDV-IVI वीएम में DriverUI

तीसरी इमेज. Display Safety SDV IVI VM with DriverUI.

ड्यूल वीएम क्लस्टर को डिप्लॉय करना

Cuttlefish, डिसप्ले ओवरले की सुविधा पाने के लिए, डुअल वीएम कॉन्फ़िगरेशन का इस्तेमाल करके दो वर्चुअल मशीन (वीएम) लॉन्च करने की सुविधा देता है.

डिसप्ले कंपोज़िशन

चौथी इमेज. सुरक्षा से जुड़े डिसप्ले कंपोज़िशन की खास जानकारी दिखाओ.

packages/services/display_safety/service/ पर उपलब्ध ds-toolkit का इस्तेमाल करके, डुअल वीएम कॉन्फ़िगरेशन लॉन्च किया जा सकता है.

m ds_toolkit
ds_toolkit launch

कॉन्फ़िगरेशन लॉन्च होने के बाद, टर्मिनल, लोकल होस्ट पोर्ट पर ब्राउज़र में टारगेट को ऐक्सेस करने के लिए लॉग दिखाता है: Point your browser to https://localhost:8443 to interact with the device.

इससे दोनों Cuttlefish टारगेट, पूरी तरह से काम करने वाले क्लस्टर में लॉन्च हो जाते हैं. साथ ही, दोनों वर्चुअल मशीन के डिसप्ले ओवरले हो जाते हैं.

सुरक्षा से जुड़े सभी क्लस्टर दिखाएं

पांचवीं इमेज. SDV Media और SDV IVI VM के साथ, Display Safety का पूरा क्लस्टर दिखाएं.

इमारत की सुरक्षा की निगरानी करने वाला

सुरक्षा मॉनिटर को डिफ़ॉल्ट रूप से, एसडीवी मीडिया टारगेट के लिए बनाया जाता है:

# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-userdebug
m -j

रन टाइम पर, सुरक्षा मॉनिटर, कंपाइलर आर्टफ़ैक्ट के डिफ़ॉल्ट सेट का इस्तेमाल करता है. ये आर्टफ़ैक्ट, रेफ़रंस क्लस्टर डिसप्ले के लिए APEX में जनरेट और पैकेज किए जाते हैं.

har-design-compiler को चलाने पर, नए आर्टफ़ैक्ट जनरेट हो सकते हैं. यह टूल, टारगेट पर चलता है. इससे डिज़ाइन से आर्टफ़ैक्ट जनरेट किए जाते हैं. हमारा सुझाव है कि आप टूल चलाएं, टारगेट से नए आर्टफ़ैक्ट पुल करें, और इमेज को फिर से बनाएं. यह टूल, टारगेट पर डिफ़ॉल्ट रूप से बनाया और इंस्टॉल किया जाता है.

# Run the compiler on the target
adb shell har_design_compiler -c </path/to/artifacts> -o /data/local/tmp/
# Pull the artifacts to the local filesystem
adb pull data/local/tmp/artifacts services/harry-prebuilt/data/assets/
# Rebuild the image
m -j

टारगेट बूट होने पर, सुरक्षा मॉनिटर शुरू होता है. सुरक्षा मॉनिटर, स्क्रीन पर सुरक्षा के लिहाज़ से ज़रूरी चीज़ों की पुष्टि करने के लिए, लगातार लूप में चलता रहेगा. यह स्क्रीन बफ़र और आने वाले वाहन के डेटा सिग्नल का विश्लेषण करके, यह पता लगाएगा कि स्क्रीन पर क्या दिखना चाहिए.

सेफ़्टी मॉनिटर के लॉग कभी भी देखे जा सकते हैं:

adb logcat | grep har-safety-monitor