তাপ প্রশমন

অ্যান্ড্রয়েড ফ্রেমওয়ার্কের সাহায্যে, ডিভাইস নির্মাতা এবং অ্যাপ ডেভেলপাররা থার্মাল ডেটা ব্যবহার করে একটি ডিভাইস অতিরিক্ত গরম হতে শুরু করলে ব্যবহারকারীর অভিজ্ঞতা (UX) সামঞ্জস্যপূর্ণ রাখতে পারেন। উদাহরণস্বরূপ, যখন একটি সিস্টেম থার্মাল স্ট্রেসের শিকার হয়, তখন jobscheduler কাজগুলোর গতি কমিয়ে দেওয়া হয় এবং প্রয়োজনে একটি ফ্রেমওয়ার্ক থার্মাল শাটডাউন শুরু করা হয়। PowerManager ক্লাসে নিবন্ধিত একটি কলব্যাকের মাধ্যমে থার্মাল-স্ট্রেস নোটিফিকেশন পাওয়া অ্যাপগুলো সুন্দরভাবে তাদের ইউজার এক্সপেরিয়েন্স (UX) সামঞ্জস্য করতে পারে।

থার্মাল এইচএএল

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

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

এছাড়াও, থার্মাল এইচএএল ২.০ একাধিক ক্লায়েন্টকে থার্মাল সেন্সরের রিডিং এবং সংশ্লিষ্ট তীব্রতার স্তর প্রদান করে, যা তাপীয় চাপ নির্দেশ করে। নিচের চিত্রে অ্যান্ড্রয়েড সিস্টেম ইউআই থেকে দুটি সতর্কীকরণ বার্তা দেখানো হয়েছে। এই বার্তাগুলো তখন প্রদর্শিত হয় যখন যথাক্রমে USB_PORT এবং SKIN সেন্সরের জন্য IThermalEventListener কলব্যাক ইন্টারফেস THERMAL_STATUS_EMERGENCY তীব্রতার স্তরে পৌঁছায়।

অতিরিক্ত গরম হওয়ার সতর্কতা।

চিত্র ১. অতিরিক্ত গরম হওয়ার সতর্কতা।

IThermal HAL- এর মাধ্যমে বিভিন্ন ধরণের থার্মাল সেন্সরের বর্তমান তাপমাত্রা সংগ্রহ করা হয়। প্রতিটি ফাংশন কল SUCCESS বা FAILURE এর একটি স্ট্যাটাস ভ্যালু রিটার্ন করে। যদি SUCCESS রিটার্ন করা হয়, তবে প্রক্রিয়াটি চলতে থাকে। যদি FAILURE রিটার্ন করা হয়, তবে একটি এরর মেসেজ, যা অবশ্যই মানুষের পাঠযোগ্য হতে হবে, status.debugMessage এ পাঠানো হয়।

বর্তমান তাপমাত্রা ফেরত দেয় এমন একটি পোলিং ইন্টারফেস হওয়ার পাশাপাশি, আপনি ফ্রেমওয়ার্কের থার্মাল সার্ভিসের মতো থার্মাল HAL ক্লায়েন্টদের কলব্যাক ইন্টারফেসের সাথে IThermalChangedCallback (HIDL, Android 10 থেকে 13) অথবা IThermalChangedCallback (AIDL, Android 14 এবং উচ্চতর সংস্করণ) ব্যবহার করতে পারেন। উদাহরণস্বরূপ, সিভিয়ারিটি-চেঞ্জড ইভেন্টগুলো রেজিস্টার বা আনরেজিস্টার করতে RegisterIThermalChangedCallback এবং UnregisterIThermalChangedCallback ব্যবহার করুন। যদি কোনো নির্দিষ্ট সেন্সরের থার্মাল সিভিয়ারিটি পরিবর্তিত হয়, notifyThrottling থার্মাল-ইভেন্ট লিসেনারদের কাছে একটি থার্মাল থ্রটলিং ইভেন্ট কলব্যাক পাঠায়।

থার্মাল সেন্সর তথ্যের পাশাপাশি, getCurrentCoolingDevices এ প্রতিকার করা কুলিং ডিভাইসগুলোর একটি তালিকা প্রকাশ করা হয়। কোনো কুলিং ডিভাইস অফলাইন হয়ে গেলেও এই তালিকার ক্রম অপরিবর্তিত থাকে। ডিভাইস নির্মাতারা statsd মেট্রিক্স সংগ্রহ করতে এই তালিকাটি ব্যবহার করতে পারেন।

আরও তথ্যের জন্য, রেফারেন্স ইমপ্লিমেন্টেশন দেখুন।

যদিও আপনি নিজের এক্সটেনশন যোগ করতে পারেন, আপনার তাপ প্রশমন ফাংশনটি নিষ্ক্রিয় করা উচিত নয়।

তাপীয় পরিষেবা

অ্যান্ড্রয়েড ১০ এবং এর পরবর্তী সংস্করণগুলিতে, ফ্রেমওয়ার্কের থার্মাল সার্ভিসটি থার্মাল এইচএএল ২.০ (Thermal HAL 2.0) থেকে প্রাপ্ত বিভিন্ন প্রশমন সংকেত ব্যবহার করে অবিরাম পর্যবেক্ষণ করে এবং এর ক্লায়েন্টদের থ্রটলিংয়ের তীব্রতা সম্পর্কে ফিডব্যাক দেয়। এই ক্লায়েন্টদের মধ্যে অভ্যন্তরীণ কম্পোনেন্ট এবং অ্যান্ড্রয়েড অ্যাপ অন্তর্ভুক্ত। সার্ভিসটি দুটি বাইন্ডার কলব্যাক ইন্টারফেস ব্যবহার করে, IThermalEventListener এবং IThermalStatusListener , যেগুলোকে কলব্যাক হিসেবে প্রকাশ করা হয়। প্রথমটি প্ল্যাটফর্ম এবং ডিভাইস প্রস্তুতকারকের অভ্যন্তরীণ ব্যবহারের জন্য, এবং দ্বিতীয়টি অ্যান্ড্রয়েড অ্যাপের জন্য।

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

অ্যান্ড্রয়েড ১০ এবং এর পরবর্তী সংস্করণগুলিতে তাপীয় প্রশমন প্রক্রিয়া প্রবাহ।

চিত্র ২. অ্যান্ড্রয়েড ১০ এবং তার পরবর্তী সংস্করণগুলিতে তাপ প্রশমন প্রক্রিয়ার প্রবাহ।

ডিভাইস প্রস্তুতকারকের নির্দেশিকা

অ্যান্ড্রয়েড ১০ থেকে ১৩ পর্যন্ত ডিভাইসের তাপমাত্রা সেন্সর এবং থ্রটলিং স্ট্যাটাস রিপোর্ট করার জন্য, ডিভাইস প্রস্তুতকারকদের অবশ্যই থার্মাল এইচএএল ২.০ ( IThermal.hal )-এর HIDL দিকটি বাস্তবায়ন করতে হবে।

অ্যান্ড্রয়েড ১৪-এর জন্য ডিভাইসের তাপমাত্রা সেন্সর এবং থ্রটলিং স্ট্যাটাস রিপোর্ট করতে, ডিভাইস প্রস্তুতকারকদের অবশ্যই থার্মাল এইচএএল ২.০ ( IThermal.aidl )-এর এআইডিএল (AIDL) অংশটি বাস্তবায়ন করতে হবে।

ব্যাটারির শক্তির সীমাবদ্ধতা সহ ডিভাইসের কর্মক্ষমতা কমিয়ে দেয় এমন যেকোনো কিছু অবশ্যই থার্মাল HAL-এর মাধ্যমে রিপোর্ট করতে হবে। এটি নিশ্চিত করার জন্য, স্ট্যাটাস পরিবর্তনের উপর ভিত্তি করে প্রতিকারের প্রয়োজনীয়তা নির্দেশ করতে পারে এমন সমস্ত সেন্সরকে থার্মাল HAL-এ রাখুন এবং গৃহীত যেকোনো প্রতিকারমূলক পদক্ষেপের তীব্রতা রিপোর্ট করুন। একটি সেন্সর রিডিং থেকে প্রাপ্ত তাপমাত্রার মান প্রকৃত তাপমাত্রা না হলেও চলবে, যতক্ষণ পর্যন্ত এটি সংশ্লিষ্ট তীব্রতার থ্রেশহোল্ডকে সঠিকভাবে প্রতিফলিত করে। উদাহরণস্বরূপ, আপনি আপনার প্রকৃত তাপমাত্রার থ্রেশহোল্ড মানের পরিবর্তে বিভিন্ন সাংখ্যিক মান দিতে পারেন, অথবা হিস্টেরেসিস প্রদানের জন্য থ্রেশহোল্ড স্পেসিফিকেশনে গার্ডব্যান্ডিং তৈরি করতে পারেন। তবে, সেই মানের সাথে সম্পর্কিত তীব্রতা অবশ্যই সেই থ্রেশহোল্ডে যা প্রয়োজন তার সাথে মিলতে হবে। উদাহরণস্বরূপ, আপনি আপনার ক্রিটিক্যাল তাপমাত্রার থ্রেশহোল্ড হিসাবে ৭২°C ফেরত দেওয়ার সিদ্ধান্ত নিতে পারেন, যখন প্রকৃত তাপমাত্রা ৬৫°C এবং এটি আপনার নির্দিষ্ট করা ক্রিটিক্যাল তীব্রতার সাথে মিলে যায়। থার্মাল ফ্রেমওয়ার্কের সর্বোত্তম কার্যকারিতার জন্য তীব্রতার স্তরটি অবশ্যই নির্ভুল হতে হবে।

ফ্রেমওয়ার্কের থ্রেশহোল্ড লেভেলগুলো এবং সেগুলো কীভাবে প্রশমনমূলক পদক্ষেপের সাথে সম্পর্কিত, সে সম্পর্কে আরও জানতে ‘তাপীয় স্থিতি কোড ব্যবহার করুন ’ দেখুন।

তাপীয় এপিআই ব্যবহার করুন

অ্যাপগুলো PowerManager ক্লাসের মাধ্যমে লিসেনার যোগ ও অপসারণ করতে পারে এবং থার্মাল স্ট্যাটাসের তথ্য অ্যাক্সেস করতে পারে। IThermal ইন্টারফেসটি থার্মাল স্ট্যাটাসের মান ফেরত দেওয়াসহ প্রয়োজনীয় সমস্ত কার্যকারিতা প্রদান করে। IThermal বাইন্ডার ইন্টারফেসটি OnThermalStatusChangedListener ইন্টারফেস হিসেবে র‍্যাপ করা থাকে, যা অ্যাপগুলো থার্মাল স্ট্যাটাস লিসেনার রেজিস্টার বা অপসারণ করার সময় ব্যবহার করতে পারে।

অ্যান্ড্রয়েড থার্মাল এপিআই-তে কলব্যাক এবং পোলিং উভয় পদ্ধতিই রয়েছে, যার মাধ্যমে অ্যাপগুলোকে স্ট্যাটাস কোডের সাহায্যে তাপীয় তীব্রতার মাত্রা সম্পর্কে অবহিত করা হয়। এই স্ট্যাটাস কোডগুলো PowerManager ক্লাসে সংজ্ঞায়িত করা থাকে। পদ্ধতিগুলো হলো:

  • getCurrentThermalStatus() ডিভাইসটির বর্তমান থার্মাল স্ট্যাটাস একটি পূর্ণসংখ্যা হিসেবে রিটার্ন করে, যদি না ডিভাইসটি থ্রটলিং-এর অধীনে থাকে।
  • addThermalStatusListener() একটি লিসেনার যোগ করে।
  • removeThermalStatusListener() পূর্বে যোগ করা একটি লিসেনার সরিয়ে দেয়।

তাপীয় অবস্থা কোড ব্যবহার করুন

থার্মাল স্ট্যাটাস কোডগুলো নির্দিষ্ট থ্রটলিং লেভেল নির্দেশ করে, যা আপনি ডেটা সংগ্রহ করতে এবং একটি সর্বোত্তম ইউএক্স (UX) ডিজাইন করার জন্য ব্যবহার করতে পারেন। উদাহরণস্বরূপ, অ্যাপগুলো 0x00000000 ( THERMAL_STATUS_NONE ) স্ট্যাটাস পেতে পারে, যা পরে 0x00000001 ( THERMAL_STATUS_LIGHT )-এ পরিবর্তিত হতে পারে। 0x00000000 স্ট্যাটাসটিকে t0 হিসেবে চিহ্নিত করে এবং তারপর THERMAL_STATUS_NONE থেকে THERMAL_STATUS_LIGHT স্ট্যাটাসে অতিবাহিত সময়কে t1 হিসেবে পরিমাপ করার মাধ্যমে, ডিভাইস নির্মাতারা নির্দিষ্ট ব্যবহারের ক্ষেত্রের জন্য প্রশমন কৌশল ডিজাইন এবং পরীক্ষা করতে সক্ষম হন। নিম্নলিখিত সারণিতে থার্মাল স্ট্যাটাস কোডগুলো ব্যবহারের প্রস্তাবিত উপায়গুলো তুলে ধরা হলো:

তাপীয় স্থিতি কোড বর্ণনা এবং প্রস্তাবিত ব্যবহার
THERMAL_STATUS_NONE ( 0x00000000 ) কোন থ্রটলিং নেই। সুরক্ষামূলক ব্যবস্থা বাস্তবায়নের জন্য এই স্ট্যাটাসটি ব্যবহার করুন, যেমন THERMAL_STATUS_NONE ( 0 ) থেকে THERMAL_STATUS_LIGHT ( 1 ) তে সময়কাল (t0 থেকে t1) শুরু শনাক্ত করা।
THERMAL_STATUS_LIGHT ( 0x00000001 ) হালকা থ্রটলিং, এতে ইউজার এক্সপেরিয়েন্স (UX) প্রভাবিত হয় না। এই পর্যায়ে ডিভাইসের জন্য মৃদু প্রশমন ব্যবস্থা ব্যবহার করুন। উদাহরণস্বরূপ, বুস্টিং বা অদক্ষ ফ্রিকোয়েন্সি ব্যবহার করা থেকে বিরত থাকুন, তবে শুধুমাত্র বড় কোরগুলোর ক্ষেত্রে।
THERMAL_STATUS_MODERATE ( 0x00000002 ) মাঝারি থ্রটলিং হয়, এতে ইউজার এক্সপেরিয়েন্স (UX) খুব বেশি প্রভাবিত হয় না। থার্মাল মিটিগেশন ফোরগ্রাউন্ড অ্যাক্টিভিটিগুলোকে প্রভাবিত করে, তাই অ্যাপগুলোর উচিত অবিলম্বে পাওয়ার কমিয়ে দেওয়া।
THERMAL_STATUS_SEVERE ( 0x00000003 ) মারাত্মক থ্রটলিং; ইউজার এক্সপেরিয়েন্স (UX) ব্যাপকভাবে প্রভাবিত হয়। এই পর্যায়ে, ডিভাইসের থার্মাল মিটিগেশন সিস্টেমের ক্ষমতা সীমিত করে দেবে। এই অবস্থার কারণে ডিসপ্লে জ্যাঙ্ক এবং অডিও জিটারের মতো পার্শ্বপ্রতিক্রিয়া দেখা দিতে পারে।
THERMAL_STATUS_CRITICAL ( 0x00000004 ) প্ল্যাটফর্মটি বিদ্যুৎ সাশ্রয় করতে সবরকম ব্যবস্থা নিয়েছে। ডিভাইসটির তাপ প্রশমন সফটওয়্যার সমস্ত উপাদানকে তাদের সর্বনিম্ন ক্ষমতায় চালানোর জন্য সেট করেছে।
THERMAL_STATUS_EMERGENCY ( 0x00000005 ) তাপীয় অবস্থার কারণে প্ল্যাটফর্মের মূল উপাদানগুলো বন্ধ হয়ে যাচ্ছে এবং ডিভাইসের কার্যকারিতা সীমিত হয়ে পড়েছে। এই স্ট্যাটাস কোডটি ডিভাইস বন্ধ হওয়ার আগের শেষ সতর্কবার্তা। এই অবস্থায়, মডেম এবং সেলুলার ডেটার মতো কিছু ফাংশন সম্পূর্ণরূপে বন্ধ হয়ে যায়।
THERMAL_STATUS_SHUTDOWN ( 0x00000006 ) অবিলম্বে বন্ধ করুন। এই পর্যায়ের তীব্রতার কারণে, অ্যাপগুলো এই বিজ্ঞপ্তিটি গ্রহণ করতে সক্ষম নাও হতে পারে।

ডিভাইস প্রস্তুতকারকদের থার্মাল HAL-এর জন্য VTS পরীক্ষায় উত্তীর্ণ হতে হবে এবং তাপমাত্রার পরিবর্তন অনুকরণ করার জন্য তারা কার্নেল sysfs ইন্টারফেস থেকে emul_temp ব্যবহার করতে পারেন।