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

অ্যান্ড্রয়েড 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

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

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

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

বাস্তবায়ন

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

,

অ্যান্ড্রয়েড 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

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

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

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

বাস্তবায়ন

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