एमुलेटर में वीएचएएल संपत्ति विवरण बढ़ाएँ

एंड्रॉइड ऑटोमोटिव ओएस (एएओएस) में सामान्य वीएचएएल गुण होते हैं जिन्हें एमुलेटर की वीएचएएल विंडो में देखा जा सकता है। परिणामस्वरूप, आप वीएचएएल के बारे में नाम, विवरण और मूल्यों के अर्थ सहित प्रचुर मात्रा में जानकारी देख सकते हैं। जानकारी VHAL संपत्तियों के मेटाडेटा से निकाली गई है, जिसे QEMU एमुलेटर में हार्ड-कोड किया गया है।

जब आप अपने उपकरणों पर विशेष उपयोग के लिए अपनी खुद की वीएचएएल संपत्तियां जोड़ते हैं, तो वीएचएएल विंडो में वीएचएएल मेटाडेटा देखने के लिए आपको कोड को संशोधित करने और एक अनुकूलित क्यूईएमयू एमुलेटर बनाने की आवश्यकता होती है। इसके आसपास काम करने के लिए, आप JSON प्रारूप में अपने स्वयं के विवरण लिख सकते हैं और उन्हें अपनी सिस्टम छवि पर लिख सकते हैं।

अवलोकन

यह पृष्ठ बताता है कि आप एएओएस एमुलेटर में वीएचएएल गुणों का विवरण कैसे बढ़ा सकते हैं।

VHAL गुणों का विस्तार करने के लिए JSON मेटाडेटा बनाएं

एम्यूलेटर एंड्रॉइड वर्चुअल डिवाइस (AVD) पथ में -types-meta.json के साथ समाप्त होने वाली सभी फ़ाइलों में अतिरिक्त मेटाडेटा की तलाश करता है। जैसा कि नीचे दिखाया गया है, JSON फ़ाइलों में 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 नाम बताता है कि यह संपत्ति एमुलेटर की वीएचएएल विंडो में कैसे प्रदर्शित होती है। मान, ValueObject द्वारा वर्णित संपत्ति का property_id है। data_enum ValueObject दूसरे Enum के साथ जोड़ता है। इस एसोसिएशन का उपयोग किसी मान को मानव पठनीय स्ट्रिंग में मैप करने के लिए किया जाता है और यह केवल VehicleProperty के लिए Enum में ValueObjects के लिए मौजूद होता है। VehicleProperty का एक उदाहरण नीचे दिखाया गया है:

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

इस उदाहरण में, 289408001 के value वाली एक property_id CURRENT_GEAR के name के रूप में प्रदान की गई है। एमुलेटर में, यह संपत्ति पहले से ही एक नाम, करंट गियर के रूप में हार्ड-कोडित है। (आप इस परिदृश्य को पुन: उत्पन्न नहीं कर सकते क्योंकि यह पृष्ठ प्रदर्शन उद्देश्यों के लिए सभी हार्ड-कोडित गुणों को हटाने के बाद लिखा गया था।)

चित्र 1. वाहनसंपत्ति नाम और मूल्य के साथ परिभाषित।

एमुलेटर के वीएचएएल प्रॉपर्टीज टैब में, उम्मीद के मुताबिक CURRENT_GEAR पढ़ने के लिए नाम ताज़ा किया जाता है।

data_enum

उपरोक्त उदाहरण में, जब गियर को P पर सेट किया जाता है तो प्रदर्शित मान 4 होता है।

चित्र 2. मान 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 को पी में अनुवाद करने की आवश्यकता है। ऐसा तब होता है जब आप 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 उपयोग करे। ValueObject की एक सरणी के मान के साथ VehicleGear नामक एक और Enum जोड़ें, जहां संपत्ति मूल्य (मूल्य के साथ) को एक नाम के रूप में प्रदर्शित किया जाना चाहिए।

चित्र 3. मान GEAR_PARK के रूप में प्रदर्शित होता है।

एमुलेटर के लिए वीएचएएल प्रॉपर्टीज टैब पर, जैसा कि अपेक्षित था, नाम CURRENT_GEAR पढ़ने के लिए ताज़ा किया गया है। 4 का गुण मान GEAR_PARK के रूप में प्रदर्शित होता है।

VHAL गुणों का विस्तार करने के लिए JSON मेटाडेटा का उपयोग करें

अपनी VHAL संपत्तियों को विस्तारित करने के लिए JSON मेटाडेटा का उपयोग करने के लिए, 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}/ में कॉपी करता है।