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

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

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

खास जानकारी

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

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

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

Enum ऑब्जेक्ट

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

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

ValueObject

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

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

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

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

पहली इमेज. नाम और वैल्यू के साथ तय की गई VehicleProperty.

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

data_enum

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

दूसरी इमेज. वैल्यू 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,
}

ज़्यादा जानने के लिए, AIDL की परिभाषा देखें.

जैसा कि एआईडीएल में बताया गया है, पार्क गियर की वैल्यू 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" जोड़ें, ताकि एमुलेटर, प्रॉपर्टी वैल्यू का अनुवाद करने के लिए, VehicleGear नाम वाले Enum का इस्तेमाल कर सके. VehicleGear नाम वाला एक और Enum जोड़ें, जिसकी वैल्यू ValueObject की कैटगरी हो. साथ ही, प्रॉपर्टी की वैल्यू (वैल्यू के साथ) को नाम के तौर पर दिखाया जाना चाहिए.

तीसरी इमेज. वैल्यू, GEAR_PARK के तौर पर दिखती है.

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

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

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

इस JSON में कुछ ग़ैर-ज़रूरी वैल्यू शामिल हैं, जैसे कि change_mode, access, और unit. हालांकि, यह जानकारी VHAL प्रॉपर्टी का हिस्सा है, लेकिन इन 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}/ में कॉपी करता है. यह आपके बने हुए टारगेट आउटपुट का रूट होता है.