অ্যান্ড্রয়েড ওপেন অ্যাকসেসরি প্রোটোকল 1.0

অ্যান্ড্রয়েড ইউএসবি আনুষাঙ্গিকগুলি অবশ্যই অ্যান্ড্রয়েড ওপেন অ্যাকসেসরি (এওএ) প্রোটোকলটি মেনে চলতে হবে, যা সংজ্ঞায়িত করে যে কীভাবে একটি অ্যাকসেসরিজ একটি অ্যান্ড্রয়েড চালিত ডিভাইসের সাথে যোগাযোগ সনাক্ত করে এবং সেটআপ করে। আনুষাঙ্গিকগুলির নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করা উচিত:

  1. সংযুক্ত ডিভাইসটির জন্য অপেক্ষা করুন এবং সনাক্ত করুন।
  2. ডিভাইসের অ্যাকসেসরিজ মোড সমর্থন নির্ধারণ করুন।
  3. অ্যাকসেসরি মোডে ডিভাইসটি শুরু করার চেষ্টা করুন (যদি প্রয়োজন হয়)।
  4. ডিভাইসটি যদি এওএ সমর্থন করে তবে ডিভাইসের সাথে যোগাযোগ স্থাপন করুন।

নিম্নলিখিত পদক্ষেপে এই পদক্ষেপগুলি কীভাবে প্রয়োগ করা যায় তা ব্যাখ্যা করা হয়েছে।

সংযুক্ত ডিভাইসগুলির জন্য অপেক্ষা করুন এবং সনাক্ত করুন

আনুষাঙ্গিকগুলি সংযুক্ত অ্যান্ড্রয়েড-চালিত ডিভাইসগুলির জন্য অবিচ্ছিন্নভাবে পরীক্ষা করা উচিত। যখন কোনও ডিভাইস সংযুক্ত থাকে, ডিভাইসটি অ্যাকসেসরিজ মোড সমর্থন করে কিনা তা আনুষাঙ্গিকটি নির্ধারণ করে।

অ্যাকসেসরিজ মোড সমর্থন নির্ধারণ করুন

যখন কোনও অ্যান্ড্রয়েড চালিত ডিভাইস সংযুক্ত হয়, তখন এটি তিনটি অবস্থার মধ্যে একটিতে থাকতে পারে:

  • অ্যান্ড্রয়েড অ্যাকসেসরি মোড সমর্থন করে এবং ইতিমধ্যে আনুষঙ্গিক মোডে রয়েছে।
  • অ্যান্ড্রয়েড অ্যাকসেসরি মোড সমর্থন করে তবে এটি আনুষঙ্গিক মোডে নেই।
  • অ্যান্ড্রয়েড অ্যাকসেসরি মোড সমর্থন করে না।

প্রাথমিক সংযোগের সময়, আনুষঙ্গিক সংযুক্ত ডিভাইসের ইউএসবি ডিভাইস বর্ণনাকারীর সংস্করণ, বিক্রেতা আইডি এবং পণ্য আইডি পরীক্ষা করা উচিত। বিক্রেতার আইডি গুগলের আইডি ( 0x18D1 ) এর সাথে মেলে। যদি ডিভাইসটি ইতিমধ্যে আনুষঙ্গিক মোডে থাকে তবে পণ্যের আইডি 0x2D00 বা 0x2D01 হওয়া উচিত এবং আনুষাঙ্গিক তার নিজস্ব যোগাযোগ প্রোটোকল ব্যবহার করে বাল্ক ট্রান্সফার এন্ডপয়েন্টগুলির মাধ্যমে ডিভাইসটির সাথে যোগাযোগ স্থাপন করতে পারে (ডিভাইসটি অ্যাকসেসরি মোডে শুরু করার প্রয়োজন হবে না)।

দ্রষ্টব্য: 0x2D00 অ্যান্ড্রয়েড চালিত ডিভাইসের জন্য সংরক্ষিত যা অ্যাকসেসরি মোড সমর্থন করে। 0x2D01 ডিভাইসগুলির জন্য সংরক্ষিত থাকে যা অ্যাকসেসরি মোড পাশাপাশি অ্যান্ড্রয়েড ডিবাগ ব্রিজ (এডিবি) প্রোটোকল সমর্থন করে যা এডিবি'র জন্য দুটি বাল্ক এন্ডপয়েন্টস সহ একটি দ্বিতীয় ইন্টারফেস প্রকাশ করে। আপনি যদি কম্পিউটারে অ্যাকসেসরিটি সিমুলেটেড করে থাকেন তবে অ্যাকসেসরি অ্যাপ্লিকেশনটি ডিবাগ করার জন্য আপনি এই এন্ডপয়েন্টগুলি ব্যবহার করতে পারেন। সাধারণভাবে, অ্যাক্সেসরি ডিভাইসে ADB তে কোনও পাস্ত্রথ্র প্রয়োগ না করে এই ইন্টারফেসটি ব্যবহার করবেন না।

যদি ইউএসবি ডিভাইস বর্ণনাকারীর সংস্করণ, বিক্রেতা আইডি বা পণ্য আইডি প্রত্যাশিত মানগুলির সাথে মেলে না, ডিভাইসটি অ্যান্ড্রয়েড অ্যাকসেসরি মোড সমর্থন করে কিনা অ্যাকসেসরিটি নির্ধারণ করতে পারে না। অ্যাকসেসরিটির ডিভাইস সমর্থন নির্ধারণ করতে আনুষঙ্গিক মোডে (নীচে বিস্তারিত) ডিভাইসটি শুরু করার চেষ্টা করা উচিত।

মূল বিষয়: একটি ইউএসবি অ্যাকসেসরির প্রাথমিক হ্যান্ডশেকের পরে অবশ্যই একটি শিরোনাম প্রেরণ করতে হবে। শিরোনামে প্রস্তুতকারক, মডেল এবং সংস্করণ রয়েছে। সংস্করণটি একটি fieldচ্ছিক ক্ষেত্র হলেও, যদি কোনও অ্যান্ড্রয়েড অ্যাপ ইনস্টল করা থাকে যা কেবল সংস্করণে মেলে তবে আনুষঙ্গিক কোনও সংস্করণ প্রেরণ করে না, সিস্টেম প্রসেসে ফেলে দেওয়া ব্যতিক্রমের কারণে অ্যান্ড্রয়েড 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. ডিভাইসটি যদি কোনও সমর্থিত প্রোটোকল সংস্করণ দেয় তবে ডিভাইসে স্ট্রিং তথ্য সনাক্তকরণের সাথে একটি নিয়ন্ত্রণ অনুরোধ প্রেরণ করুন। এই তথ্যটি ডিভাইসটিকে অ্যাকসেসরিজের জন্য উপযুক্ত অ্যাপ্লিকেশন নির্ধারণ করতে অনুমতি দেয় (বা কোনও উপযুক্ত অ্যাপ্লিকেশন উপস্থিত না থাকলে ব্যবহারকারীকে একটি 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 বাইটের আকার সহ সমর্থিত (অবশ্যই zero \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
    

এই পদক্ষেপগুলি শেষ করার পরে, অ্যাকসেসরিটির জন্য সংযুক্ত ইউএসবি ডিভাইসটি অ্যাকসেসরি মোডে বাসে পুনরায় পরিচয় করানোর জন্য অপেক্ষা করা উচিত, তারপরে সংযুক্ত ডিভাইসগুলির পুনরায় গণনা করা উচিত। অ্যালগরিদম বিক্রেতা এবং পণ্য আইডি পরীক্ষা করে আনুষঙ্গিক মোড সমর্থন নির্ধারণ করে, যা সঠিক হওয়া উচিত (উদাহরণস্বরূপ, ডিভাইসটি অ্যাকসেসরি মোডে সফলভাবে স্যুইচ করলে ডিভাইস প্রস্তুতকারকের আইডির পরিবর্তে গুগলের বিক্রেতা এবং পণ্য আইডির সাথে মিল থাকে)। আইডি এবং সংস্করণটি সঠিক হলে অ্যাকসেসরিজটি ডিভাইসটির সাথে যোগাযোগ স্থাপনে সরে যায়।

দ্রষ্টব্য: এওএ বর্তমানে একসাথে এওএ এবং এমটিপি সংযোগগুলি সমর্থন করে না। এওএ থেকে এমটিপিতে স্যুইচ করতে, আনুষাঙ্গিকটি প্রথমে ইউএসবি ডিভাইসটি সংযোগ বিচ্ছিন্ন করতে হবে (হয় শারীরিকভাবে বা বৈদ্যুতিক সমতুল্য পদ্ধতিতে) এবং তারপরে এমটিপি ব্যবহার করে পুনরায় সংযোগ করতে হবে।

কোনও পদক্ষেপ ব্যর্থ হলে অ্যাকসেসরিটি ডিভাইসটি অ্যান্ড্রয়েড অ্যাকসেসরি মোড সমর্থন করে না এবং পরবর্তী ডিভাইসটি সংযোগ স্থাপনের জন্য অপেক্ষা করে না তা নির্ধারণ করে।

ডিভাইসের সাথে যোগাযোগ স্থাপন করুন

যদি অ্যাকসেসরিটি অ্যাকসেসরিয় মোডে অ্যান্ড্রয়েড চালিত ডিভাইস সনাক্ত করে, অ্যাকসেসরিটি ডিভাইসের সাথে যোগাযোগের জন্য বাল্ক এন্ডপয়েন্টগুলি পেতে ডিভাইস ইন্টারফেস এবং শেষ পয়েন্ট বর্ণনাকারীদের জিজ্ঞাসা করতে পারে।

ইন্টারফেসের সংখ্যা এবং বাল্ক এন্ডপয়েন্টগুলি প্রোডাক্ট আইডির উপর নির্ভর করে। এর একটি আইডি সহ একটি Android- চালিত ডিভাইস:

  • 0x2D00 এর ইনপুট এবং আউটপুট যোগাযোগের জন্য দুটি বাল্ক এন্ডপয়েন্টগুলির সাথে একটি ইন্টারফেস রয়েছে।
  • 0x2D01 এর ইনপুট এবং আউটপুট যোগাযোগের জন্য দুটি বাল্ক এন্ডপয়েন্ট সহ দুটি ইন্টারফেস রয়েছে। প্রথম ইন্টারফেস স্ট্যান্ডার্ড যোগাযোগ পরিচালনা করে এবং দ্বিতীয় ইন্টারফেসটি এডিবি যোগাযোগ পরিচালনা করে। একটি ইন্টারফেস ব্যবহার করতে, প্রথম বাল্ক ইনপুট এবং আউটপুট SET_CONFIGURATION , একটি SET_CONFIGURATION ( 0x09 ) ডিভাইসের অনুরোধের সাহায্যে ডিভাইস কনফিগারেশনটি 1 এর SET_CONFIGURATION সেট করুন, তারপরে শেষ পয়েন্টগুলি ব্যবহার করে যোগাযোগ করুন।