USB HAL প্রয়োগ করা

Android 8.0 রিলিজ, আরও ভাল কনফিগারেশন এবং কোডের নির্ভরযোগ্যতার জন্য, USB কমান্ডের হ্যান্ডলিংকে init স্ক্রিপ্ট থেকে সরিয়ে একটি নেটিভ USB ডেমন-এ নিয়ে যায়। গ্যাজেট ফাংশন কনফিগারেশনের জন্য, ডিভাইস-নির্দিষ্ট গ্যাজেট অপারেশন সম্পাদন করতে init স্ক্রিপ্ট (প্রপার্টি ট্রিগার) ব্যবহার করা হয়।

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

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

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

HAL ও Treble

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

Android 8.0-তে চালু করা Treble মডেলের অধীনে, সমস্ত HAL-কে সিস্টেম পরিষেবা থেকে আলাদা করা হয় এবং সেগুলিকে নিজস্ব নেটিভ ডেমনে চালাতে হয়। এর ফলে এক্সক্লুসিভ USB ডেমন থাকার প্রয়োজনীয়তা আর থাকে না, কারণ HAL লেয়ার USB ডেমন হিসেবে সুন্দরভাবে কাজ করে।

ডিফল্ট HAL ইমপ্লিমেন্টেশন Android 8.0-এর আগের সব ডিভাইস ম্যানেজ করে। তাই, Android 8.0-এর আগের ভার্সনের ডিভাইসের জন্য কোনও ডিভাইস-নির্দিষ্ট কাজ থাকবে না। USB পোর্ট এবং ডেটা রোল ও পাওয়ার রোল সোয়াপের স্ট্যাটাস কোয়েরি করতে Android 8.0 HAL ইন্টারফেস ব্যবহার করে।

প্রয়োগ

Android 8.0-এ লঞ্চ করা প্রতিটি ডিভাইসে নতুন USB HAL ইন্টারফেস প্রয়োগ করতে হবে। ডিফল্ট ইমপ্লিমেন্টেশন Android 8.0-এর আগের ভার্সনের ডিভাইসগুলির ক্ষেত্রে কাজ করবে। ডিভাইসটি টাইপ-সি পোর্ট স্ট্যাটাস রিপোর্ট করার জন্য dual_role_usb ক্লাস ব্যবহার করলে, ডিফল্ট ইমপ্লিমেন্টেশনই যথেষ্ট। সিস্টেমে টাইপ-সি নোডের মালিকানা ট্রান্সফার করার জন্য ডিভাইস-নির্দিষ্ট USB স্ক্রিপ্টে সামান্য পরিবর্তন করতে হতে পারে।