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

Android USB सहायक उपकरण को Android Open Accessory (AOA) प्रोटोकॉल का पालन करना चाहिए, जो परिभाषित करता है कि कैसे एक सहायक Android-संचालित डिवाइस के साथ संचार का पता लगाता है और सेट करता है। सहायक उपकरण को निम्नलिखित चरणों का पालन करना चाहिए:

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

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

प्रतीक्षा करें और जुड़े उपकरणों का पता लगाएं

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

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

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

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

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

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

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

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

मुख्य बिंदु: एक यूएसबी एक्सेसरी को शुरुआती हैंडशेक पर हेडर भेजना चाहिए। शीर्ष लेख में निर्माता, मॉडल और संस्करण शामिल हैं। हालांकि संस्करण एक वैकल्पिक फ़ील्ड है, अगर एक एंड्रॉइड ऐप इंस्टॉल किया गया है जो केवल संस्करण से मेल खाता है, लेकिन एक्सेसरी एक संस्करण नहीं भेजती है, एंड्रॉइड 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
    

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

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

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

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

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

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

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