इनपुट

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

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

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

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

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

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

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

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

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

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

ड्राइवर और फर्मवेयर कॉन्फ़िगरेशन

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

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

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

बोर्ड विन्यास गुण

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

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

संसाधन ओवरले

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

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

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

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

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

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

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

मुख्य मानचित्र

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

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

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

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

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

HID के उपयोग और इवेंट कोड को समझना

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

शारीरिक स्कैन कोड

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

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

छिपाई

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

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

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

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

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

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

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

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

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

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

एंड्रॉइड कुंजी कोड

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

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

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

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

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

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

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

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

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

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

Android बटन स्थिति

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

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

बटन और बटन की स्थिति के बीच संबंध हार्डकोडेड है।

अग्रिम पठन

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