USB HAL প্রয়োগ করুন

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

পূর্ববর্তী রিলিজগুলিতে, এই ডিভাইস-নির্দিষ্ট কনফিগারেশনগুলি ডিভাইস-নির্দিষ্ট init স্ক্রিপ্টের মাধ্যমে (প্রপার্টি ট্রিগার ব্যবহার করে) সম্পন্ন করা হতো। হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) ডিজাইনে স্থানান্তরিত হওয়ার ফলে একটি অনেক বেশি পরিচ্ছন্ন বাস্তবায়ন পাওয়া যায় যা এই সমস্যাগুলির সমাধান করে:

  1. কার্নেল sysfs নোডগুলিতে লেখার মতো অপারেশনগুলি ব্যর্থ হতে পারে, কিন্তু সেই ব্যর্থতা প্রপার্টি ট্রিগার সেটকারী ফ্রেমওয়ার্ক কোডে পৌঁছায় না। ফলে, ফ্রেমওয়ার্ক ভুলভাবে ধরে নেয় যে অপারেশনগুলি সফল হয়েছে, যদিও সেগুলি নীরবে ব্যর্থ হয়ে যায়।
  2. init স্ক্রিপ্টে সীমিত সংখ্যক অপারেশন সম্পাদন করা যায়।

অ্যান্ড্রয়েড ১২ রিলিজে নেটওয়ার্ক কন্ট্রোল মডেল (NCM) এবং এমন এপিআই কলের জন্য ইউএসবি গ্যাজেট এইচএএল (USB Gadget HAL) সাপোর্ট যোগ করা হয়েছে, যা এইচএএল ভার্সন নম্বর এবং ইউএসবি স্পিড উভয়ই রিটার্ন করে। ইউএসবি এইচএএল-এর মাধ্যমে উপলব্ধ এপিআই কলগুলো সম্পর্কে আরও তথ্যের জন্য, android.hardware.usb প্যাকেজের সারাংশ দেখুন।

এইচএএল এবং ট্রেবল

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

অ্যান্ড্রয়েড ৮.০-তে প্রবর্তিত ট্রেবল মডেলের অধীনে, সমস্ত HAL লেয়ার সিস্টেম সার্ভিস থেকে বিচ্ছিন্ন থাকে এবং সেগুলোকে তাদের নিজস্ব নেটিভ ডেমন-এ চলতে হয়। এর ফলে একটি স্বতন্ত্র USB ডেমন রাখার প্রয়োজনীয়তা দূর হয়, কারণ HAL লেয়ারটি চমৎকারভাবে একটি USB ডেমন হিসেবেও কাজ করে।

ডিফল্ট HAL ইমপ্লিমেন্টেশনটি অ্যান্ড্রয়েড ৮.০-এর পূর্ববর্তী সমস্ত ডিভাইসের কাজ পরিচালনা করে। তাই, অ্যান্ড্রয়েড ৮.০-এর পূর্ববর্তী ডিভাইসগুলোর জন্য কোনো ডিভাইস-নির্দিষ্ট কাজ করার প্রয়োজন হয় না। অ্যান্ড্রয়েড ৮.০ ইউএসবি পোর্টগুলোর অবস্থা জানতে এবং ডেটা রোল ও পাওয়ার রোল অদলবদল করার জন্য HAL ইন্টারফেস ব্যবহার করে।

বাস্তবায়ন

অ্যান্ড্রয়েড ৮.০-তে চালু হওয়া প্রতিটি ডিভাইসে নতুন ইউএসবি এইচএএল (USB HAL) ইন্টারফেসটি প্রয়োগ করতে হবে। ডিফল্ট ইমপ্লিমেন্টেশনটি অ্যান্ড্রয়েড ৮.০-এর পূর্ববর্তী ডিভাইসগুলোর জন্য উপযুক্ত হওয়া উচিত। যদি ডিভাইসটি টাইপ-সি পোর্টের অবস্থা জানানোর জন্য dual_role_usb ক্লাস ব্যবহার করে, তবে ডিফল্ট ইমপ্লিমেন্টেশনটিই যথেষ্ট। টাইপ-সি নোডগুলোর মালিকানা সিস্টেমে হস্তান্তর করার জন্য ডিভাইস-নির্দিষ্ট ইউএসবি স্ক্রিপ্টগুলোতে সামান্য কিছু পরিবর্তনের প্রয়োজন হতে পারে।