एम्युलेटर में, VHAL प्रॉपर्टी की जानकारी को बढ़ाएं

Android Automotive OS (AAOS) में ऐसी सामान्य VHAL प्रॉपर्टी होती हैं जो को एम्युलेटर की वीएचएएल विंडो में देखा जा सकेगा. इससे, आपको ढेर सारी जानकारी वीएचएएल के बारे में जानकारी. इसमें इनके नाम, ब्यौरे, और वैल्यू के मतलब शामिल हैं. जानकारी है VHAL प्रॉपर्टी के मेटाडेटा से निकाला जाता है, जो QEMU एम्युलेटर.

अपने डिवाइसों पर खास इस्तेमाल के लिए अपनी VHAL प्रॉपर्टी जोड़ने पर VHAL मेटाडेटा देखना आपको कोड में बदलाव करना होगा और पसंद के मुताबिक बनाया गया QEMU एम्युलेटर बनाना होगा. यहां की यात्रा पर हूं इस समस्या को हल करने के लिए, आप अपने ब्यौरे JSON फ़ॉर्मैट में लिख सकते हैं और उन्हें अपने सिस्टम पर जोड़ सकते हैं इमेज.

खास जानकारी

इस पेज पर बताया गया है कि AAOS एम्युलेटर में, VHAL प्रॉपर्टी की जानकारी को बढ़ाने का तरीका क्या है.

VHAL प्रॉपर्टी का दायरा बढ़ाने के लिए, JSON मेटाडेटा बनाना

एम्युलेटर, -types-meta.json पर खत्म होने वाली सभी फ़ाइलों में अतिरिक्त मेटाडेटा खोजता है Android वर्चुअल डिवाइस (AVD) पाथ में. JSON फ़ाइलों में Enum ऑब्जेक्ट हैं, जैसा कि नीचे दिखाया गया है.

Enum ऑब्जेक्ट

VehicleProperty नाम वाला Enum ऑब्जेक्ट, उस कॉलम में एक खास मामला है तो उसे एक रूट माना जा सकता है. इसका कॉन्टेंट, वाहन की प्रॉपर्टी के मैप में जोड़ दिया जाता है. किसी और तरीके से Enums (VehicleProperty के अलावा किसी अन्य नाम के साथ) नामों के मैप परिभाषित करता है वैल्यू सेट करनी होंगी.

Enum: {
  "name" : String,
  "values" : Array of { ValueObject }
}  

वैल्यूऑब्जेक्ट

ValueObject: {
  "name" : String,
  "value" : Integer,
  "data_enum" : String, VehicleProperty only, optional,
}

VehicleProperty के लिए, Enum नाम में बताया गया है कि यह प्रॉपर्टी, एम्युलेटर की VHAL विंडो में दिखती है. मान वह है प्रॉपर्टी का property_id, ValueObject में बताया गया है. data_enum, ValueObject को किसी अन्य Enum से जोड़ता है. इस असोसिएशन का इस्तेमाल, किसी वैल्यू को ऐसी स्ट्रिंग में मैप करने के लिए किया जाता है जिसे कोई भी व्यक्ति आसानी से पढ़ सकता है. साथ ही, इसका इस्तेमाल सिर्फ़ VehicleProperty के लिए, Enum में ValueObjects. VehicleProperty का एक उदाहरण नीचे दिया गया है:

[
  {
      "name": "VehicleProperty",
      "values": [
          {
              "name": "CURRENT_GEAR",
              "value": 289408001
          }
      ]
  }
]

इस उदाहरण में, value के साथ property_id CURRENT_GEAR के लिए 289408001 को name के तौर पर दिया गया है. एम्युलेटर में, इस प्रॉपर्टी को मौजूदा Gear नाम के तौर पर पहले से ही हार्ड कोड किया गया है. (आप इस स्थिति को फिर से लागू नहीं कर सकते, क्योंकि इस पेज को सभी हार्ड-कोड को हटाने के बाद लिखा गया है प्रॉपर्टी इस्तेमाल करने का तरीका बताया गया है.)

पहला डायग्राम. वाहन प्रॉपर्टी का नाम और वैल्यू तय की गई है.

एम्युलेटर के VHAL प्रॉपर्टी टैब में, नाम को पढ़ने के लिए रीफ़्रेश किया जाता है CURRENT_GEAR उम्मीद के मुताबिक.

data_enum

ऊपर दिए गए उदाहरण में, गियर को सेट करने पर दिखने वाली वैल्यू 4 है P.

दूसरा डायग्राम. वैल्यू को 4 के तौर पर दिखाया गया है.

आपके हिसाब से, एम्युलेटर में मौजूद VHAL प्रॉपर्टी टैब पर, नाम इस तरह दिखेगा CURRENT_GEAR. यह मौजूदा एम्युलेटर से अलग है, जहां यह P.

enum VehicleGear {
  GEAR_UNKNOWN = 0x0000,
  GEAR_NEUTRAL = 0x0001,
  GEAR_REVERSE = 0x0002,
  GEAR_PARK = 0x0004,
  GEAR_DRIVE = 0x0008,
  GEAR_1 = 0x0010,
  GEAR_2 = 0x0020,
  GEAR_3 = 0x0040,
  GEAR_4 = 0x0080,
  GEAR_5 = 0x0100,
  GEAR_6 = 0x0200,
  GEAR_7 = 0x0400,
  GEAR_8 = 0x0800,
  GEAR_9 = 0x1000,
}

ज़्यादा जानने के लिए, यह देखें एआईडीएल परिभाषा शामिल नहीं है.

जैसा कि एआईडीएल में बताया गया है, पार्क गियर की वैल्यू 4 है, जो इसका मतलब है कि आपको मान 4 का अनुवाद P में करना होगा. ऐसे समय में data_enum का इस्तेमाल करें, जो इस प्रॉपर्टी वैल्यू को किसी दूसरी स्ट्रिंग में ऐसी स्ट्रिंग से मैप करता है जिसे कोई भी व्यक्ति आसानी से पढ़ सकता है Enum. एम्युलेटर, प्रॉपर्टी की वैल्यू का अनुवाद करने के लिए इस मैप का इस्तेमाल करता है. उदाहरण के लिए:

[
    {
        "name": "VehicleProperty",
        "values": [
            {
                "name": "CURRENT_GEAR",
                "value": 289408001,
                "data_enum": "VehicleGear"
            }
        ]
    },
    {
        "name": "VehicleGear",
        "values": [
            {
                "name": "GEAR_UNKNOWN",
                "value": 0
            },
            {
                "name": "GEAR_PARK",
                "value": 4
            }
        ]
    }

]

"data_enum": "VehicleGear" जोड़ें, ताकि एम्युलेटर Enum का इस्तेमाल कर सके प्रॉपर्टी वैल्यू का अनुवाद करने के लिए, VehicleGear नाम दिया गया है. एक और Enum जोड़ें जिसका नाम VehicleGear है, जिसकी वैल्यू ValueObject की कलेक्शन है, जहां प्रॉपर्टी की वैल्यू (वैल्यू के साथ) को नाम के तौर पर दिखाया जाना चाहिए.

तीसरी इमेज. मान को GEAR_PARK के तौर पर दिखाया गया है.

एम्युलेटर के लिए, VHAL प्रॉपर्टी टैब पर, नाम को पढ़ने के लिए रीफ़्रेश किया जाता है CURRENT_GEAR, उम्मीद के मुताबिक. 4 की प्रॉपर्टी वैल्यू इस तरह दिखती है GEAR_PARK.

VHAL प्रॉपर्टी का दायरा बढ़ाने के लिए, JSON मेटाडेटा का इस्तेमाल करना

JSON मेटाडेटा का इस्तेमाल करके अपनी VHAL प्रॉपर्टी का दायरा बढ़ाने के लिए, इसे चलाएं Python स्क्रिप्ट (Android सोर्स में मौजूद) एआईडीएल.

नतीजे में मिले JSON में कुछ ग़ैर-ज़रूरी वैल्यू शामिल हैं, जैसे कि change_mode, access और unit. यह जानकारी वीएचएएल प्रॉपर्टी का हिस्सा है, लेकिन ये JSON वैल्यू, एम्युलेटर की VHAL प्रॉपर्टी विंडो में दिखने वाली वैल्यू पर असर नहीं डालती हैं.

सिस्टम इमेज में JSON मेटाडेटा जोड़ना

ध्यान रखें कि फ़ाइल के नाम के आखिर में -types-meta.json होना चाहिए. अगर नहीं, तो फ़ाइल अनदेखा किया गया.

बिल्ड टारगेट जोड़ें

-types-meta.json फ़ाइल को PRODUCT_COPY_FILE में जोड़ें. इसके लिए उदाहरण:

PRODUCT_COPY_FILES += \
    device/generic/car/common/vehicle-types-meta.json:vehicle-types-meta.json

यह कोड फ़ाइल को out/target/product/{your_target_path}/ में कॉपी करता है, जो कि रूट है में से कितना एक साथ इस्तेमाल कर सकते हैं.