বহিঃস্কার অবস্তা

SoC শক্তি রাষ্ট্র

একটি চিপে (SoC) সিস্টেমের পাওয়ার স্টেটগুলি হল: চালু, নিষ্ক্রিয় এবং সাসপেন্ড৷ "চালু" হল যখন SoC চলছে। "Idle" হল একটি মাঝারি পাওয়ার মোড যেখানে SoC চালিত হয় কিন্তু কোনো কাজ করে না। "সাসপেন্ড" হল একটি কম-পাওয়ার মোড যেখানে SoC চালিত হয় না। এই মোডে ডিভাইসের পাওয়ার খরচ সাধারণত "চালু" মোডের তুলনায় 100 গুণ কম।

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

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

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

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

জেগে ওঠা সেন্সর

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

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

জেগে ওঠা এবং নন-ওয়েক-আপ সেন্সরগুলি কীভাবে সংজ্ঞায়িত করবেন?

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

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

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