एंड्रॉइड इनपुट सबसिस्टम में नाममात्र रूप से एक इवेंट पाइपलाइन शामिल होती है जो सिस्टम की कई परतों को पार करती है।
इनपुट पाइपलाइन
सबसे निचली परत पर, भौतिक इनपुट डिवाइस सिग्नल उत्पन्न करता है जो कुंजी प्रेस और स्पर्श संपर्क बिंदुओं जैसे राज्य परिवर्तनों का वर्णन करता है। डिवाइस फ़र्मवेयर इन सिग्नलों को किसी तरह से एनकोड और ट्रांसमिट करता है जैसे सिस्टम में USB HID रिपोर्ट भेजकर या I2C बस पर इंटरप्ट उत्पन्न करके।
फिर सिग्नल को लिनक्स कर्नेल में एक डिवाइस ड्राइवर द्वारा डीकोड किया जाता है। लिनक्स कर्नेल कई मानक बाह्य उपकरणों के लिए ड्राइवर प्रदान करता है, विशेष रूप से उनके लिए जो HID प्रोटोकॉल का पालन करते हैं। हालाँकि, एक ओईएम को अक्सर एम्बेडेड डिवाइसों के लिए कस्टम ड्राइवर प्रदान करना चाहिए जो निम्न स्तर पर सिस्टम में कसकर एकीकृत होते हैं, जैसे टच स्क्रीन।
इनपुट डिवाइस ड्राइवर लिनक्स इनपुट प्रोटोकॉल के माध्यम से डिवाइस-विशिष्ट संकेतों को एक मानक इनपुट इवेंट प्रारूप में अनुवाद करने के लिए जिम्मेदार हैं। लिनक्स इनपुट प्रोटोकॉल linux/input.h
कर्नेल हेडर फ़ाइल में इवेंट प्रकारों और कोड के एक मानक सेट को परिभाषित करता है। इस तरह, कर्नेल के बाहर के घटकों को भौतिक स्कैन कोड, HID उपयोग, I2C संदेश, GPIO पिन और इसी तरह के विवरणों की परवाह करने की आवश्यकता नहीं है।
इसके बाद, एंड्रॉइड EventHub
घटक प्रत्येक इनपुट डिवाइस से जुड़े evdev
ड्राइवर को खोलकर कर्नेल से इनपुट इवेंट पढ़ता है। एंड्रॉइड इनपुट रीडर घटक फिर डिवाइस क्लास के अनुसार इनपुट इवेंट को डीकोड करता है और एंड्रॉइड इनपुट इवेंट की एक स्ट्रीम तैयार करता है। इस प्रक्रिया के भाग के रूप में, लिनक्स इनपुट प्रोटोकॉल इवेंट कोड को इनपुट डिवाइस कॉन्फ़िगरेशन, कीबोर्ड लेआउट फ़ाइलों और विभिन्न मैपिंग तालिकाओं के अनुसार एंड्रॉइड इवेंट कोड में अनुवादित किया जाता है।
अंत में, InputReader
इनपुट इवेंट को InputDispatcher को भेजता है जो उन्हें उचित विंडो पर अग्रेषित करता है।
नियंत्रण केंद्र
इनपुट पाइपलाइन में कई चरण होते हैं जो इनपुट डिवाइस के व्यवहार पर नियंत्रण को प्रभावित करते हैं।
ड्राइवर और फ़र्मवेयर कॉन्फ़िगरेशन
इनपुट डिवाइस ड्राइवर अक्सर रजिस्टरों में पैरामीटर सेट करके या यहां तक कि फ़र्मवेयर अपलोड करके इनपुट डिवाइस के व्यवहार को कॉन्फ़िगर करते हैं। यह विशेष रूप से टच स्क्रीन जैसे एम्बेडेड उपकरणों के मामले में है जहां अंशांकन प्रक्रिया के एक बड़े हिस्से में वांछित सटीकता और प्रतिक्रिया प्रदान करने और शोर को दबाने के लिए इन मापदंडों को ट्यून करना या फर्मवेयर को ठीक करना शामिल है।
ड्राइवर कॉन्फ़िगरेशन विकल्प अक्सर कर्नेल बोर्ड सपोर्ट पैकेज (बीएसपी) में मॉड्यूल पैरामीटर के रूप में निर्दिष्ट किए जाते हैं ताकि एक ही ड्राइवर कई अलग-अलग हार्डवेयर कार्यान्वयन का समर्थन कर सके।
यह दस्तावेज़ ड्राइवर या फ़र्मवेयर कॉन्फ़िगरेशन का वर्णन करने का प्रयास करता है, लेकिन यह सामान्य रूप से डिवाइस अंशांकन के संबंध में मार्गदर्शन प्रदान करता है।
बोर्ड विन्यास गुण
कर्नेल बोर्ड सपोर्ट पैकेज (बीएसपी) SysFS के माध्यम से बोर्ड कॉन्फ़िगरेशन गुणों को निर्यात कर सकता है जो एंड्रॉइड इनपुटरीडर घटक द्वारा उपयोग किए जाते हैं, जैसे टच स्क्रीन पर वर्चुअल कुंजी की नियुक्ति।
विभिन्न डिवाइस बोर्ड कॉन्फ़िगरेशन गुणों का उपयोग कैसे करते हैं, इसके विवरण के लिए डिवाइस क्लास अनुभाग देखें।
संसाधन ओवरले
कुछ इनपुट व्यवहार config.xml
में संसाधन ओवरले के माध्यम से कॉन्फ़िगर किए जाते हैं जैसे कि ढक्कन स्विच का संचालन।
कुछ उदाहरण निम्नलिखित हैं:
config_lidKeyboardAccessibility
: हार्डवेयर कीबोर्ड पहुंच योग्य है या छिपा हुआ है, इस पर ढक्कन स्विच के प्रभाव को निर्दिष्ट करता है।config_lidNavigationAccessibility
: ट्रैकपैड पहुंच योग्य है या छिपा हुआ है, इस पर ढक्कन स्विच का प्रभाव निर्दिष्ट करता है।config_longPressOnPowerBehavior
: निर्दिष्ट करता है कि जब उपयोगकर्ता पावर बटन दबाए रखेगा तो क्या होना चाहिए।config_lidOpenRotation
: स्क्रीन ओरिएंटेशन पर ढक्कन स्विच के प्रभाव को निर्दिष्ट करता है।
प्रत्येक कॉन्फ़िगरेशन विकल्प के बारे में विवरण के लिए frameworks/base/core/res/res/values/config.xml
के दस्तावेज़ देखें।
मुख्य मानचित्र
कुंजी मानचित्रों का उपयोग एंड्रॉइड EventHub
और InputReader
घटकों द्वारा कुंजी, जॉयस्टिक बटन और जॉयस्टिक अक्षों के लिए लिनक्स इवेंट कोड से एंड्रॉइड इवेंट कोड तक मैपिंग को कॉन्फ़िगर करने के लिए किया जाता है। मैपिंग डिवाइस या भाषा पर निर्भर हो सकती है।
विभिन्न डिवाइस कुंजी मानचित्रों का उपयोग कैसे करते हैं, इसके विवरण के लिए डिवाइस वर्ग अनुभाग देखें।
इनपुट डिवाइस कॉन्फ़िगरेशन फ़ाइलें
इनपुट डिवाइस कॉन्फ़िगरेशन फ़ाइलों का उपयोग एंड्रॉइड EventHub
और InputReader
घटकों द्वारा विशेष डिवाइस विशेषताओं को कॉन्फ़िगर करने के लिए किया जाता है जैसे कि स्पर्श आकार की जानकारी कैसे रिपोर्ट की जाती है।
विभिन्न डिवाइस इनपुट डिवाइस कॉन्फ़िगरेशन मैप का उपयोग कैसे करते हैं, इसके विवरण के लिए डिवाइस क्लास अनुभाग देखें।
HID उपयोग और ईवेंट कोड को समझें
कीबोर्ड पर किसी भी कुंजी, गेम कंट्रोलर पर बटन, जॉयस्टिक अक्ष या अन्य नियंत्रण को संदर्भित करने के लिए अक्सर कई अलग-अलग पहचानकर्ताओं का उपयोग किया जाता है। इन पहचानकर्ताओं के बीच संबंध हमेशा समान नहीं होते हैं: वे मैपिंग तालिकाओं के एक सेट पर निर्भर होते हैं, जिनमें से कुछ निश्चित होते हैं, और कुछ डिवाइस की विशेषताओं, डिवाइस ड्राइवर, वर्तमान लोकेल, सिस्टम कॉन्फ़िगरेशन के आधार पर भिन्न होते हैं। उपयोगकर्ता प्राथमिकताएँ और अन्य कारक।
- भौतिक स्कैन कोड
भौतिक स्कैन कोड एक उपकरण-विशिष्ट पहचानकर्ता है जो प्रत्येक कुंजी, बटन या अन्य नियंत्रण से जुड़ा होता है। चूँकि भौतिक स्कैन कोड अक्सर एक डिवाइस से दूसरे डिवाइस में भिन्न होते हैं, फ़र्मवेयर या डिवाइस ड्राइवर उन्हें मानक पहचानकर्ताओं जैसे HID उपयोग या लिनक्स कुंजी कोड में मैप करने के लिए जिम्मेदार होता है।
स्कैन कोड मुख्य रूप से कीबोर्ड के लिए रुचिकर होते हैं। अन्य डिवाइस आमतौर पर GPIO पिन, I2C संदेश या अन्य माध्यमों का उपयोग करके निम्न स्तर पर संचार करते हैं। नतीजतन, सॉफ़्टवेयर स्टैक की ऊपरी परतें यह समझने के लिए डिवाइस ड्राइवरों पर निर्भर करती हैं कि क्या हो रहा है।
- छिपाई उपयोग
HID उपयोग एक मानक पहचानकर्ता है जिसका उपयोग कीबोर्ड कुंजी, जॉयस्टिक अक्ष, माउस बटन, या स्पर्श संपर्क बिंदु जैसे नियंत्रण की स्थिति की रिपोर्ट करने के लिए किया जाता है। अधिकांश यूएसबी और ब्लूटूथ इनपुट डिवाइस एचआईडी विनिर्देश के अनुरूप हैं, जो सिस्टम को उनके साथ एक समान तरीके से इंटरफेस करने में सक्षम बनाता है।
एंड्रॉइड फ्रेमवर्क एचआईडी उपयोग कोड को लिनक्स कुंजी कोड और अन्य पहचानकर्ताओं में अनुवाद करने के लिए लिनक्स कर्नेल एचआईडी ड्राइवरों पर निर्भर करता है। इसलिए HID का उपयोग मुख्य रूप से परिधीय निर्माताओं के लिए रुचिकर है।
- लिनक्स कुंजी कोड
लिनक्स कुंजी कोड किसी कुंजी या बटन के लिए एक मानक पहचानकर्ता है। Linux कुंजी कोड को
linux/input.h
हेडर फ़ाइल में उन स्थिरांकों का उपयोग करके परिभाषित किया जाता है जो उपसर्गKEY_
याBTN_
से शुरू होते हैं। लिनक्स कर्नेल इनपुट ड्राइवर भौतिक स्कैन कोड, एचआईडी उपयोग और अन्य डिवाइस-विशिष्ट संकेतों को लिनक्स कुंजी कोड में अनुवाद करने औरEV_KEY
घटनाओं के हिस्से के रूप में उनके बारे में जानकारी देने के लिए जिम्मेदार हैं।एंड्रॉइड एपीआई कभी-कभी किसी कुंजी से जुड़े लिनक्स कुंजी कोड को उसके "स्कैन कोड" के रूप में संदर्भित करता है। यह तकनीकी रूप से गलत है लेकिन यह एपीआई में लिनक्स कुंजी कोड को एंड्रॉइड कुंजी कोड से अलग करने में मदद करता है।
- लिनक्स रिलेटिव या एब्सोल्यूट एक्सिस कोड
लिनक्स सापेक्ष या निरपेक्ष अक्ष कोड एक अक्ष के साथ सापेक्ष आंदोलनों या निरपेक्ष स्थिति की रिपोर्ट करने के लिए एक मानक पहचानकर्ता है, जैसे कि एक्स अक्ष के साथ माउस की सापेक्ष गतिविधियां या एक्स अक्ष के साथ जॉयस्टिक की पूर्ण स्थिति। लिनक्स अक्ष कोड को
linux/input.h
हेडर फ़ाइल में उन स्थिरांकों का उपयोग करके परिभाषित किया जाता है जो उपसर्गREL_
याABS_
से शुरू होते हैं। लिनक्स कर्नेल इनपुट ड्राइवर HID उपयोग और अन्य डिवाइस-विशिष्ट संकेतों को लिनक्स अक्ष कोड में अनुवाद करने औरEV_REL
औरEV_ABS
घटनाओं के हिस्से के रूप में उनके बारे में जानकारी देने के लिए जिम्मेदार हैं।- लिनक्स स्विच कोड
लिनक्स स्विच कोड किसी डिवाइस पर स्विच की स्थिति की रिपोर्ट करने के लिए एक मानक पहचानकर्ता है, जैसे कि ढक्कन स्विच। लिनक्स स्विच कोड को
linux/input.h
हेडर फ़ाइल में उन स्थिरांकों का उपयोग करके परिभाषित किया जाता है जो उपसर्गSW_
से शुरू होते हैं। लिनक्स कर्नेल इनपुट ड्राइवरEV_SW
घटनाओं के रूप में स्विच स्थिति परिवर्तन की रिपोर्ट करते हैं।एंड्रॉइड एप्लिकेशन आमतौर पर स्विच से ईवेंट प्राप्त नहीं करते हैं, लेकिन सिस्टम विभिन्न डिवाइस-विशिष्ट कार्यों को नियंत्रित करने के लिए आंतरिक रूप से उनका उपयोग कर सकता है।
- एंड्रॉइड कुंजी कोड
एंड्रॉइड कुंजी कोड 'होम' जैसी किसी विशेष कुंजी को इंगित करने के लिए एंड्रॉइड एपीआई में परिभाषित एक मानक पहचानकर्ता है। एंड्रॉइड कुंजी कोड को
android.view.KeyEvent
वर्ग द्वारा स्थिरांक के रूप में परिभाषित किया गया है जो उपसर्गKEYCODE_
से शुरू होते हैं।कुंजी लेआउट निर्दिष्ट करता है कि लिनक्स कुंजी कोड को एंड्रॉइड कुंजी कोड से कैसे मैप किया जाता है। कीबोर्ड मॉडल, भाषा, देश, लेआउट या विशेष कार्यों के आधार पर विभिन्न कुंजी लेआउट का उपयोग किया जा सकता है।
एंड्रॉइड कुंजी कोड के संयोजन को एक डिवाइस और स्थानीय विशिष्ट कुंजी वर्ण मानचित्र का उपयोग करके वर्ण कोड में बदल दिया जाता है। उदाहरण के लिए, जब
KEYCODE_SHIFT
औरKEYCODE_A
के रूप में पहचानी जाने वाली कुंजियाँ दोनों को एक साथ दबाया जाता है, तो सिस्टम कुंजी वर्ण मानचित्र में संयोजन को देखता है और बड़े अक्षर 'ए' को ढूंढता है, जिसे तब वर्तमान में केंद्रित टेक्स्ट विजेट में डाला जाता है।- एंड्रॉइड एक्सिस कोड
एंड्रॉइड अक्ष कोड एक विशेष डिवाइस अक्ष को इंगित करने के लिए एंड्रॉइड एपीआई में परिभाषित एक मानक पहचानकर्ता है। एंड्रॉइड अक्ष कोड को
android.view.MotionEvent
वर्ग द्वारा स्थिरांक के रूप में परिभाषित किया गया है जो उपसर्गAXIS_
से शुरू होता है।मुख्य लेआउट निर्दिष्ट करता है कि लिनक्स एक्सिस कोड को एंड्रॉइड एक्सिस कोड से कैसे मैप किया जाता है। डिवाइस मॉडल, भाषा, देश, लेआउट या विशेष कार्यों के आधार पर विभिन्न कुंजी लेआउट का उपयोग किया जा सकता है।
- एंड्रॉइड मेटा स्टेट
एंड्रॉइड मेटा स्टेट एंड्रॉइड एपीआई में परिभाषित एक मानक पहचानकर्ता है जो यह दर्शाता है कि कौन सी संशोधक कुंजियाँ दबाई गई हैं। एंड्रॉइड मेटा स्थिति को
android.view.KeyEvent
वर्ग द्वारा स्थिरांक के रूप में परिभाषित किया गया है जो उपसर्गMETA_
से शुरू होता है।वर्तमान मेटा स्थिति Android InputReader घटक द्वारा निर्धारित की जाती है जो मॉनिटर करता है कि
KEYCODE_SHIFT_LEFT
जैसी संशोधक कुंजियाँ कब दबाई/जारी की जाती हैं और उपयुक्त मेटा स्थिति ध्वज को सेट/रीसेट करता है।संशोधक कुंजियों और मेटा अवस्थाओं के बीच संबंध हार्डकोडेड है, लेकिन कुंजी लेआउट यह बदल सकता है कि संशोधक कुंजियाँ स्वयं कैसे मैप की जाती हैं, जो बदले में मेटा अवस्थाओं को प्रभावित करती हैं।
- एंड्रॉइड बटन स्थिति
एंड्रॉइड बटन स्थिति एंड्रॉइड एपीआई में परिभाषित एक मानक पहचानकर्ता है जो यह दर्शाता है कि कौन से बटन (माउस या स्टाइलस पर) दबाए गए हैं। एंड्रॉइड बटन स्थितियों को
android.view.MotionEvent
वर्ग द्वारा स्थिरांक के रूप में परिभाषित किया गया है जो उपसर्गBUTTON_
से शुरू होते हैं।वर्तमान बटन स्थिति एंड्रॉइड इनपुटरीडर घटक द्वारा निर्धारित की जाती है जो मॉनिटर करता है कि बटन (माउस या स्टाइलस पर) कब दबाए/जारी किए जाते हैं और उपयुक्त बटन स्थिति ध्वज सेट/रीसेट करता है।
बटन और बटन स्थिति के बीच संबंध हार्डकोडेड है।
अग्रिम पठन
- लिनक्स इनपुट इवेंट कोड
- लिनक्स मल्टी-टच प्रोटोकॉल
- लिनक्स इनपुट ड्राइवर
- लिनक्स बल प्रतिक्रिया
- HID जानकारी, HID उपयोग तालिकाओं सहित