इनपुट रूटिंग

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

एंड्रॉइड 9 और उससे कम में, टच के माध्यम से कई डिस्प्ले के साथ इंटरैक्ट करने का कोई तरीका नहीं था, क्योंकि डिस्प्ले और इनपुट डिवाइस के बीच कोई जुड़ाव तंत्र नहीं था। उदाहरण के लिए, एक टचस्क्रीन डिस्प्ले एक एचडीएमआई वीडियो आउटपुट (जो एंड्रॉइड पर डिस्प्ले के रूप में पंजीकृत होगा) और टचस्क्रीन के लिए एक यूएसबी आउटपुट (जो एक इनपुट डिवाइस के रूप में पंजीकृत होगा) प्रदान कर सकता है। यदि इस तरह से कई डिवाइस जुड़े हुए थे, तो यह निर्धारित करने का कोई तरीका नहीं होगा कि कौन सा इनपुट डिवाइस किस डिस्प्ले से संबंधित है। यही समस्या कई बिल्ट-इन डिस्प्ले वाले फोल्डेबल डिवाइस पर भी लागू होती है।

एंड्रॉइड 10 ने यह निर्दिष्ट करने के लिए एक तंत्र जोड़ा कि कौन से इनपुट डिवाइस किस डिस्प्ले से संबंधित हैं। एसोसिएशन पोर्ट नंबरों द्वारा किया जाता है जहां पोर्ट उस भौतिक पोर्ट को संदर्भित करता है जिससे एक डिस्प्ले जुड़ा होता है।

उदाहरण के लिए, यदि किसी Android डिवाइस में hdmi1 और hdmi2 लेबल वाले दो HDMI पोर्ट हैं, तो डिस्प्ले पोर्ट मान 1 और 2 हो सकते हैं। एक ही भौतिक एचडीएमआई पोर्ट के लिए एक अलग डिस्प्ले (जैसे एक अलग डिस्प्ले मॉडल या निर्माता) कनेक्ट होने पर भी पोर्ट वैल्यू वही रहती है। यह डिवाइस निर्माताओं को डिस्प्ले को असेंबल और अपग्रेड करने के निर्देश देने में सक्षम बनाता है।

एसोसिएशन को /vendor/etc/input-port-associations.xml में विन्यस्त किया गया है। उदाहरण के लिए:

<ports>
    <port display="0" input="usb-xhci-hcd.0.auto-1.1/input0" />
    <port display="1" input="usb-xhci-hcd.0.auto-1.2/input0" />
</ports>

ऊपर के उदाहरण में, display="0" उस पोर्ट को निर्दिष्ट करता है जिससे डिस्प्ले जुड़ा हुआ है। input="usb-xhci-hcd.0.auto-1.1/input0" उस पोर्ट को निर्दिष्ट करता है जिससे इनपुट डिवाइस जुड़ा हुआ है। विशिष्ट डिवाइस से जुड़े पोर्ट को निर्धारित करने के लिए, निम्न टर्मिनल कमांड का उपयोग करें, और फिर इवेंट हब स्थिति में उन डिवाइस के location गुण की समीक्षा करें।

adb shell dumpsys input

यदि कई डिवाइस कनेक्ट हैं, तो इनपुट डिस्पैचर स्थिति में हाल की RecentQueue सरणी की जांच करने के लिए एक विशिष्ट डिवाइस को टैप करें। फिर आप उन उपकरणों की पहचान कर सकते हैं जिन्होंने सबसे हाल की घटना उत्पन्न की। फिर आप संबंधित डिवाइस को इवेंट हब स्थिति में ढूंढ सकते हैं।

कनेक्टेड डिस्प्ले को असाइन किए गए डिस्प्ले पोर्ट को निर्धारित करने के लिए, adb shell dumpsys display का उपयोग करें और फिर डिस्प्ले डिवाइसेस के तहत प्रत्येक डिस्प्ले के लिए डिस्प्लेडिवाइसइन्फो की address प्रॉपर्टी DisplayDeviceInfo । वैकल्पिक रूप से, सभी कनेक्टेड डिस्प्ले के लिए पहचान जानकारी को डंप करने के लिए adb shell dumpsys SurfaceFlinger --display-id का उपयोग करें। स्थिर प्रदर्शन पहचानकर्ता भी देखें।

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

डायनेमिक मल्टी-डिस्प्ले के लिए रूटिंग

Android 10 आपको स्थिर मल्टी-डिस्प्ले डिवाइस सेट करने में सक्षम बनाता है। डायनामिक एसोसिएशन अभी तक सक्षम नहीं हैं। हालांकि, कुछ उपयोग के मामलों को डिस्प्ले और इनपुट पैनल के लिए रूटिंग जानकारी प्रदान करके संबोधित किया जा सकता है जो हमेशा मौजूद नहीं होते हैं या वर्चुअल इनपुट डिवाइस का उपयोग करते हैं और फिर उन वर्चुअल डिवाइस को अतिरिक्त रूटिंग जानकारी प्रदान करते हैं। यदि कोई उपकरण कार्यान्वयन निम्न का समर्थन करता है:

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

कार्यान्वयन

  • भौतिक उपकरणों के लिए, जिस पोर्ट से इनपुट डिवाइस जुड़ा हुआ है और जिस पोर्ट से डिस्प्ले जुड़ा है, उसका उपयोग टचस्क्रीन के साथ डिस्प्ले से मेल खाने के लिए किया जाता है।
  • मैपिंग को InputReaderConfiguration में संग्रहीत किया जाता है।
  • TouchInputMapper.mViewport उस व्यूपोर्ट पर सेट है जो InputDevice.location के लिए निर्दिष्ट पोर्ट से मेल खाता है।
  • यदि मैपिंग फ़ाइल में एक इनपुट डिवाइस पोर्ट निर्दिष्ट किया गया है, और वर्तमान में कोई व्यूपोर्ट नहीं है जिसमें मेल खाने वाला डिस्प्ले पोर्ट है, तो उस पोर्ट पर इनपुट डिवाइस अक्षम है।
  • यदि किसी विशेष इनपुट डिवाइस के लिए पोर्ट निर्दिष्ट नहीं है, तो व्यूपोर्ट मौजूदा नियमों के अनुसार सेट किया गया है।
  • इनपुट ड्राइवरों में कर्नेल परिवर्तन की आवश्यकता नहीं है।
  • इनपुट डिवाइस पोर्ट EVIOCGPHYS ioctl का उपयोग करके निर्धारित किए जाते हैं।