Android USB অ্যাক্সেসরিকে অবশ্যই Android ওপেন অ্যাক্সেসরি (AOA) প্রোটোকল মেনে চলতে হবে, যা কোনও অ্যাক্সেসরি কীভাবে Android-চালিত ডিভাইসের সাথে যোগাযোগ শনাক্ত ও সেট-আপ করে তা নির্ধারণ করে। অ্যাক্সেসরিকে নিম্নলিখিত ধাপগুলি অনুসরণ করতে হবে:
- কানেক্ট করা ডিভাইসের জন্য অপেক্ষা করুন এবং সেটি শনাক্ত করুন।
- ডিভাইসের অ্যাক্সেসরি মোড সাপোর্ট করে কিনা তা নির্ধারণ করুন।
- অ্যাক্সেসরি মোডে ডিভাইস চালু করার চেষ্টা করুন (প্রয়োজন হলে)।
- ডিভাইসে AOA কাজ করলে, ডিভাইসের সাথে যোগাযোগ স্থাপন করুন।
এইসব ধাপ কীভাবে প্রয়োগ করতে হয় তা নিম্নলিখিত বিভাগ থেকে জানুন।
কানেক্ট করা ডিভাইসের জন্য অপেক্ষা করুন এবং তা শনাক্ত করুন ডিভাইস
অ্যাক্সেসরিকে ক্রমাগত কানেক্ট করা Android-পরিচালিত ডিভাইস চেক করতে হবে। কোনও ডিভাইস কানেক্ট করা হলে, অ্যাক্সেসরিকে নির্ধারণ করতে হবে যে ডিভাইসটি অ্যাক্সেসরি মোড সাপোর্ট করে কিনা।
অ্যাক্সেসরি মোড কাজ করে কিনা তা নির্ধারণ করা
মনে রাখবেন: অ্যাক্সেসরি কানেক্ট করার জন্য USB ডিবাগিংয়ের প্রয়োজন নেই, তবে ডেভেলপমেন্টের সময় ADB-র প্রয়োজন হতে পারে। আরও বিবরণের জন্য, ডিবাগ করার সময় বিবেচ্য বিষয় দেখুন।
Android-পরিচালিত ডিভাইস কানেক্ট করলে, এটি তিনটি অবস্থার মধ্যে একটিতে থাকতে পারে:
- Android অ্যাক্সেসরি মোড কাজ করে এবং আগেই অ্যাক্সেসরি মোডে আছে।
- Android অ্যাক্সেসরি মোডে কাজ করে কিন্তু এটি অ্যাক্সেসরি মোডে নেই।
- Android অ্যাক্সেসরি মোডে কাজ করে না।
প্রাথমিক কানেকশনের সময়, অ্যাক্সেসরিকে কানেক্ট করা ডিভাইসের USB ডিভাইস ডেসক্রিপ্টরের ভার্সন, ভেন্ডর আইডি,
এবং প্রোডাক্ট আইডি চেক করতে হবে। ভেন্ডর আইডি
Google-এর আইডির (0x18D1) সাথে মিলতে হবে। ডিভাইসটি আগে থেকেই
অ্যাক্সেসরি মোডে থাকলে, প্রোডাক্ট আইডি 0x2D00 বা
0x2D01 হতে হবে এবং অ্যাক্সেসরিটি নিজের কমিউনিকেশন
প্রোটোকল ব্যবহার করে বাল্ক ট্রান্সফার এন্ডপয়েন্টের মাধ্যমে
ডিভাইসের সাথে কমিউনিকেশন স্থাপন করতে
পারবে (ডিভাইসটিকে অ্যাক্সেসরি মোডে চালু করার প্রয়োজন নেই)।
মনে রাখবেন: 0x2D00 হল
অ্যাক্সেসরি মোড কাজ করে এমন Android-পরিচালিত ডিভাইসের জন্য সংরক্ষিত। 0x2D01 হল
অ্যাক্সেসরি মোড ও Android Debug
Bridge (ADB) প্রোটোকল কাজ করে এমন ডিভাইসের জন্য রিজার্ভ করা, যা ADB-এর জন্য দুটি বাল্ক এন্ডপয়েন্ট সহ
সেকেন্ড ইন্টারফেস এক্সপোজ করে। আপনি যদি কম্পিউটারে অ্যাক্সেসরি সিমুলেট করেন, তাহলে অ্যাক্সেসরি অ্যাপ্লিকেশন
ডিবাগ করার জন্য এইসব এন্ডপয়েন্ট ব্যবহার করতে পারবেন। সাধারণত, অ্যাক্সেসরি ডিভাইসে ADB-তে পাসথ্রু প্রয়োগ না করলে, এই
ইন্টারফেস ব্যবহার করবেন না।
USB ডিভাইস ডেসক্রিপ্টরে ভার্সন, ভেন্ডর আইডি বা প্রোডাক্ট আইডি প্রত্যাশিত ভ্যালুর সাথে না মিললে, ডিভাইসটি Android অ্যাক্সেসরি মোড সাপোর্ট করে কিনা তা অ্যাক্সেসরি নির্ধারণ করতে পারে না। ডিভাইস সাপোর্ট করে কিনা তা নির্ধারণ করতে, অ্যাক্সেসরিকে অ্যাক্সেসরি মোডে (নিচে বিস্তারিত দেওয়া আছে) ডিভাইস চালু করার চেষ্টা করতে হবে।
গুরুত্বপূর্ণ: প্রাথমিক হ্যান্ডশেক করার সময় USB অ্যাক্সেসরিকে অবশ্যই একটি হেডার পাঠাতে হবে। হেডারে প্রস্তুতকারক, মডেল ও ভার্সন আছে। যদিও ভার্সন হল একটি ঐচ্ছিক ফিল্ড, তবে যদি এমন কোনও Android অ্যাপ ইনস্টল করা থাকে যা শুধুমাত্র ভার্সনের সাথে ম্যাচ করে, কিন্তু অ্যাক্সেসরি কোনও ভার্সন না পাঠালে, Android 10 এবং এর আগের যেকোনও ভার্সনে চলমান Android ডিভাইস সিস্টেম প্রসেসে একটি ব্যতিক্রমের কারণে রিবুট হবে।
অ্যাক্সেসরি মোডে চালু করার চেষ্টা করুন
ভার্সন, ভেন্ডর এবং প্রোডাক্ট আইডি যদি অ্যাক্সেসরি মোডে Android-চালিত ডিভাইসের সাথে সামঞ্জস্যপূর্ণ না হয়, তাহলে অ্যাক্সেসরি নির্ধারণ করতে পারে না যে ডিভাইসটি অ্যাক্সেসরি মোড সমর্থন করে (কিন্তু অ্যাক্সেসরি মোডে নেই) নাকি ডিভাইসটি অ্যাক্সেসরি মোড সমর্থন করে না। এটি হতে পারে কারণ অ্যাক্সেসরি মোড কাজ করে এমন ডিভাইস (কিন্তু অ্যাক্সেসরি মোডে নেই) প্রথমে AOA ভেন্ডর ও প্রোডাক্ট আইডির পরিবর্তে ডিভাইস প্রস্তুতকারক ভেন্ডর ও প্রোডাক্ট আইডি রিপোর্ট করে।
ডিভাইসটি সেই মোডে কাজ করে কিনা তা নির্ধারণ করতে অ্যাক্সেসরিকে অ্যাক্সেসরি মোডে ডিভাইসটি চালু করার চেষ্টা করতে হবে:
- ডিভাইসটি Android অ্যাক্সেসরি প্রোটোকল মেনে চলে কিনা তা নির্ধারণ করতে, একটি ৫১ কন্ট্রোল অনুরোধ ("প্রোটোকল পান") পাঠান।
ডিভাইসটি প্রোটোকল সমর্থন করলে,
এটি একটি নন-জিরো নম্বর রিটার্ন করে যা সমর্থিত প্রোটোকল ভার্সনকে উপস্থাপন করে।
নিম্নলিখিত বৈশিষ্ট্য সহ এন্ডপয়েন্ট ০-এ কন্ট্রোল অনুরোধ আছে:
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
নিম্নলিখিত স্ট্রিং আইডি কাজ করে, প্রতিটি স্ট্রিংয়ের সর্বাধিক সাইজ ২৫৬ বাইট (
\0দিয়ে শেষ হতে হবে)।manufacturer name: 0 model name: 1 description: 2 version: 3 URI: 4 serial number: 5
- অ্যাক্সেসরি মোডে ডিভাইস চালু করার জন্য কন্ট্রোল অনুরোধ পাঠান। এইসব বৈশিষ্ট্য সহ
কন্ট্রোল অনুরোধটি এন্ডপয়েন্ট ০-এ আছে:
requestType: USB_DIR_OUT | USB_TYPE_VENDOR request: 53 value: 0 index: 0 data: none
এইসব ধাপ সম্পূর্ণ করার পরে, অ্যাক্সেসরি মোডে বাসে নিজেকে আবার পরিচয় করিয়ে দেওয়ার জন্য কানেক্ট করা USB ডিভাইসের জন্য অ্যাক্সেসরিকে অপেক্ষা করতে হবে, তারপর কানেক্ট করা ডিভাইস আবার গণনা করতে হবে। অ্যালগরিদম অ্যাক্সেসরি মোড সাপোর্ট নির্ধারণ করে ভেন্ডর এবং প্রোডাক্ট আইডি চেক করার মাধ্যমে, যা সঠিক হতে হবে (যেমন, ডিভাইসটি সফলভাবে অ্যাক্সেসরি মোডে স্যুইচ করলে, ডিভাইস প্রস্তুতকারকের আইডির পরিবর্তে Google-এর ভেন্ডর এবং প্রোডাক্ট আইডির সাথে মিল থাকতে হবে)। আইডি ও ভার্সন সঠিক হলে, অ্যাক্সেসরি ডিভাইসের সাথে কানেকশন তৈরি করার দিকে এগিয়ে যায়।
মনে রাখবেন: AOA বর্তমানে একই সাথে AOA ও MTP কানেকশন কাজ করে না। AOA থেকে MTP-তে পরিবর্তন করতে, অ্যাক্সেসরিকে প্রথমে USB ডিভাইস ডিসকানেক্ট করতে হবে (ফিজিক্যালি বা ইলেকট্রিক্যালি একই রকম উপায়ে) এবং তারপর MTP ব্যবহার করে আবার কানেক্ট করতে হবে।
কোনও ধাপ সম্পূর্ণ না হলে, অ্যাক্সেসরি নির্ধারণ করে যে ডিভাইসটি Android অ্যাক্সেসরি মোড সমর্থন করে না এবং পরবর্তী ডিভাইস কানেক্ট করার জন্য অপেক্ষা করে।
ডিভাইসের সাথে কানেক্ট করা
অ্যাক্সেসরি মোডে অ্যাক্সেসরি যদি Android-পরিচালিত ডিভাইস শনাক্ত করে, তাহলে ডিভাইসের সাথে যোগাযোগ করার জন্য বাল্ক এন্ডপয়েন্ট পেতে অ্যাক্সেসরি ডিভাইসের ইন্টারফেস ও এন্ডপয়েন্ট ডেসক্রিপ্টর কোয়েরি করতে পারে।
ইন্টারফেস ও বাল্ক এন্ডপয়েন্টের সংখ্যা প্রোডাক্ট আইডির উপর নির্ভর করে। এই প্রোডাক্ট আইডি সহ Android-পরিচালিত ডিভাইস:
0x2D00-এর একটি ইন্টারফেস আছে যাতে ইনপুট ও আউটপুট কমিউনিকেশনের জন্য দুটি বাল্ক এন্ডপয়েন্ট আছে।0x2D01-এর দুটি ইন্টারফেস আছে, যার প্রতিটিতে ইনপুট ও আউটপুট কমিউনিকেশনের জন্য দুটি করে বাল্ক এন্ডপয়েন্ট আছে। প্রথম ইন্টারফেস স্ট্যান্ডার্ড কমিউনিকেশন ম্যানেজ করে এবং দ্বিতীয় ইন্টারফেস ADB কমিউনিকেশন ম্যানেজ করে। ইন্টারফেস ব্যবহার করতে, প্রথম বাল্ক ইনপুট ও আউটপুট এন্ডপয়েন্ট খুঁজে নিন,SET_CONFIGURATION(0x09) ডিভাইস অনুরোধের মাধ্যমে ডিভাইস কনফিগারেশন ১-এ সেট করুন, তারপর এন্ডপয়েন্ট ব্যবহার করে যোগাযোগ করুন।