एंड्रॉइड यूएसबी एक्सेसरीज को एंड्रॉइड ओपन एक्सेसरी (एओए) प्रोटोकॉल का पालन करना चाहिए, जो परिभाषित करता है कि एक एक्सेसरी कैसे एंड्रॉइड-संचालित डिवाइस के साथ संचार का पता लगाता है और सेट करता है। सहायक उपकरण को निम्नलिखित चरणों का पालन करना चाहिए:
- कनेक्टेड डिवाइस की प्रतीक्षा करें और उसका पता लगाएं।
- डिवाइस के एक्सेसरी मोड सपोर्ट का निर्धारण करें।
- डिवाइस को एक्सेसरी मोड में शुरू करने का प्रयास करें (यदि आवश्यक हो)।
- यदि डिवाइस AOA का समर्थन करता है, तो डिवाइस के साथ संचार स्थापित करें।
निम्नलिखित अनुभाग बताते हैं कि इन चरणों को कैसे लागू किया जाए।
कनेक्टेड डिवाइसों की प्रतीक्षा करें और उनका पता लगाएं
एक्सेसरीज़ को कनेक्ट किए गए Android-संचालित उपकरणों की लगातार जांच करनी चाहिए। जब कोई डिवाइस कनेक्ट होता है, तो एक्सेसरी को यह निर्धारित करना चाहिए कि डिवाइस एक्सेसरी मोड का समर्थन करता है या नहीं।
सहायक मोड समर्थन निर्धारित करें
जब कोई Android-संचालित डिवाइस कनेक्ट होता है, तो वह तीन स्थितियों में से एक में हो सकता है:
- एंड्रॉइड एक्सेसरी मोड का समर्थन करता है और पहले से ही एक्सेसरी मोड में है।
- एंड्रॉइड एक्सेसरी मोड का समर्थन करता है लेकिन यह एक्सेसरी मोड में नहीं है।
- एंड्रॉइड एक्सेसरी मोड का समर्थन नहीं करता है।
प्रारंभिक कनेक्शन के दौरान, एक्सेसरी को कनेक्टेड डिवाइस के यूएसबी डिवाइस डिस्क्रिप्टर के संस्करण, विक्रेता आईडी और उत्पाद आईडी की जांच करनी चाहिए। विक्रेता आईडी Google की आईडी ( 0x18D1
) से मेल खाना चाहिए। यदि डिवाइस पहले से एक्सेसरी मोड में है, तो उत्पाद आईडी 0x2D00
या 0x2D01
होनी चाहिए और एक्सेसरी अपने स्वयं के संचार प्रोटोकॉल का उपयोग करके बल्क ट्रांसफर एंडपॉइंट के माध्यम से डिवाइस के साथ संचार स्थापित कर सकती है (डिवाइस को एक्सेसरी मोड में शुरू करने की आवश्यकता नहीं है)।
नोट: 0x2D00
उन Android-संचालित उपकरणों के लिए आरक्षित है जो एक्सेसरी मोड का समर्थन करते हैं। 0x2D01
उन उपकरणों के लिए आरक्षित है जो एक्सेसरी मोड के साथ-साथ एंड्रॉइड डीबग ब्रिज (एडीबी) प्रोटोकॉल का समर्थन करते हैं, जो एडीबी के लिए दो बल्क एंडपॉइंट्स के साथ दूसरे इंटरफ़ेस को उजागर करता है। यदि आप किसी कंप्यूटर पर एक्सेसरी का अनुकरण कर रहे हैं, तो आप एक्सेसरी एप्लिकेशन को डीबग करने के लिए इन एंडपॉइंट्स का उपयोग कर सकते हैं। सामान्य तौर पर, इस इंटरफ़ेस का उपयोग तब तक न करें जब तक कि एक्सेसरी डिवाइस पर एडीबी को पासथ्रू लागू न कर दे।
यदि यूएसबी डिवाइस डिस्क्रिप्टर में संस्करण, विक्रेता आईडी या उत्पाद आईडी अपेक्षित मानों से मेल नहीं खाता है, तो एक्सेसरी यह निर्धारित नहीं कर सकती है कि डिवाइस एंड्रॉइड एक्सेसरी मोड का समर्थन करता है या नहीं। उपकरण समर्थन निर्धारित करने के लिए एक्सेसरी को डिवाइस को एक्सेसरी मोड (नीचे विस्तृत) में प्रारंभ करने का प्रयास करना चाहिए।
मुख्य बिंदु: USB एक्सेसरी को प्रारंभिक हैंडशेक पर एक हेडर भेजना चाहिए। शीर्षलेख में निर्माता, मॉडल और संस्करण शामिल हैं। हालांकि संस्करण एक वैकल्पिक फ़ील्ड है, यदि कोई एंड्रॉइड ऐप इंस्टॉल किया गया है जो केवल संस्करण से मेल खाता है, लेकिन एक्सेसरी एक संस्करण नहीं भेजता है, तो एंड्रॉइड 10 और उससे नीचे के एंड्रॉइड डिवाइस सिस्टम प्रक्रिया में एक अपवाद के कारण रीबूट हो जाएंगे।
एक्सेसरी मोड में प्रारंभ करने का प्रयास
यदि संस्करण, विक्रेता और उत्पाद आईडी एक्सेसरी मोड में Android-संचालित डिवाइस से मेल नहीं खाते हैं, तो एक्सेसरी यह निर्धारित नहीं कर सकती है कि डिवाइस एक्सेसरी मोड का समर्थन करता है (लेकिन अंदर नहीं है) या डिवाइस एक्सेसरी मोड का समर्थन नहीं करता है। ऐसा इसलिए हो सकता है क्योंकि डिवाइस जो एक्सेसरी मोड का समर्थन करते हैं (लेकिन एक्सेसरी मोड में नहीं हैं) प्रारंभ में डिवाइस निर्माता विक्रेता और उत्पाद आईडी की रिपोर्ट एओए विक्रेता और उत्पाद आईडी के बजाय करते हैं।
यह निर्धारित करने के लिए कि उपकरण उस मोड का समर्थन करता है या नहीं, एक्सेसरी को डिवाइस को एक्सेसरी मोड में प्रारंभ करने का प्रयास करना चाहिए:
- डिवाइस Android एक्सेसरी प्रोटोकॉल का समर्थन करता है या नहीं यह निर्धारित करने के लिए 51 नियंत्रण अनुरोध ("प्रोटोकॉल प्राप्त करें") भेजें। यदि डिवाइस प्रोटोकॉल का समर्थन करता है, तो यह एक गैर-शून्य संख्या देता है जो समर्थित प्रोटोकॉल संस्करण का प्रतिनिधित्व करता है। नियंत्रण अनुरोध निम्नलिखित विशेषताओं के साथ समापन बिंदु 0 पर है:
requestType: USB_DIR_IN | USB_TYPE_VENDOR request: 51 value: 0 index: 0 data: protocol version number (16 bits little endian sent from the device to the accessory)
- यदि डिवाइस समर्थित प्रोटोकॉल संस्करण लौटाता है, तो डिवाइस को स्ट्रिंग जानकारी की पहचान के साथ एक नियंत्रण अनुरोध भेजें। यह जानकारी डिवाइस को एक्सेसरी के लिए एक उपयुक्त एप्लिकेशन निर्धारित करने की अनुमति देती है (या यदि कोई उपयुक्त एप्लिकेशन मौजूद नहीं है तो उपयोगकर्ता को एक URL प्रस्तुत करें)। नियंत्रण अनुरोध निम्नलिखित विशेषताओं के साथ समापन बिंदु 0 (प्रत्येक स्ट्रिंग आईडी के लिए) पर है:
requestType: USB_DIR_OUT | USB_TYPE_VENDOR request: 52 value: 0 index: string ID data zero terminated UTF8 string sent from accessory to device
निम्नलिखित स्ट्रिंग आईडी समर्थित हैं, प्रत्येक स्ट्रिंग के लिए 256 बाइट्स के अधिकतम आकार के साथ (शून्य-समाप्त होना चाहिए
\0
)।manufacturer name: 0 model name: 1 description: 2 version: 3 URI: 4 serial number: 5
- डिवाइस को एक्सेसरी मोड में शुरू करने के लिए कहने के लिए एक नियंत्रण अनुरोध भेजें। नियंत्रण अनुरोध निम्नलिखित विशेषताओं के साथ समापन बिंदु 0 पर है:
requestType: USB_DIR_OUT | USB_TYPE_VENDOR request: 53 value: 0 index: 0 data: none
इन चरणों को पूरा करने के बाद, एक्सेसरी को कनेक्टेड यूएसबी डिवाइस को एक्सेसरी मोड में बस में फिर से पेश करने के लिए इंतजार करना चाहिए, फिर कनेक्टेड डिवाइसों की पुन: गणना करनी चाहिए। एल्गोरिदम विक्रेता और उत्पाद आईडी की जांच करके एक्सेसरी मोड समर्थन का निर्धारण करता है, जो सही होना चाहिए (उदाहरण के लिए, डिवाइस निर्माता की आईडी के बजाय Google के विक्रेता और उत्पाद आईडी के अनुरूप) यदि डिवाइस सफलतापूर्वक एक्सेसरी मोड में स्विच हो जाता है। यदि आईडी और संस्करण सही हैं, तो एक्सेसरी डिवाइस के साथ संचार स्थापित करने के लिए आगे बढ़ती है।
नोट: एओए वर्तमान में एक साथ एओए और एमटीपी कनेक्शन का समर्थन नहीं करता है। एओए से एमटीपी में स्विच करने के लिए, एक्सेसरी को पहले यूएसबी डिवाइस को डिस्कनेक्ट करना होगा (या तो भौतिक रूप से या विद्युत रूप से समकक्ष तरीके से) और फिर एमटीपी का उपयोग करके फिर से कनेक्ट करना होगा।
यदि कोई चरण विफल हो जाता है, तो एक्सेसरी निर्धारित करती है कि डिवाइस एंड्रॉइड एक्सेसरी मोड का समर्थन नहीं करता है और अगले डिवाइस के कनेक्ट होने की प्रतीक्षा करता है।
डिवाइस के साथ संचार स्थापित करें
यदि एक्सेसरी एक्सेसरी मोड में एंड्रॉइड-संचालित डिवाइस का पता लगाता है, तो एक्सेसरी डिवाइस के साथ संचार करने के लिए बल्क एंडपॉइंट प्राप्त करने के लिए डिवाइस इंटरफेस और एंडपॉइंट डिस्क्रिप्टर को क्वेरी कर सकता है।
इंटरफेस और बल्क एंडपॉइंट की संख्या उत्पाद आईडी पर निर्भर करती है। निम्न की उत्पाद आईडी वाला Android-संचालित उपकरण:
-
0x2D00
में इनपुट और आउटपुट संचार के लिए दो बल्क एंडपॉइंट के साथ एक इंटरफ़ेस है। -
0x2D01
में इनपुट और आउटपुट संचार के लिए दो बल्क एंडपॉइंट्स के साथ दो इंटरफेस हैं। पहला इंटरफ़ेस मानक संचार को संभालता है और दूसरा इंटरफ़ेस ADB संचार को संभालता है। इंटरफ़ेस का उपयोग करने के लिए, पहले बल्क इनपुट और आउटपुट एंडपॉइंट का पता लगाएं,SET_CONFIGURATION
(0x09
) डिवाइस अनुरोध के साथ डिवाइस कॉन्फ़िगरेशन को 1 के मान पर सेट करें, फिर एंडपॉइंट का उपयोग करके संचार करें।