সাসপেন্ড মোড

SoC পাওয়ার স্টেট

চিপের মধ্যে সিস্টেমের (SoC) পাওয়ার স্টেট হল: চালু, আইডেল ও সাসপেন্ড। “চালু” বলতে বোঝায় যে SoC চলছে। “আইডল” হল একটি মাঝারি পাওয়ার মোড যেখানে SoC-তে পাওয়ার দেওয়া হয় কিন্তু কোনও টাস্ক পারফর্ম করা হয় না। "সাসপেন্ড" হল একটি লো-পাওয়ার মোড যেখানে SoC-তে পাওয়ার থাকে না। এই মোডে ডিভাইসের বিদ্যুৎ খরচ সাধারণত "চালু" মোডের চেয়ে ১০০ গুণ কম হয়।

ঘুম থেকে না ওঠা সেন্সর

নন-ওয়েক-আপ সেন্সর হল এমন সেন্সর যা SoC-কে সাসপেন্ড মোডে যাওয়া থেকে আটকায় না এবং ডেটা রিপোর্ট করার জন্য SoC-কে জাগিয়ে তোলে না। বিশেষ করে, ড্রাইভারদের ওয়েক-লক হোল্ড করার অনুমতি দেওয়া হয় না। স্ক্রিন বন্ধ থাকাকালীন ঘুম থেকে না জাগানো সেন্সর থেকে ইভেন্ট পেতে চাইলে আংশিক ওয়েক লক বজায় রাখার দায়িত্ব হল অ্যাপ্লিকেশনের। SoC সাসপেন্ড মোডে থাকাকালীন, সেন্সরগুলিকে অবশ্যই কাজ চালিয়ে যেতে হবে এবং ইভেন্ট তৈরি করতে হবে, যা হার্ডওয়্যার FIFO-তে রাখা হয়। (আরও বিবরণের জন্য ব্যাচিং দেখুন।) SoC জেগে উঠলে FIFO-তে থাকা ইভেন্টগুলি অ্যাপ্লিকেশনে ডেলিভার করা হয়। FIFO-এর সাইজ সব ইভেন্ট স্টোর করার জন্য খুব ছোট হলে, পুরনো ইভেন্টগুলি হারিয়ে যায়; লেটেস্ট ডেটা রাখার জন্য সবচেয়ে পুরনো ডেটা বাদ দেওয়া হয়। FIFO না থাকলে, SoC সাসপেন্ড মোডে থাকাকালীন তৈরি হওয়া সব ইভেন্ট হারিয়ে যায়। একটি ব্যতিক্রম হল প্রতিটি অন-চেঞ্জ সেন্সর থেকে পাওয়া লেটেস্ট ইভেন্ট: শেষ ইভেন্টটি FIFO-এর বাইরে সেভ করতে হবে যাতে এটি হারিয়ে না যায়।

SoC সাসপেন্ড মোড থেকে বেরিয়ে আসার সাথে সাথেই FIFO থেকে সব ইভেন্ট রিপোর্ট করা হয় এবং অপারেশন আগের মতো চলতে থাকে।

যেসব অ্যাপ্লিকেশন নন-ওয়েক-আপ সেন্সর ব্যবহার করে, সেগুলিকে হয় ওয়েক লক হোল্ড করে রাখতে হবে যাতে সিস্টেম সাসপেন্ড না হয়ে যায়, অথবা সেগুলির প্রয়োজন না থাকলে সেন্সর থেকে আনরেজিস্টার করতে হবে অথবা SoC সাসপেন্ড মোডে থাকলে ইভেন্ট মিস হওয়ার সম্ভাবনা থাকে।

ওয়েক-আপ সেন্সর

নন-ওয়েক-আপ সেন্সরের বিপরীতে, ওয়েক-আপ সেন্সর নিশ্চিত করে যে এর ডেটা SoC-এর অবস্থা নির্বিশেষে ডেলিভার করা হয়। SoC চালু থাকাকালীন, ওয়েক-আপ সেন্সর নন-ওয়েক-আপ-সেন্সরের মতো আচরণ করে। SoC স্লিপ মোডে থাকলে, ইভেন্ট ডেলিভার করার জন্য ওয়েক-আপ সেন্সরকে SoC-কে জাগিয়ে তুলতে হবে। সেগুলিকে অবশ্যই SoC-কে সাসপেন্ড মোডে যেতে দিতে হবে, তবে কোনও ইভেন্ট রিপোর্ট করার প্রয়োজন হলে এটিকে অবশ্যই জাগিয়ে তুলতে হবে। অর্থাৎ, সর্বাধিক রিপোর্টিং লেটেন্সি পেরিয়ে যাওয়ার বা হার্ডওয়্যার FIFO পূর্ণ হওয়ার আগে সেন্সরকে SoC-কে জাগিয়ে তুলতে হবে এবং ইভেন্ট ডেলিভার করতে হবে। আরও বিবরণের জন্য ব্যাচিং দেখুন।

SoC স্লিপ মোডে ফিরে যাওয়ার আগে অ্যাপ্লিকেশন যাতে ইভেন্ট পাওয়ার জন্য পর্যাপ্ত সময় পায় তা নিশ্চিত করতে, প্রতিটি ইভেন্ট রিপোর্ট করার সময় ড্রাইভারকে অবশ্যই ২০০ মিলিসেকেন্ডের জন্য "টাইমআউট ওয়েক লক" হোল্ড করে রাখতে হবে। অর্থাৎ, ঘুম থেকে ওঠার ইন্টারাপ্ট হওয়ার পরে ২০০ মিলিসেকেন্ডের মধ্যে SoC-কে আবার ঘুমাতে দেওয়া উচিত নয়। ভবিষ্যতে Android রিলিজ হলে এই প্রয়োজনীয়তা আর থাকবে না এবং সেই সময় পর্যন্ত আমাদের এই টাইম-আউট ওয়েক লক প্রয়োজন।

কীভাবে ঘুম থেকে ওঠার ও না ওঠার সেন্সরকে সংজ্ঞায়িত করতে হয়?

KitKat পর্যন্ত, কোনও সেন্সর 'ওয়েক-আপ' বা 'নন-ওয়েক-আপ' সেন্সর হবে কিনা তা সেন্সরের ধরন দ্বারা নির্ধারিত হত: বেশিরভাগই ছিল নন-ওয়েক-আপ সেন্সর, তবে প্রক্সিমিটি সেন্সর এবং সিগনিফিক্যান্ট মোশন ডিটেক্টর এর ব্যতিক্রম ছিল।

L থেকে শুরু করে, কোনও প্রদত্ত সেন্সর একটি ওয়েক-আপ সেন্সর কিনা তা সেন্সর ডেফিনিশনে একটি ফ্ল্যাগ দ্বারা নির্দিষ্ট করা হয়। বেশিরভাগ সেন্সরকে একই সেন্সরের ওয়েক-আপ ও নন-ওয়েক-আপ ভ্যারিয়েন্টের পেয়ার হিসেবে ডিফাইন করা যায়, সেক্ষেত্রে সেগুলিকে অবশ্যই দুটি স্বতন্ত্র সেন্সর হিসেবে আচরণ করতে হবে, একে অপরের সাথে ইন্টার‍্যাক্ট করলে চলবে না। আরও বিবরণের জন্য ইন্টার‍্যাকশন দেখুন।

সেন্সর টাইপের সংজ্ঞায় অন্য কিছু উল্লেখ করা না থাকলে, সেন্সর টাইপ-এ তালিকাভুক্ত প্রতিটি সেন্সর টাইপের জন্য একটি করে ওয়েক-আপ সেন্সর ও একটি করে নন-ওয়েক-আপ সেন্সর ইমপ্লিমেন্ট করার সাজেশন দেওয়া হয়। প্রতিটি সেন্সর টাইপের সংজ্ঞায়, SensorManager.getDefaultSensor(sensorType)-এর মাধ্যমে কোন সেন্সর (ওয়েক-আপ বা নন-ওয়েক-আপ) রিটার্ন করা হবে তা দেখুন। এটি এমন একটি সেন্সর যা বেশিরভাগ অ্যাপ্লিকেশন ব্যবহার করবে।