एंड्रॉइड ओपन एक्सेसरी 1.0

एंड्रॉइड यूएसबी एक्सेसरीज को एंड्रॉइड ओपन एक्सेसरी (एओए) प्रोटोकॉल का पालन करना होगा, जो परिभाषित करता है कि एक एक्सेसरी एंड्रॉइड-संचालित डिवाइस के साथ संचार का पता कैसे लगाता है और सेट करता है। सहायक उपकरण को निम्नलिखित कदम उठाने चाहिए:

  1. प्रतीक्षा करें और कनेक्टेड डिवाइस का पता लगाएं।
  2. डिवाइस का एक्सेसरी मोड समर्थन निर्धारित करें।
  3. डिवाइस को एक्सेसरी मोड में प्रारंभ करने का प्रयास करें (यदि आवश्यक हो)।
  4. यदि डिवाइस AOA का समर्थन करता है, तो डिवाइस के साथ संचार स्थापित करें।

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

प्रतीक्षा करें और कनेक्टेड डिवाइस का पता लगाएं

एक्सेसरीज़ को कनेक्टेड एंड्रॉइड-संचालित डिवाइसों की लगातार जांच करनी चाहिए। जब कोई डिवाइस कनेक्ट होता है, तो एक्सेसरी को यह निर्धारित करना चाहिए कि डिवाइस एक्सेसरी मोड का समर्थन करता है या नहीं।

सहायक मोड समर्थन निर्धारित करें

नोट: सहायक उपकरण कनेक्ट करने के लिए यूएसबी डिबगिंग की आवश्यकता नहीं है, लेकिन विकास के दौरान एडीबी आवश्यक हो सकता है। विवरण के लिए, डिबग विचार देखें।

जब कोई एंड्रॉइड-संचालित डिवाइस कनेक्ट होता है, तो यह तीन स्थितियों में से एक में हो सकता है:

  • एंड्रॉइड एक्सेसरी मोड का समर्थन करता है और पहले से ही एक्सेसरी मोड में है।
  • एंड्रॉइड एक्सेसरी मोड का समर्थन करता है लेकिन यह एक्सेसरी मोड में नहीं है।
  • एंड्रॉइड एक्सेसरी मोड का समर्थन नहीं करता।

प्रारंभिक कनेक्शन के दौरान, एक्सेसरी को कनेक्टेड डिवाइस के यूएसबी डिवाइस डिस्क्रिप्टर के संस्करण, विक्रेता आईडी और उत्पाद आईडी की जांच करनी चाहिए। विक्रेता आईडी Google की आईडी ( 0x18D1 ) से मेल खाना चाहिए। यदि डिवाइस पहले से ही एक्सेसरी मोड में है, तो उत्पाद आईडी 0x2D00 या 0x2D01 होनी चाहिए और एक्सेसरी अपने स्वयं के संचार प्रोटोकॉल का उपयोग करके बल्क ट्रांसफर एंडपॉइंट के माध्यम से डिवाइस के साथ संचार स्थापित कर सकता है (डिवाइस को एक्सेसरी मोड में शुरू करने की आवश्यकता नहीं है)।

नोट: 0x2D00 एंड्रॉइड-संचालित उपकरणों के लिए आरक्षित है जो एक्सेसरी मोड का समर्थन करते हैं। 0x2D01 उन उपकरणों के लिए आरक्षित है जो एक्सेसरी मोड के साथ-साथ एंड्रॉइड डिबग ब्रिज (एडीबी) प्रोटोकॉल का समर्थन करते हैं, जो एडीबी के लिए दो बल्क एंडपॉइंट के साथ एक दूसरा इंटरफ़ेस उजागर करता है। यदि आप किसी कंप्यूटर पर एक्सेसरी का अनुकरण कर रहे हैं तो आप एक्सेसरी एप्लिकेशन को डीबग करने के लिए इन एंडपॉइंट्स का उपयोग कर सकते हैं। सामान्य तौर पर, इस इंटरफ़ेस का उपयोग तब तक न करें जब तक कि एक्सेसरी डिवाइस पर एडीबी के लिए पासथ्रू लागू न कर दे।

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

मुख्य बिंदु: एक यूएसबी एक्सेसरी को प्रारंभिक हैंडशेक पर एक हेडर भेजना होगा। हेडर में निर्माता, मॉडल और संस्करण शामिल है। हालाँकि संस्करण एक वैकल्पिक फ़ील्ड है, यदि कोई एंड्रॉइड ऐप इंस्टॉल किया गया है जो केवल संस्करण से मेल खाता है, लेकिन एक्सेसरी संस्करण नहीं भेजता है, तो एंड्रॉइड 10 और उससे नीचे चलने वाले एंड्रॉइड डिवाइस सिस्टम प्रक्रिया में एक अपवाद के कारण रीबूट हो जाएंगे।

सहायक मोड में प्रारंभ करने का प्रयास करें

यदि संस्करण, विक्रेता और उत्पाद आईडी एक्सेसरी मोड में एंड्रॉइड-संचालित डिवाइस से मेल नहीं खाते हैं, तो एक्सेसरी यह निर्धारित नहीं कर सकती है कि डिवाइस एक्सेसरी मोड का समर्थन करता है (लेकिन अंदर नहीं है) या डिवाइस एक्सेसरी मोड का समर्थन नहीं करता है। ऐसा इसलिए हो सकता है क्योंकि जो डिवाइस एक्सेसरी मोड का समर्थन करते हैं (लेकिन एक्सेसरी मोड में नहीं हैं) प्रारंभ में एओए विक्रेता और उत्पाद आईडी के बजाय डिवाइस निर्माता विक्रेता और उत्पाद आईडी की रिपोर्ट करते हैं।

यह निर्धारित करने के लिए कि डिवाइस उस मोड का समर्थन करता है या नहीं, एक्सेसरी को डिवाइस को एक्सेसरी मोड में प्रारंभ करने का प्रयास करना चाहिए:

  1. यह निर्धारित करने के लिए कि डिवाइस एंड्रॉइड एक्सेसरी प्रोटोकॉल का समर्थन करता है या नहीं, 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)
    
  2. यदि डिवाइस एक समर्थित प्रोटोकॉल संस्करण लौटाता है, तो डिवाइस पर स्ट्रिंग जानकारी की पहचान के साथ एक नियंत्रण अनुरोध भेजें। यह जानकारी डिवाइस को एक्सेसरी के लिए एक उपयुक्त एप्लिकेशन निर्धारित करने की अनुमति देती है (या यदि कोई उपयुक्त एप्लिकेशन मौजूद नहीं है तो उपयोगकर्ता को एक यूआरएल प्रस्तुत करता है)। नियंत्रण अनुरोध निम्नलिखित विशेषताओं के साथ एंडपॉइंट 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
    
  3. डिवाइस को एक्सेसरी मोड में शुरू करने के लिए कहने के लिए एक नियंत्रण अनुरोध भेजें। नियंत्रण अनुरोध निम्नलिखित विशेषताओं के साथ समापन बिंदु 0 पर है:
    requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
    request:        53
    value:          0
    index:          0
    data:           none
    

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

नोट: AOA वर्तमान में एक साथ AOA और MTP कनेक्शन का समर्थन नहीं करता है। एओए से एमटीपी पर स्विच करने के लिए, एक्सेसरी को पहले यूएसबी डिवाइस को डिस्कनेक्ट करना होगा (या तो भौतिक रूप से या विद्युत समकक्ष तरीके से) और फिर एमटीपी का उपयोग करके फिर से कनेक्ट करना होगा।

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

डिवाइस के साथ संचार स्थापित करें

यदि एक्सेसरी एक्सेसरी मोड में एंड्रॉइड-संचालित डिवाइस का पता लगाता है, तो एक्सेसरी डिवाइस के साथ संचार करने के लिए बल्क एंडपॉइंट प्राप्त करने के लिए डिवाइस इंटरफ़ेस और एंडपॉइंट डिस्क्रिप्टर को क्वेरी कर सकता है।

इंटरफ़ेस और बल्क एंडपॉइंट की संख्या उत्पाद आईडी पर निर्भर करती है। एक Android-संचालित डिवाइस जिसकी उत्पाद आईडी है:

  • 0x2D00 में इनपुट और आउटपुट संचार के लिए दो बल्क एंडपॉइंट के साथ एक इंटरफ़ेस है।
  • 0x2D01 में इनपुट और आउटपुट संचार के लिए दो बल्क एंडपॉइंट वाले दो इंटरफेस हैं। पहला इंटरफ़ेस मानक संचार संभालता है और दूसरा इंटरफ़ेस ADB संचार संभालता है। इंटरफ़ेस का उपयोग करने के लिए, पहले बल्क इनपुट और आउटपुट एंडपॉइंट का पता लगाएं, डिवाइस कॉन्फ़िगरेशन को SET_CONFIGURATION ( 0x09 ) डिवाइस अनुरोध के साथ 1 के मान पर सेट करें, फिर एंडपॉइंट का उपयोग करके संचार करें।