Android ओपन ऐक्सेसरी 1.0

Android यूएसबी ऐक्सेसरी को Android Open Accessory (AOA) का पालन करना होगा प्रोटोकॉल, जो यह तय करता है कि ऐक्सेसरी कैसे पता लगाती है और कैसे एक Android डिवाइस हो सकता है. ऐक्सेसरी में नीचे दिए गए चरण होने चाहिए:

  1. कनेक्ट किए गए डिवाइस का इंतज़ार करें और उसका पता लगाएं.
  2. तय करें कि डिवाइस में ऐक्सेसरी मोड काम करता है या नहीं.
  3. अगर ज़रूरी हो, तो ऐक्सेसरी मोड में डिवाइस चालू करने की कोशिश करें.
  4. अगर डिवाइस पर एओए की सुविधा काम करती है, तो डिवाइस से संपर्क करें.

नीचे दिए सेक्शन में, इन चरणों को लागू करने का तरीका बताया गया है.

कनेक्ट होने का इंतज़ार करें और पता लगाएं डिवाइस

ऐक्सेसरीज़ को, कनेक्ट किए गए Android डिवाइसों के लिए लगातार जांच करनी चाहिए. जब डिवाइस कनेक्ट किया गया हो, तो ऐक्सेसरी को यह पता करना चाहिए कि ऐक्सेसरी मोड का इस्तेमाल किया जा सकता है.

पता लगाएं कि ऐक्सेसरी मोड की सुविधा काम करती है या नहीं

ध्यान दें: ऐक्सेसरी कनेक्ट करने के लिए, यूएसबी डीबग करने की ज़रूरत नहीं है, लेकिन डेवलपमेंट के दौरान ADB की ज़रूरत पड़ सकती है. जानकारी के लिए, यह देखें डीबग करने से जुड़ी ज़रूरी बातें.

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

  • Android ऐक्सेसरी मोड के साथ काम करता है और पहले से ही ऐक्सेसरी मोड में है.
  • Android ऐक्सेसरी मोड के साथ काम करता है, लेकिन यह ऐक्सेसरी मोड में काम नहीं करता.
  • Android ऐक्सेसरी मोड काम नहीं करता.

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

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

अगर यूएसबी डिवाइस के डिस्क्रिप्टर में मौजूद वर्शन, वेंडर आईडी या प्रॉडक्ट आईडी अनुमानित वैल्यू मैच करते हैं, तो ऐक्सेसरी यह तय नहीं कर सकती कि डिवाइस Android ऐक्सेसरी मोड. ऐक्सेसरी को डिवाइस को चालू करने की कोशिश करनी चाहिए चुनें कि डिवाइस किन डिवाइसों पर काम करता है. इसके बारे में ज़्यादा जानकारी नीचे दी गई है.

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

ऐक्सेसरी से शुरू करने की कोशिश करें मोड

अगर वर्शन, वेंडर, और प्रॉडक्ट आईडी, Android के साथ काम करने वाले किसी ऐप्लिकेशन से नहीं जुड़े हैं ऐक्सेसरी मोड में डिवाइस, यह तय नहीं कर सकता कि वह डिवाइस काम करता है या नहीं (लेकिन ऐक्सेसरी मोड में नहीं है) या अगर डिवाइस ऐक्सेसरी मोड के साथ काम नहीं करता है. यह ऐसा इसलिए हो सकता है, क्योंकि उन डिवाइसों पर ऐक्सेसरी मोड काम करता है जो ऐक्सेसरी मोड के साथ काम करते हैं, लेकिन मोड) से शुरुआत में डिवाइस मैन्युफ़ैक्चरर वेंडर और प्रॉडक्ट आईडी की रिपोर्ट के बजाय, एओए वेंडर और प्रॉडक्ट आईडी का इस्तेमाल किया जा सकता है.

यह पता लगाने के लिए कि ऐक्सेसरी को ऐक्सेसरी मोड में चालू करना चाहिए, अगर डिवाइस पर वह मोड काम करता है, तो:

  1. यह पता लगाने के लिए कि डिवाइस आपके डिवाइस पर है या नहीं, 51 कंट्रोल का अनुरोध ("प्रोटोकॉल पाएं") भेजें Android ऐक्सेसरी प्रोटोकॉल के साथ काम करता है. अगर डिवाइस प्रोटोकॉल की सुविधा देता है, तो यह काम करने वाले प्रोटोकॉल वर्शन को दिखाने वाला, शून्य के अलावा एक नंबर का रिस्पॉन्स देता है. कंट्रोल करने का अनुरोध, एंडपॉइंट 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 के वेंडर और प्रॉडक्ट आईडी के लिए) डिवाइस, ऐक्सेसरी मोड पर स्विच हो गया. अगर आईडी और वर्शन सही हैं, तो वह ऐक्सेसरी अब स्थापना में शामिल हो गई है डिवाइस से बातचीत करना.

ध्यान दें: फ़िलहाल, एओए का इस्तेमाल नहीं किया जा सकता एओए और MTP कनेक्शन के साथ एओए से एमटीपी पर स्विच करने के लिए, ऐक्सेसरी सबसे पहले यूएसबी डिवाइस को डिसकनेक्ट करना ज़रूरी है (चाहे वह वाकई में डिवाइस से या किसी इलेक्ट्रिकल तरीके से किया गया हो) समान तरीके से) और फिर MTP का उपयोग करके फिर से कनेक्ट करें.

अगर कोई भी चरण पूरा नहीं होता है, तो ऐक्सेसरी को यह पता चलता है कि वह डिवाइस इसके साथ काम नहीं करता Android ऐक्सेसरी मोड चालू है और अगले डिवाइस के कनेक्ट होने का इंतज़ार कर रहा है.

के साथ कम्यूनिकेशन सेट करें डिवाइस

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

इंटरफ़ेस और बल्क एंडपॉइंट की संख्या, प्रॉडक्ट आईडी के हिसाब से तय होती है. अगर आप Android-पावर्ड डिवाइस, जिसका प्रॉडक्ट आईडी है:

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