Android ফ্রেমওয়ার্কের সাহায্যে, ডিভাইস প্রস্তুতকারী ও অ্যাপ ডেভেলপাররা, কোনও ডিভাইস অতিরিক্ত গরম হতে শুরু করলে,
ব্যবহারকারীর অভিজ্ঞতা (UX) যাতে একই রকম থাকে তা নিশ্চিত করতে
থার্মাল ডেটা ব্যবহার করতে পারেন। যেমন, কোনও সিস্টেম থার্মাল স্ট্রেসের মধ্যে দিয়ে গেলে,
jobschedulerটি কাজ থ্রটল করা হয় এবং, প্রয়োজন হলে, একটি ফ্রেমওয়ার্ক
থার্মাল শাটডাউন শুরু করা হয়। যেসব অ্যাপ PowerManager ক্লাস-এ
রেজিস্টার করা কলব্যাকের মাধ্যমে
থার্মাল-স্ট্রেস বিজ্ঞপ্তি পায়,
সেগুলি তাদের UX-এ সুন্দরভাবে পরিবর্তন করতে পারে।
থার্মাল HAL
Android 9 এবং তার আগের ভার্সনগুলি তাপমাত্রার রিডিং পেতে Thermal HAL 1.0-এ সংজ্ঞায়িত একটি পোলিং ইন্টারফেস ব্যবহার করে। এই HAL, Android ফ্রেমওয়ার্ক এবং অন্যান্য বিশ্বস্ত ক্লায়েন্ট, যেমন ডিভাইস প্রস্তুতকারকের HAL-কে একই API-এর মাধ্যমে প্রতিটি সেন্সরের জন্য বর্তমান তাপমাত্রা এবং প্রোডাক্ট-পলিসি নির্দিষ্ট থ্রটলিং এবং শাটডাউন থ্রেশহোল্ড পড়ার অনুমতি দেয়।
Android 10-এ Android ফ্রেমওয়ার্কে থার্মাল সিস্টেম এবং HAL-এর নতুন ভার্সন, Thermal HAL 2.0, চালু করা হয়েছে যা থার্মাল সাবসিস্টেম হার্ডওয়্যার ডিভাইসের ইন্টারফেসকে অ্যাবস্ট্র্যাক্ট করে। হার্ডওয়্যার ইন্টারফেসে ত্বক, ব্যাটারি, GPU, CPU ও USB পোর্টের জন্য তাপমাত্রা সেন্সর ও থার্মিস্টর অন্তর্ভুক্ত। ডিভাইসের সারফেসের তাপমাত্রা নির্দিষ্ট থার্মাল সীমার মধ্যে রাখতে, ডিভাইসের ত্বকের তাপমাত্রা ট্র্যাক করা সবচেয়ে গুরুত্বপূর্ণ সিস্টেম।
এছাড়াও, Thermal HAL 2.0 একাধিক ক্লায়েন্টকে থার্মাল সেন্সর
রিডিং এবং থার্মাল স্ট্রেস নির্দেশ করতে সংশ্লিষ্ট তীব্রতার লেভেল প্রদান করে। নিচের
ছবিতে Android System
UI থেকে পাওয়া দুটি সতর্কতা মেসেজ দেখানো হয়েছে। IThermalEventListener কলব্যাক
ইন্টারফেসের জন্যUSB_PORT এবং SKIN সেন্সর, যথাক্রমে, যখন
THERMAL_STATUS_EMERGENCY গুরুত্বের লেভেলে পৌঁছায়, তখন এই মেসেজগুলি দেখানো হয়।
ছবি ১. অতিরিক্ত গরম হয়ে যাওয়া সংক্রান্ত সতর্কতা।
IThermal HAL-এর মাধ্যমে বিভিন্ন
ধরনের থার্মাল সেন্সরের জন্য বর্তমান তাপমাত্রা
উদ্ধার করা হয়। প্রতিটি ফাংশন কল
SUCCESS বা FAILURE স্ট্যাটাস ভ্যালু রিটার্ন করে। SUCCESS
ফেরত দেওয়া হলে, প্রসেস চলতে থাকে। FAILURE ফেরত এলে, status.debugMessage-এ একটি সমস্যা
মেসেজ পাঠানো হয়, যা মানুষের পড়ার মতো হতে হবে।
বর্তমান তাপমাত্রা রিটার্ন করে এমন পোলিং ইন্টারফেস হওয়ার পাশাপাশি,
আপনি কলব্যাক ব্যবহার করতে পারবেন
IThermalChangedCallback (HIDL, Android 10 থেকে 13) অথবা
IThermalChangedCallback (AIDL, Android 14 এবং তার পরবর্তী ভার্সন)
থার্মাল HAL ক্লায়েন্ট থেকে কলব্যাক ইন্টারফেসের সাথে, যেমন ফ্রেমওয়ার্কের
থার্মাল পরিষেবা। যেমন, RegisterIThermalChangedCallback এবং
UnregisterIThermalChangedCallback তীব্রতা-পরিবর্তিত
ইভেন্ট রেজিস্টার বা আনরেজিস্টার করতে। কোনও নির্দিষ্ট সেন্সরের থার্মাল তীব্রতা পরিবর্তন হলে,
notifyThrottling থার্মাল-ইভেন্ট
লিসেনারকে থার্মাল থ্রটলিং ইভেন্ট কলব্যাক পাঠায়।
থার্মাল সেন্সর সংক্রান্ত তথ্য ছাড়াও, getCurrentCoolingDevices-এ
কমে যাওয়া কুলিং ডিভাইসের একটি তালিকা দেখানো হয়। এই তালিকার ক্রমিকতা বজায় থাকে, এমনকি
কুলিং ডিভাইস অফলাইন হয়ে গেলেও। ডিভাইস প্রস্তুতকারক এই তালিকা ব্যবহার করে statsd মেট্রিক সংগ্রহ করতে পারেন।
আরও তথ্যের জন্য, রেফারেন্স প্রয়োগ দেখুন।
আপনি নিজের এক্সটেনশন যোগ করতে পারলেও, থার্মাল মিটিগেশন ফাংশন বন্ধ করবেন না।
থার্মাল পরিষেবা
Android 10 ও তার পরবর্তী যেকোনও ভার্সনে, ফ্রেমওয়ার্কের থার্মাল পরিষেবা, Thermal HAL 2.0 থেকে পাওয়া বিভিন্ন প্রশমন সিগন্যাল ব্যবহার করে ক্রমাগত
মনিটর করে এবং এর ক্লায়েন্টদের থ্রটলিংয়ের তীব্রতা সংক্রান্ত ফিডব্যাক
দেয়। এইসব ক্লায়েন্টের মধ্যে ইন্টার্নাল কম্পোনেন্ট
ও Android অ্যাপ অন্তর্ভুক্ত। পরিষেবাটি দুটি বাইন্ডার কলব্যাক ইন্টারফেস ব্যবহার করে,
IThermalEventListener এবং IThermalStatusListener, কলব্যাক হিসেবে প্রকাশ করা হয়েছে। প্রথমটি
অভ্যন্তরীণ প্ল্যাটফর্ম এবং ডিভাইস প্রস্তুতকারকের ব্যবহারের জন্য এবং পরেরটি
Android অ্যাপের জন্য।
কলব্যাক ইন্টারফেসের মাধ্যমে, ডিভাইসের বর্তমান থার্মাল স্ট্যাটাস
0x00000000 (কোনও থ্রটলিং নেই) থেকে 0x00000006 (ডিভাইস শাটডাউন) রেঞ্জের মধ্যে
একটি পূর্ণসংখ্যা হিসেবে পাওয়া যায়। শুধুমাত্র বিশ্বস্ত সিস্টেম পরিষেবা, যেমন
Android API বা ডিভাইস প্রস্তুতকারক API, বিস্তারিত থার্মাল সেন্সর
ও থার্মাল ইভেন্ট সংক্রান্ত তথ্য অ্যাক্সেস করতে পারে। নিচের ছবিতে Android 10 ও তার পরবর্তী ভার্সনে
থার্মাল প্রশমন প্রসেস ফ্লোয়ের একটি মডেল দেখানো হয়েছে:
ছবি ২. Android 10 ও এর পরবর্তী যেকোনও ভার্সনে থার্মাল মিটিগেশন প্রসেস ফ্লো।
ডিভাইস প্রস্তুতকারকের নির্দেশিকা
Android 10 থেকে 13-এর জন্য ডিভাইসের তাপমাত্রা সেন্সর ও থ্রটলিং স্ট্যাটাস রিপোর্ট করতে, ডিভাইস প্রস্তুতকারকদের Thermal
HAL 2.0 (IThermal.hal)-এর HIDL অ্যাস্পেক্ট প্রয়োগ করতে হবে।
Android
14-এর জন্য ডিভাইসের তাপমাত্রা সেন্সর ও থ্রটলিং স্ট্যাটাস রিপোর্ট করতে, ডিভাইস প্রস্তুতকারকদের অবশ্যই Thermal HAL 2.0 (IThermal.aidl)-এর AIDL অ্যাস্পেক্ট
ইমপ্লিমেন্ট করতে হবে।
ব্যাটারি পাওয়ার সংক্রান্ত সীমাবদ্ধতা সহ ডিভাইসের পারফর্ম্যান্সকে থ্রটল করে এমন যেকোনও কিছু থার্মাল HAL-এর মাধ্যমে রিপোর্ট করতে হবে। এটি যাতে হয় তা নিশ্চিত করতে, মিটিগেশনের প্রয়োজনীয়তা (স্ট্যাটাস পরিবর্তনের উপর ভিত্তি করে) নির্দেশ করতে পারে এমন সব সেন্সর থার্মাল HAL-এ রাখুন এবং নেওয়া যেকোনও মিটিগেশন অ্যাকশনের গুরুত্ব রিপোর্ট করুন। সেন্সর রিডিং থেকে পাওয়া তাপমাত্রার ভ্যালু প্রকৃত তাপমাত্রা না হলেও চলবে, তবে তা যেন সংশ্লিষ্ট গুরুতর অবস্থার থ্রেশহোল্ড সঠিকভাবে প্রতিফলিত করে। যেমন, আপনি প্রকৃত তাপমাত্রার থ্রেশহোল্ড ভ্যালুর পরিবর্তে আলাদা সংখ্যাগত ভ্যালু পাস করতে পারেন অথবা হিস্টেরেসিস প্রদান করতে থ্রেশহোল্ড স্পেসিফিকেশনে গার্ডব্যান্ডিং তৈরি করতে পারেন। তবে, সেই মানের সাথে সম্পর্কিত গুরুত্ব অবশ্যই সেই থ্রেশহোল্ডে যা প্রয়োজন তার সাথে মিলতে হবে। যেমন, প্রকৃত তাপমাত্রা ৬৫°C হলে এবং সেটি আপনার উল্লেখ করা গুরুতর অবস্থার সাথে সঙ্গতিপূর্ণ হলে, আপনি হয়ত ৭২°C-কে আপনার গুরুতর তাপমাত্রা থ্রেশহোল্ড হিসেবে রিটার্ন করার সিদ্ধান্ত নিতে পারেন। সেরা থার্মাল ফ্রেমওয়ার্ক কার্যকারিতার জন্য গুরুত্ব লেভেল সঠিক হতে হবে।
ফ্রেমওয়ার্কে থ্রেশহোল্ড লেভেল এবং সেগুলি কীভাবে হ্রাস করার অ্যাকশনের সাথে সম্পর্কিত সেই সম্পর্কে আরও জানতে, থার্মাল স্ট্যাটাস কোড ব্যবহার করুন।
থার্মাল API ব্যবহার করা
অ্যাপ, লিসনার যোগ করতে ও সরাতে এবং
PowerManager ক্লাস ব্যবহার করে
থার্মাল স্ট্যাটাস সংক্রান্ত তথ্য অ্যাক্সেস করতে পারে।
IThermal ইন্টারফেস প্রয়োজনীয় সব কার্যকারিতা প্রদান করে, যার মধ্যে
থার্মাল স্ট্যাটাস ভ্যালু রিটার্ন করা অন্তর্ভুক্ত। OnThermalStatusChangedListener ইন্টারফেস হিসেবে
IThermal বাইন্ডার ইন্টারফেস
র্যাপ করা হয়, যা অ্যাপগুলি
থার্মাল স্ট্যাটাস লিসনার রেজিস্টার বা সরিয়ে দেওয়ার সময় ব্যবহার করতে পারে।
Android থার্মাল API-তে কলব্যাক ও পোলিং পদ্ধতি, দুটিই আছে। এর মাধ্যমে অ্যাপকে স্ট্যাটাস কোডের মাধ্যমে থার্মাল সিভিয়ারিটি লেভেল সম্পর্কে
জানানো হয়। এই স্ট্যাটাস কোড 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 ব্যবহার করতে পারবে।