इनपुट

Android इनपुट एचएएल आइकन

एंड्रॉइड इनपुट सबसिस्टम में नाममात्र रूप से एक इवेंट पाइपलाइन होती है जो सिस्टम की कई परतों को पार करती है।

इनपुट पाइपलाइन

सबसे निचली परत पर, भौतिक इनपुट उपकरण ऐसे संकेत उत्पन्न करता है जो राज्य परिवर्तनों का वर्णन करता है जैसे कुंजी दबाना और स्पर्श संपर्क बिंदु। डिवाइस फर्मवेयर इन संकेतों को किसी तरह से एनकोड और ट्रांसमिट करता है जैसे कि सिस्टम को USB HID रिपोर्ट भेजकर या I2C बस में इंटरप्ट उत्पन्न करके।

सिग्नल तब लिनक्स कर्नेल में डिवाइस ड्राइवर द्वारा डीकोड किए जाते हैं। Linux कर्नेल कई मानक बाह्य उपकरणों के लिए ड्राइवर प्रदान करता है, विशेष रूप से वे जो HID प्रोटोकॉल का पालन करते हैं। हालाँकि, एक ओईएम को अक्सर एम्बेडेड उपकरणों के लिए कस्टम ड्राइवर प्रदान करना चाहिए जो सिस्टम में निम्न-स्तर पर कसकर एकीकृत होते हैं, जैसे टच स्क्रीन।

इनपुट डिवाइस ड्राइवर लिनक्स इनपुट प्रोटोकॉल के माध्यम से डिवाइस-विशिष्ट संकेतों को मानक इनपुट इवेंट प्रारूप में अनुवाद करने के लिए ज़िम्मेदार हैं। Linux इनपुट प्रोटोकॉल linux/input.h कर्नेल हेडर फ़ाइल में ईवेंट प्रकारों और कोडों के एक मानक सेट को परिभाषित करता है। इस तरह, कर्नेल के बाहर के घटकों को भौतिक स्कैन कोड, HID उपयोग, I2C संदेश, GPIO पिन और इसी तरह के विवरणों की परवाह करने की आवश्यकता नहीं है।

अगला, Android EventHub घटक प्रत्येक इनपुट डिवाइस से जुड़े evdev ड्राइवर को खोलकर कर्नेल से इनपुट ईवेंट पढ़ता है। Android InputReader घटक तब डिवाइस वर्ग के अनुसार इनपुट ईवेंट को डिकोड करता है और Android इनपुट ईवेंट की एक स्ट्रीम उत्पन्न करता है। इस प्रक्रिया के हिस्से के रूप में, लिनक्स इनपुट प्रोटोकॉल इवेंट कोड को इनपुट डिवाइस कॉन्फ़िगरेशन, कीबोर्ड लेआउट फाइल और विभिन्न मैपिंग टेबल के अनुसार एंड्रॉइड इवेंट कोड में अनुवादित किया जाता है।

अंत में, InputReader को इनपुट ईवेंट भेजता है जो उन्हें उचित विंडो पर भेजता है।

नियंत्रण केंद्र

इनपुट पाइपलाइन में कई चरण होते हैं जो इनपुट डिवाइस के व्यवहार पर नियंत्रण को प्रभावित करते हैं।

चालक और फर्मवेयर विन्यास

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

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

यह दस्तावेज़ीकरण ड्राइवर या फ़र्मवेयर कॉन्फ़िगरेशन का वर्णन करने का प्रयास करता है, लेकिन यह सामान्य रूप से उपकरण अंशांकन के लिए मार्गदर्शन प्रदान करता है।

बोर्ड कॉन्फ़िगरेशन गुण

कर्नेल बोर्ड सपोर्ट पैकेज (BSP) SysFS के माध्यम से बोर्ड कॉन्फ़िगरेशन गुण निर्यात कर सकता है जो कि Android InputReader घटक द्वारा उपयोग किया जाता है, जैसे टच स्क्रीन पर वर्चुअल कुंजियों का प्लेसमेंट।

विभिन्न डिवाइस बोर्ड कॉन्फ़िगरेशन गुणों का उपयोग कैसे करते हैं, इसके बारे में विवरण के लिए डिवाइस क्लास अनुभाग देखें।

संसाधन ओवरले

कुछ इनपुट व्यवहार config.xml में संसाधन ओवरले के माध्यम से कॉन्फ़िगर किए जाते हैं जैसे लिड स्विच का संचालन।

कुछ उदाहरण निम्नलिखित हैं:

  • config_lidKeyboardAccessibility : हार्डवेयर कीबोर्ड पहुंच योग्य है या छिपा हुआ है, इस पर ढक्कन स्विच के प्रभाव को निर्दिष्ट करता है।

  • config_lidNavigationAccessibility : लिड स्विच के प्रभाव को निर्दिष्ट करता है कि ट्रैकपैड पहुंच योग्य है या छिपा हुआ है।

  • config_longPressOnPowerBehavior : निर्दिष्ट करता है कि जब उपयोगकर्ता पावर बटन दबाए रखता है तो क्या होना चाहिए।

  • config_lidOpenRotation : स्क्रीन ओरिएंटेशन पर लिड स्विच के प्रभाव को निर्दिष्ट करता है।

प्रत्येक कॉन्फ़िगरेशन विकल्प के बारे में विवरण के लिए frameworks/base/core/res/res/values/config.xml के भीतर दस्तावेज़ देखें।

कुंजी मानचित्र

कीज़, जॉयस्टिक बटन और जॉयस्टिक अक्षों के लिए Linux ईवेंट कोड से Android ईवेंट कोड में मैपिंग को कॉन्फ़िगर करने के लिए Android EventHub और InputReader घटकों द्वारा मुख्य मानचित्रों का उपयोग किया जाता है। मानचित्रण उपकरण या भाषा पर निर्भर हो सकता है।

विभिन्न उपकरण कुंजी मानचित्रों का उपयोग कैसे करते हैं, इसके बारे में विवरण के लिए उपकरण वर्ग अनुभाग देखें।

इनपुट डिवाइस कॉन्फ़िगरेशन फ़ाइलें

इनपुट डिवाइस कॉन्फ़िगरेशन फ़ाइलों का उपयोग Android EventHub और InputReader घटकों द्वारा विशेष उपकरण विशेषताओं को कॉन्फ़िगर करने के लिए किया जाता है, जैसे कि स्पर्श आकार की जानकारी कैसे रिपोर्ट की जाती है।

विभिन्न डिवाइस इनपुट डिवाइस कॉन्फ़िगरेशन मैप्स का उपयोग कैसे करते हैं, इसके विवरण के लिए डिवाइस क्लास सेक्शन देखें।

एचआईडी उपयोगों और इवेंट कोड को समझना

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

भौतिक स्कैन कोड

एक भौतिक स्कैन कोड एक उपकरण-विशिष्ट पहचानकर्ता है जो प्रत्येक कुंजी, बटन या अन्य नियंत्रण से जुड़ा होता है। क्योंकि भौतिक स्कैन कोड अक्सर एक डिवाइस से दूसरे डिवाइस में भिन्न होते हैं, फ़र्मवेयर या डिवाइस ड्राइवर उन्हें मानक पहचानकर्ताओं जैसे HID उपयोग या Linux कुंजी कोड के लिए मैप करने के लिए ज़िम्मेदार होता है।

स्कैन कोड मुख्य रूप से कीबोर्ड के लिए रुचिकर होते हैं। अन्य डिवाइस आमतौर पर GPIO पिन, I2C संदेशों या अन्य माध्यमों का उपयोग करके निम्न-स्तर पर संचार करते हैं। नतीजतन, सॉफ्टवेयर स्टैक की ऊपरी परतें डिवाइस ड्राइवरों पर भरोसा करती हैं कि क्या चल रहा है।

छिपाई उपयोग

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

Android फ्रेमवर्क HID उपयोग कोड को Linux कुंजी कोड और अन्य पहचानकर्ताओं में अनुवाद करने के लिए Linux कर्नेल HID ड्राइवरों पर निर्भर करता है। इसलिए HID का उपयोग मुख्य रूप से परिधीय निर्माताओं के लिए रुचिकर है।

लिनक्स कुंजी कोड

एक लिनक्स कुंजी कोड एक कुंजी या बटन के लिए एक मानक पहचानकर्ता है। Linux कुंजी कोड linux/input.h हेडर फ़ाइल में स्थिरांक का उपयोग करके परिभाषित किए गए हैं जो उपसर्ग KEY_ या BTN_ से शुरू होते हैं। Linux कर्नेल इनपुट ड्राइवर भौतिक स्कैन कोड, HID उपयोग और अन्य डिवाइस-विशिष्ट संकेतों को Linux कुंजी कोड में अनुवाद करने और EV_KEY ईवेंट के भाग के रूप में उनके बारे में जानकारी देने के लिए ज़िम्मेदार हैं।

एंड्रॉइड एपीआई कभी-कभी कुंजी से जुड़े लिनक्स कुंजी कोड को "स्कैन कोड" के रूप में संदर्भित करता है। यह तकनीकी रूप से गलत है लेकिन यह एपीआई में एंड्रॉइड कुंजी कोड से लिनक्स कुंजी कोड को अलग करने में मदद करता है।

लिनक्स रिलेटिव या एब्सोल्यूट एक्सिस कोड

एक लिनक्स रिश्तेदार या पूर्ण अक्ष कोड एक अक्ष के साथ सापेक्ष आंदोलनों या पूर्ण स्थिति की रिपोर्ट करने के लिए एक मानक पहचानकर्ता है, जैसे कि एक्स अक्ष के साथ एक माउस के सापेक्ष आंदोलनों या एक्स अक्ष के साथ जॉयस्टिक की पूर्ण स्थिति। Linux अक्ष कोड को linux/input.h हेडर फ़ाइल में स्थिरांक का उपयोग करके परिभाषित किया गया है जो उपसर्ग REL_ या ABS_ से शुरू होता है। Linux कर्नेल इनपुट ड्राइवर HID उपयोगों और अन्य डिवाइस-विशिष्ट संकेतों को Linux अक्ष कोड में अनुवाद करने और EV_REL और EV_ABS ईवेंट के भाग के रूप में उनके बारे में जानकारी देने के लिए ज़िम्मेदार हैं।

लिनक्स स्विच कोड

एक लिनक्स स्विच कोड एक उपकरण पर एक स्विच की स्थिति की रिपोर्ट करने के लिए एक मानक पहचानकर्ता है, जैसे कि ढक्कन स्विच। Linux स्विच कोड को linux/input.h हेडर फ़ाइल में स्थिरांक का उपयोग करके परिभाषित किया जाता है जो उपसर्ग SW_ से शुरू होता है। लिनक्स कर्नेल इनपुट ड्राइवर रिपोर्ट स्विच स्थिति EV_SW घटनाओं के रूप में बदलता है।

एंड्रॉइड एप्लिकेशन आमतौर पर स्विच से ईवेंट प्राप्त नहीं करते हैं, लेकिन सिस्टम विभिन्न डिवाइस-विशिष्ट कार्यों को नियंत्रित करने के लिए आंतरिक रूप से उनका उपयोग कर सकता है।

Android कुंजी कोड

एक एंड्रॉइड कुंजी कोड एक मानक पहचानकर्ता है जिसे एंड्रॉइड एपीआई में 'होम' जैसी विशेष कुंजी को इंगित करने के लिए परिभाषित किया गया है। Android कुंजी कोड android.view.KeyEvent वर्ग द्वारा स्थिरांक के रूप में परिभाषित किए गए हैं जो उपसर्ग KEYCODE_ से शुरू होते हैं।

कुंजी लेआउट निर्दिष्ट करता है कि लिनक्स कुंजी कोड को Android कुंजी कोड में कैसे मैप किया जाता है। कीबोर्ड मॉडल, भाषा, देश, लेआउट या विशेष कार्यों के आधार पर विभिन्न कुंजी लेआउट का उपयोग किया जा सकता है।

एंड्रॉइड कुंजी कोड के संयोजन एक डिवाइस और स्थानीय विशिष्ट कुंजी वर्ण मानचित्र का उपयोग करके वर्ण कोड में परिवर्तित हो जाते हैं। उदाहरण के लिए, जब KEYCODE_SHIFT और KEYCODE_A दोनों को एक साथ दबाया जाता है, तो सिस्टम कुंजी वर्ण मानचित्र में संयोजन को देखता है और कैपिटल लेटर 'ए' पाता है, जिसे वर्तमान में केंद्रित टेक्स्ट विजेट में डाला जाता है।

एंड्रॉइड एक्सिस कोड

एक Android अक्ष कोड एक विशेष उपकरण अक्ष को इंगित करने के लिए Android API में परिभाषित एक मानक पहचानकर्ता है। Android अक्ष कोड android.view.MotionEvent वर्ग द्वारा स्थिरांक के रूप में परिभाषित किए गए हैं जो उपसर्ग AXIS_ से शुरू होते हैं।

मुख्य लेआउट निर्दिष्ट करता है कि लिनक्स एक्सिस कोड को एंड्रॉइड एक्सिस कोड में कैसे मैप किया जाता है। डिवाइस मॉडल, भाषा, देश, लेआउट या विशेष कार्यों के आधार पर विभिन्न कुंजी लेआउट का उपयोग किया जा सकता है।

एंड्रॉइड मेटा स्टेट

एक एंड्रॉइड मेटा स्टेट एंड्रॉइड एपीआई में परिभाषित एक मानक पहचानकर्ता है जो इंगित करता है कि कौन सी संशोधक कुंजियां दबाई जाती हैं। एंड्रॉइड मेटा स्टेट्स को android.view.KeyEvent वर्ग द्वारा स्थिरांक के रूप में परिभाषित किया गया है जो उपसर्ग META_ से शुरू होता है।

वर्तमान मेटा स्थिति को Android InputReader घटक द्वारा निर्धारित किया जाता है जो मॉनिटर करता है कि कब KEYCODE_SHIFT_LEFT जैसी संशोधक कुंजियों को दबाया/जारी किया जाता है और उपयुक्त मेटा स्थिति ध्वज को सेट/रीसेट किया जाता है।

संशोधक कुंजी और मेटा स्टेट्स के बीच संबंध हार्डकोडेड है लेकिन कुंजी लेआउट बदल सकता है कि कैसे संशोधक कुंजियाँ स्वयं मैप की जाती हैं जो बदले में मेटा स्टेट्स को प्रभावित करती हैं।

Android बटन स्थिति

एक Android बटन स्थिति Android API में परिभाषित एक मानक पहचानकर्ता है जो इंगित करता है कि कौन से बटन (माउस या स्टाइलस पर) दबाए गए हैं। एंड्रॉइड बटन स्टेट्स को android.view.MotionEvent क्लास द्वारा स्थिरांक के रूप में परिभाषित किया गया है जो उपसर्ग BUTTON_ से शुरू होता है।

वर्तमान बटन स्थिति Android InputReader घटक द्वारा निर्धारित की जाती है जो मॉनिटर करता है कि कब बटन (माउस या स्टाइलस पर) दबाए/जारी किए जाते हैं और उपयुक्त बटन स्थिति ध्वज को सेट/रीसेट करते हैं।

बटन और बटन राज्यों के बीच संबंध हार्डकोडेड है।

अग्रिम पठन

  1. लिनक्स इनपुट इवेंट कोड
  2. लिनक्स मल्टी-टच प्रोटोकॉल
  3. लिनक्स इनपुट ड्राइवर
  4. लिनक्स बल प्रतिक्रिया
  5. HID जानकारी, जिसमें HID उपयोग तालिकाएँ शामिल हैं