পাওয়ার ম্যানেজমেন্ট, পাওয়ার ম্যানেজমেন্ট, পাওয়ার ম্যানেজমেন্ট, পাওয়ার ম্যানেজমেন্ট

যানবাহন-নির্দিষ্ট পাওয়ার ম্যানেজমেন্ট সমর্থন করার জন্য, অ্যান্ড্রয়েড একটি CarPowerManagementService সার্ভিস এবং একটি CarPowerManager ইন্টারফেস প্রদান করে।

গাড়ির মাস্টার কন্ট্রোল ইউনিট (VMCU) দ্বারা অবস্থার পরিবর্তন ঘটানো হয়। VMCU-এর সাথে যোগাযোগ করার জন্য ইন্টিগ্রেটরদের বেশ কিছু উপাদান বাস্তবায়ন করতে হয়। ইন্টিগ্রেটররা গাড়ির হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (VHAL) এবং কার্নেল ইমপ্লিমেন্টেশনের সাথে ইন্টিগ্রেট করার জন্য দায়ী। এছাড়াও, ইন্টিগ্রেটররা ওয়েক সোর্স নিষ্ক্রিয় করা এবং শাটডাউন যেন অনির্দিষ্টকালের জন্য স্থগিত না হয় তা নিশ্চিত করার জন্যও দায়ী।

পরিভাষা

এই নথি জুড়ে নিম্নলিখিত পরিভাষাগুলো ব্যবহৃত হয়েছে:

অ্যাপ প্রসেসর (AP)
সিস্টেম অন এ চিপ (SoC)- এর একটি অংশ।
বোর্ড সাপোর্ট প্যাকেজ (বিএসপি)
সফটওয়্যারের সেই স্তর যা হার্ডওয়্যার-নির্দিষ্ট বুট ফার্মওয়্যার এবং ডিভাইস ড্রাইভার ধারণ করে, যা একটি এমবেডেড অপারেটিং সিস্টেমকে একটি নির্দিষ্ট হার্ডওয়্যার পরিবেশে (যেমন মাদারবোর্ড) কাজ করতে সক্ষম করে এবং যা এমবেডেড অপারেটিং সিস্টেমের সাথে সমন্বিত থাকে।
কারপাওয়ারম্যানেজার (সিপিএম)
অ্যাপগুলির পাওয়ার স্টেট পরিবর্তনের জন্য নিবন্ধন করার একটি এপিআই উন্মুক্ত করা হয়েছে।
গাড়ির পাওয়ার ম্যানেজমেন্ট সার্ভিস (CPMS)
পাওয়ার অবস্থার পরিবর্তন সমন্বয় করে, পাওয়ার অবস্থা নিয়ন্ত্রণের জন্য VHAL-এর সাথে ইন্টারফেস করে এবং সাসপেন্ড ও শাট ডাউন করার চূড়ান্ত নির্দেশ প্রদান করে।
কারপাওয়ারপলিসিডেমন (CPPD)
পাওয়ার পলিসি পরিচালনা করে এবং নেটিভ প্রসেসগুলোকে পাওয়ার পলিসি লিসেনার নিবন্ধন করার জন্য AIDL ইন্টারফেস উন্মুক্ত করে।
সাধারণ উদ্দেশ্যমূলক ইনপুট বা আউটপুট (GPIO)
সাধারণ ব্যবহারের জন্য একটি ডিজিটাল সিগন্যাল পিন।
হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL)
একটি সফ্টওয়্যার স্তর, যার সাথে অন্য সকল উচ্চ স্তরের মডিউলকে হার্ডওয়্যারের কার্যকারিতা ব্যবহারের জন্য যোগাযোগ করতে হয়।
শীতনিদ্রা
একে সাসপেন্ড-টু-ডিস্ক (S2D/S4) নামেও উল্লেখ করা হয়। এই পদ্ধতিতে SoC-কে S4 পাওয়ার মোডে (হাইবারেট) রাখা হয়, র‍্যামের ডেটা নন-ভোলাটাইল মিডিয়াতে (যেমন ফ্ল্যাশ বা ডিস্ক) লিখে নেওয়া হয় এবং পুরো সিস্টেমটি বন্ধ হয়ে যায়।
মিডিয়া প্রসেসর (এমপি)
সিস্টেম অন এ চিপ (SoC) দেখুন।
পাওয়ার ম্যানেজমেন্ট ইন্টিগ্রেটেড সার্কিট (পিএমআইসি)
হোস্ট সিস্টেমের বিদ্যুতের চাহিদা ব্যবস্থাপনার জন্য ব্যবহৃত চিপ।
সিস্টেম অন এ চিপ (SoC)
AAOS চালনাকারী প্রধান প্রসেসর, যা সাধারণত ইন্টেল, মিডিয়াটেক, এনভিডিয়া, কোয়ালকম, রেনেসাস এবং টেক্সাস ইনস্ট্রুমেন্টস-এর মতো নির্মাতারা সরবরাহ করে থাকে।
স্থগিত করুন
একে সাসপেন্ড-টু-র‍্যাম (S2R বা STR) নামেও উল্লেখ করা হয়। এই পদ্ধতিতে SoC-কে S3 পাওয়ার মোডে রাখা হয় এবং সিপিইউ বন্ধ হয়ে গেলেও র‍্যাম চালু থাকে।
যানবাহন এইচএএল (ভিএইচএএল)
গাড়ির নেটওয়ার্কের সাথে ইন্টারফেস করার জন্য অ্যান্ড্রয়েড এপিআই ব্যবহার করা হয়। টিয়ার ১ পার্টনার বা ওইএম এই মডিউলটি লেখার জন্য দায়ী। গাড়ির নেটওয়ার্ক যেকোনো ফিজিক্যাল লেয়ার (যেমন CAN, LIN, MOST, এবং ইথারনেট) ব্যবহার করতে পারে। ভিএইচএএল এই গাড়ির নেটওয়ার্ককে অ্যাবস্ট্রাক্ট করে, যাতে এএওএস গাড়িটির সাথে ইন্টারঅ্যাক্ট করতে পারে।
যানবাহন ইন্টারফেস প্রসেসর (ভিআইপি)
যানবাহন এমসিইউ দেখুন।
যানবাহন মাস্টার কন্ট্রোল ইউনিট (ভিএমসিইউ)
মাইক্রোকন্ট্রোলারটি ভেহিকল নেটওয়ার্ক এবং এসওসি-এর মধ্যে ইন্টারফেস হিসেবে কাজ করে। এসওসি ইউএসবি, ইউএআরটি, এসপিআই এবং জিপিআইও সিগন্যালের মাধ্যমে ভিএমসিইউ-এর সাথে যোগাযোগ করে।

সিস্টেম ডিজাইন

এই অংশে বর্ণনা করা হয়েছে কীভাবে AAOS অ্যাপ প্রসেসরের পাওয়ার স্টেট উপস্থাপন করে এবং কোন মডিউলগুলো পাওয়ার ম্যানেজমেন্ট সিস্টেম বাস্তবায়ন করে। এই অংশে আরও বর্ণনা করা হয়েছে কীভাবে এই মডিউলগুলো একসাথে কাজ করে এবং সাধারণত কীভাবে স্টেট ট্রানজিশন ঘটে।

গাড়ির পাওয়ার স্টেট মেশিন

AAOS, AP-এর পাওয়ার স্টেট উপস্থাপন করার জন্য একটি স্টেট মেশিন ব্যবহার করে। এই স্টেট মেশিনটি নিচে চিত্রিত স্টেটগুলো প্রদান করে:

গাড়ির পাওয়ার স্টেট মেশিন

চিত্র ১. গাড়ির পাওয়ার স্টেট মেশিন।

সবচেয়ে সাধারণ রূপান্তরগুলো নীল রঙে চিহ্নিত করা হয়েছে। এইগুলো হলো অবস্থা এবং সাধারণ রূপান্তরগুলো:

  • সাসপেন্ড-টু-র‍্যাম। যানবাহন এবং এসওসি বন্ধ আছে। কোনো কোড কার্যকর হচ্ছে না। এসওসি র‍্যামে বিদ্যুৎ সরবরাহ বজায় থাকে।
  • VHAL-এর জন্য অপেক্ষা করুন। যখন চালক গাড়িটির সাথে কোনো ক্রিয়া করেন, যেমন দরজা খোলার মাধ্যমে, তখন VMCU, SoC-তে বিদ্যুৎ সরবরাহ করে। AAOS, Suspend-to-RAM অবস্থা থেকে পুনরায় চালু হয় এবং Wait for VHAL অবস্থায় প্রবেশ করে, যেখানে এটি VHAL-এর সাথে সমন্বয়ের জন্য অপেক্ষা করে।
  • চালু। VHAL, AAOS-কে 'চালু' অবস্থায় প্রবেশ করতে নির্দেশ দেয়। এই অবস্থায়, AAOS সম্পূর্ণরূপে চালু থাকে এবং ড্রাইভারের সাথে যোগাযোগ রক্ষা করে।
  • শাটডাউনের পূর্বপ্রস্তুতি। যখন ড্রাইভারের ড্রাইভিং শেষ হয়, তখন VHAL, SHUTDOWN_PREPARE বার্তা পাঠিয়ে AAOS-কে শাটডাউনের পূর্বপ্রস্তুতি পর্বে প্রবেশ করতে বলে। এই অবস্থায়, পাওয়ার স্টেট পরিবর্তনের লিসেনারগুলো STATE_PRE_SHUTDOWN_PREPARE পায়। এটি শাটডাউন শুরু হওয়ার একটি আগাম সতর্কবার্তা হিসেবে কাজ করে।
  • শাটডাউন প্রস্তুতি। যখন সমস্ত লিসেনার তাদের কাজ সম্পন্ন করে অথবা প্রি-শাটডাউন প্রস্তুতির সময়সীমা শেষ হয়ে যায়, তখন অ্যান্ড্রয়েড সিস্টেম STATE_SHUTDOWN_PREPARE বার্তা দিয়ে লিসেনারদের অবহিত করে মূল শাটডাউন প্রস্তুতি পর্বে প্রবেশ করে। ডিসপ্লে এবং অডিও বন্ধ থাকে এবং AAOS ড্রাইভারের সাথে কোনো মিথস্ক্রিয়া করে না। অ্যান্ড্রয়েড সিস্টেম তখনও চালু থাকে এবং গ্যারেজ মোড চালু করার মতো পরিষ্করণ ও আপডেট কার্যক্রম সম্পাদনের জন্য প্রস্তুত থাকে।
  • VHAL শেষ হওয়ার জন্য অপেক্ষা করুন। এই পর্যায়ে, AAOS, VHAL-কে জানায় যে এটি শাটডাউন করার জন্য প্রস্তুত। আশা করা হয় যে VMCU, SoC-কে ডিপ স্লিপ মোডে রাখবে এবং অ্যাপ প্রসেসর থেকে পাওয়ার সংযোগ বিচ্ছিন্ন করবে। এরপর AAOS সাসপেন্ড-টু-র‍্যাম অবস্থায় থাকে, যদিও কোনো কোড এক্সিকিউট হয় না।

পাওয়ার ম্যানেজমেন্ট মডিউল

পাওয়ার ম্যানেজমেন্ট সিস্টেমটি নিম্নলিখিত মডিউলগুলো নিয়ে গঠিত:

মডিউলের নাম বর্ণনা
কারপাওয়ারম্যানেজার জাভা বা সি++ এপিআই।
কারপাওয়ারম্যানেজমেন্টসার্ভিস পাওয়ার অবস্থার পরিবর্তন সমন্বয় করে এবং পাওয়ার নীতি ব্যবস্থাপনার দায়িত্ব CarPowerPolicyDaemon-এর উপর অর্পণ করে।
কারপাওয়ারপলিসিডেমন পাওয়ার পলিসিগুলো পরিচালনা করে এবং নেটিভ পাওয়ার পলিসি ক্লায়েন্টদের সাথে যোগাযোগ করে।
যানবাহন এইচএএল VMCU-এর ইন্টারফেস।
কার্নেল র‍্যাম বা ডিস্কে স্থগিত করার বাস্তবায়ন।

ডিপ স্লিপ/হাইবারনেশন ফিচারটি (অ্যান্ড্রয়েডকে র‍্যাম/ডিস্কে স্থগিত করা) কার্নেলে প্রয়োগ করা হয়েছে। এই ফিচারটি /sys/power/state এ অবস্থিত একটি বিশেষ ফাইল হিসেবে ইউজার স্পেসে উন্মুক্ত করা হয়। এই ফাইলে mem বা disk লিখে AAOS-কে স্থগিত করা হয়।

সিপিএমএস অন্যান্য পরিষেবা এবং এইচএএল-এর সাথে পাওয়ার স্টেট সমন্বয় করে। সিপিএমএস উপরে বর্ণিত স্টেট মেশিনটি বাস্তবায়ন করে এবং পাওয়ার স্টেটের পরিবর্তন ঘটলে প্রতিটি অবজারভারকে নোটিফিকেশন পাঠায়। এই পরিষেবাটি হার্ডওয়্যারে বার্তা পাঠানোর জন্য ভিএইচএএল-ও ব্যবহার করে।

CPPD হলো পাওয়ার পলিসি সংক্রান্ত তথ্যের নির্ভরযোগ্য উৎস। এটি ডিভাইসের জীবনচক্র জুড়ে পাওয়ার পলিসিগুলো পরিচালনা করে এবং পাওয়ার পলিসি পরিবর্তনের বিষয়ে CPMS, VHAL ও অন্যান্য নেটিভ লিসেনারদের অবহিত করে। CPMS, পাওয়ার পলিসি পরিবর্তনের অনুরোধগুলো CPPD-এর কাছে প্রেরণ করে।

CPMS AP_POWER_STATE_REQ এবং AP_POWER_STATE_REPORT এর মতো পাওয়ার স্টেট সম্পর্কিত VHAL প্রোপার্টিগুলো রিড ও রাইট করার মাধ্যমে VMCU-এর সাথে যোগাযোগ করে। অ্যাপগুলো পাওয়ার স্টেটের পরিবর্তন মনিটর করার জন্য CPM-এ সংজ্ঞায়িত ইন্টারফেসটি ব্যবহার করতে পারে। এই ইন্টারফেসটি অ্যাপগুলোকে পাওয়ার পলিসি লিসেনার রেজিস্টার করার সুযোগও দেয়। এই জাভা API-টি @SystemApi এবং @hide দ্বারা অ্যানোটেট করা থাকে, যার ফলে এটি শুধুমাত্র প্রিভিলেজড অ্যাপগুলোর জন্য উপলব্ধ হয়। এই মডিউল, অ্যাপ এবং সার্ভিসগুলোর মধ্যকার সম্পর্ক নিচে চিত্রিত করা হলো:

পাওয়ার উপাদানগুলির রেফারেন্স ডায়াগ্রাম

চিত্র ২. পাওয়ার কম্পোনেন্টসমূহের রেফারেন্স ডায়াগ্রাম।

বার্তা ক্রম

পূর্ববর্তী বিভাগে পাওয়ার ম্যানেজমেন্ট সিস্টেম গঠনকারী মডিউলগুলো বর্ণনা করা হয়েছে। এই বিভাগে , ডিপ স্লিপে প্রবেশ এবং ডিপ স্লিপ থেকে প্রস্থান করার উদাহরণ ব্যবহার করে মডিউল এবং অ্যাপগুলো কীভাবে যোগাযোগ করে তা ব্যাখ্যা করা হয়েছে:

গভীর ঘুমে প্রবেশ করুন

শুধুমাত্র VMCU-ই ডিপ স্লিপ শুরু করতে পারে। ডিপ স্লিপ শুরু হয়ে গেলে, VMCU, VHAL-এর মাধ্যমে CPMS-কে একটি নোটিফিকেশন পাঠায়। CPMS তার স্টেট পরিবর্তন করে SHUTDOWN PREPARE-এ নিয়ে যায় এবং CPM দ্বারা প্রদত্ত একটি নতুন স্টেট আইডি দিয়ে onStateChanged() মেথডটি কল করার মাধ্যমে এই স্টেট পরিবর্তনের বিষয়টি সমস্ত অবজারভারদের (যেসব অ্যাপ ও সার্ভিস CPMS মনিটর করে) কাছে ব্রডকাস্ট করে।

সিপিএম (CPM) অ্যাপস/সার্ভিস এবং সিপিএমএস (CPMS)-এর মধ্যে মধ্যস্থতা করে। অ্যাপস/সার্ভিসগুলোর জন্য onStateChanged() মেথডটি সিপিএম-এর onStateChanged() মেথডের মাধ্যমে সিনক্রোনাসভাবে কল করা হয়। বেশিরভাগ অ্যাপস এবং সার্ভিসকে এই কল থেকে ফিরে আসার আগে তাদের প্রস্তুতি সম্পন্ন করতে হয়। প্রিভিলেজড সার্ভিসগুলোকে PRE_SHUTDOWN_PREPARE , SUSPEND_ENTER , POST_SUSPEND_ENTER এর জন্য ফিরে আসার পর অ্যাসিঙ্ক্রোনাসভাবে তাদের প্রস্তুতি চালিয়ে যাওয়ার অনুমতি দেওয়া হয়। এক্ষেত্রে, প্রিভিলেজড সার্ভিসটির প্রস্তুতি শেষ হলে প্রদত্ত CompletablePowerStateChangeFuture অবজেক্টের উপর complete() কল করার কথা। উল্লেখ্য যে, SHUTDOWN_PREPARE জন্য অ্যাসিঙ্ক্রোনাস প্রস্তুতির অনুমতি নেই। VHAL-এ DEEP_SLEEP_ENTRY পাঠানোর আগে, সিপিএমএস পর্যায়ক্রমে VHAL-এ শাটডাউন স্থগিত করার অনুরোধ পাঠায়।

যখন সমস্ত CPM অবজেক্ট শাটডাউনের প্রস্তুতি সম্পন্ন করে, তখন CPMS, VHAL-কে AP_POWER_STATE_REPORT পাঠায়, যা এরপর VMCU-কে জানায় যে AP সাসপেন্ড হওয়ার জন্য প্রস্তুত। CPMS তার সাসপেন্ড মেথডটিকেও কল করে, যা কার্নেলকে সাসপেন্ড করে।

উপরে বর্ণিত ক্রমটি নীচে চিত্রিত করা হলো:

গভীর ঘুমে প্রবেশ করুন

চিত্র ৩। গভীর ঘুমে প্রবেশ করুন।

CPM দ্বারা প্রদত্ত প্রোগ্রামিং ইন্টারফেস

এই বিভাগে সিস্টেম অ্যাপস এবং সার্ভিসগুলোর জন্য সিপিএম দ্বারা প্রদত্ত জাভা এপিআই বর্ণনা করা হয়েছে। এই এপিআই সিস্টেম সফটওয়্যারকে নিম্নলিখিত কাজগুলো করতে সক্ষম করে:

  • AP-তে পাওয়ার অবস্থার পরিবর্তন পর্যবেক্ষণ করুন।
  • পাওয়ার পলিসি প্রয়োগ করুন।

CPM দ্বারা প্রদত্ত API-গুলো কল করতে এই ধাপগুলো অনুসরণ করুন:

  1. CPM ইনস্ট্যান্সটি পেতে Car API-কে কল করুন।
  2. ধাপ ১-এ তৈরি করা অবজেক্টটিতে উপযুক্ত মেথডটি কল করুন।

একটি CarPowerManager অবজেক্ট তৈরি করুন

একটি CPM অবজেক্ট তৈরি করতে, Car অবজেক্টের getCarManager() মেথডটি কল করুন। এই মেথডটি একটি ফ্যাসাড যা CPM অবজেক্ট তৈরি করতে ব্যবহৃত হয়। একটি CPM অবজেক্ট তৈরি করার জন্য আর্গুমেন্ট হিসেবে android.car.Car.POWER_SERVICE উল্লেখ করুন।

Car car = Car.createCar(this);
CarPowerManager powerManager =
  (CarPowerManager) car.getCarManager(android.car.Car.POWER_SERVICE);

কারপাওয়ারস্টেটলিসেনার এবং নিবন্ধন

সিস্টেম অ্যাপ এবং সার্ভিসগুলো CarPowerManager.CarPowerStateListener ইন্টারফেসটি ইমপ্লিমেন্ট করার মাধ্যমে পাওয়ার স্টেট পরিবর্তনের নোটিফিকেশন পেতে পারে। এই ইন্টারফেসটিতে onStateChanged() নামে একটি মেথড রয়েছে, যা একটি কলব্যাক ফাংশন এবং CPMS-এর পাওয়ার স্টেট পরিবর্তিত হলে এটি কল করা হয়। নিচের উদাহরণটিতে একটি নতুন অ্যানোনিমাস ক্লাস সংজ্ঞায়িত করা হয়েছে যা এই ইন্টারফেসটি ইমপ্লিমেন্ট করে:

private final CarPowerManager.CarPowerStateListener powerListener =
  new CarPowerManager.CarPowerStateListener () {
    @Override
     public void onStateChanged(int state) {
       Log.i(TAG, "onStateChanged() state = " + state);
     }
};

এই লিসেনার অবজেক্টকে পাওয়ার স্টেট ট্রানজিশন নিরীক্ষণ করার নির্দেশ দিতে, একটি নতুন এক্সিকিউশন থ্রেড তৈরি করুন এবং লিসেনার ও এই থ্রেডটিকে CPM অবজেক্টে রেজিস্টার করুন:

executor = new ThreadPerTaskExecutor();
powerManager.setListener(powerListener, executor);

যখন পাওয়ার স্টেট পরিবর্তিত হয়, তখন নতুন পাওয়ার স্টেটকে বোঝানোর জন্য লিসেনার অবজেক্টের onStateChanged() মেথডটিকে একটি ভ্যালু দিয়ে কল করা হয়। অ্যাকচুয়াল ভ্যালু এবং পাওয়ার স্টেটের মধ্যকার অ্যাসোসিয়েশনটি CarPowerManager এ সংজ্ঞায়িত করা আছে এবং তা নিচের টেবিলে দেখানো হয়েছে:

নাম বর্ণনা
স্টেট_অন চালু অবস্থায় প্রবেশ করুন। সিস্টেমটি সম্পূর্ণরূপে কার্যকর।
রাজ্য_শাটডাউন_বাতিল শাটডাউন বাতিল করা হয়েছে এবং পাওয়ার অবস্থা স্বাভাবিক অবস্থায় ফিরে এসেছে।
স্টেট_শাটডাউন_এন্টার অ্যাপগুলোকে গুছিয়ে নিয়ে বন্ধ করার জন্য প্রস্তুত থাকতে হবে।
STATE_POST_SHUTDOWN_ENTER শাটডাউন করার প্রস্তুতি সম্পন্ন হয়েছে এবং VMCU শাটডাউনের জন্য প্রস্তুত। শাটডাউন অবস্থায় প্রবেশ করুন।
রাজ্য_শাটডাউনের_পূর্ব_প্রস্তুতি শাটডাউন প্রক্রিয়ার জন্য অনুরোধ করা হয়েছে কিন্তু সিপিএমএস এখনও প্রক্রিয়াটি শুরু করেনি। ডিসপ্লে এবং অডিও এখনও চালু আছে।
রাজ্য_শাটডাউন_প্রস্তুতি এই সময়কালে গ্যারেজ মোড চালু থাকতে পারে।
STATE_SUSPEND_ENTER অ্যাপগুলো পরিষ্কার হয়ে সাসপেন্ড-টু-র‍্যাম-এর জন্য প্রস্তুত হবে বলে আশা করা হচ্ছে।
STATE_POST_SUSPEND_ENTER সাসপেন্ড-টু-র‍্যাম-এর প্রস্তুতি সম্পন্ন হয়েছে এবং VMCU এখন সাসপেন্ড-টু-র‍্যাম-এর জন্য প্রস্তুত। সাসপেন্ড স্টেটে প্রবেশ করুন।
স্টেট_সাসপেন্ড_এক্সিট স্থগিত অবস্থা থেকে জাগিয়ে তুলুন অথবা বাতিল করা স্থগিত অবস্থা থেকে পুনরায় চালু করুন।
রাজ্য_শীতযাপন_প্রবেশ অ্যাপগুলো নিজেদের গুছিয়ে নিয়ে হাইবারনেশনের জন্য প্রস্তুত হবে বলে আশা করা হচ্ছে।
রাজ্য_শীত_অবসান_পরবর্তী_প্রবেশ হাইবারনেশনের প্রস্তুতি সম্পন্ন হয়েছে এবং VMCU হাইবারনেশনের জন্য প্রস্তুত। হাইবারনেশন অবস্থায় প্রবেশ করুন।
রাজ্য_শীতযাপন_প্রস্থান হাইবারনেশন থেকে জেগে উঠুন অথবা বাতিল করা হাইবারনেশন পুনরায় শুরু করুন।
STATE_WAIT_FOR_VHAL সিস্টেমটি চালু হচ্ছে, কিন্তু ON অবস্থায় যাওয়ার আগে VHAL-এর সাথে যোগাযোগ স্থাপনের জন্য অপেক্ষা করছে।

CarPowerStateListener নিবন্ধন বাতিল

CPM-এ নিবন্ধিত সমস্ত লিসেনার অবজেক্ট অনিবন্ধিত করতে, clearListener মেথডটি কল করুন:

powerManager.clearListener();

আপনার অ্যান্ড্রয়েড বাস্তবায়নে সিস্টেম ইন্টিগ্রেশন

ইন্টিগ্রেটররা নিম্নলিখিত বিষয়গুলির জন্য দায়ী:

  • অ্যান্ড্রয়েড সাসপেন্ড করার জন্য কার্নেল ইন্টারফেস বাস্তবায়ন করা।
  • VHAL ফাংশনগুলো প্রয়োগ করা হচ্ছে:
    • গাড়ি থেকে অ্যান্ড্রয়েডে সাসপেন্ড বা শাটডাউন শুরু করার প্রক্রিয়াটি প্রেরণ করুন।
    • অ্যান্ড্রয়েড থেকে গাড়িতে শাটডাউনের জন্য প্রস্তুত বার্তাটি পাঠান।
    • লিনাক্স কার্নেল ইন্টারফেসের মাধ্যমে অ্যান্ড্রয়েড শাটডাউন বা সাসপেন্ড শুরু করুন।
  • ডিভাইসটি সাসপেন্ড অবস্থায় থাকলে সমস্ত ওয়েকসোর্স নিষ্ক্রিয় আছে কিনা তা নিশ্চিত করুন।
  • অ্যাপগুলো যেন যথেষ্ট দ্রুত বন্ধ হয়, তা নিশ্চিত করুন, যাতে শাটডাউন প্রক্রিয়াটি অনির্দিষ্টকালের জন্য বিলম্বিত না হয়।
  • নিশ্চিত করুন যে BSP পাওয়ার পলিসি অনুযায়ী ডিভাইসের উপাদানগুলো চালু (বা বন্ধ) করে, যাতে সাসপেন্ড বা হাইবারনেশন বাধাগ্রস্ত না হয়।

কার্নেল ইন্টারফেস: /sys/power/state

যখন কোনো অ্যাপ বা সার্ভিস /sys/power/state এ অবস্থিত একটি ফাইলে সাসপেন্ড-টু-র‍্যাম-এর জন্য mem অথবা সাসপেন্ড-টু-ডিস্ক-এর জন্য disk লেখে, তখন AAOS একটি ডিভাইসকে সাসপেন্ড মোডে রাখে। ইন্টিগ্রেটরকে অবশ্যই এমন একটি ফাংশন সরবরাহ করতে হবে যা এই ফাইলটি পর্যবেক্ষণ করে এবং লিনাক্সকে সাসপেন্ড পাওয়ার স্টেটে রাখে। এই ফাংশনটি VMCU-কে জানাতে একটি GPIO পাঠাতে পারে যে ডিভাইসটি সম্পূর্ণরূপে বন্ধ হয়ে গেছে। VHAL কর্তৃক VMCU-তে চূড়ান্ত বার্তা পাঠানো এবং সিস্টেমের সাসপেন্ড বা শাটডাউন মোডে যাওয়ার মধ্যেকার যেকোনো রেস কন্ডিশন দূর করার দায়িত্বও ইন্টিগ্রেটরের।

VHAL দায়িত্ব

VHAL যানবাহন নেটওয়ার্ক এবং অ্যান্ড্রয়েডের মধ্যে একটি ইন্টারফেস প্রদান করে। VHAL:

  • গাড়ি থেকে অ্যান্ড্রয়েডে সাসপেন্ড বা শাটডাউন শুরু করার বার্তাটি প্রেরণ করে।
  • অ্যান্ড্রয়েড থেকে গাড়িতে শাটডাউনের জন্য প্রস্তুত বার্তা পাঠায়।
  • লিনাক্স কার্নেল ইন্টারফেসের মাধ্যমে অ্যান্ড্রয়েডের শাটডাউন বা সাসপেন্ড প্রক্রিয়া শুরু করে।

যখন CPMS, VHAL-কে জানায় যে এটি শাটডাউন করার জন্য প্রস্তুত, তখন VHAL, VMCU-কে 'শাটডাউন রেডি' বার্তাটি পাঠায়। সাধারণত, UART, SPI, এবং USB-এর মতো অন-চিপ পেরিফেরালগুলো এই বার্তাটি প্রেরণ করে। বার্তাটি পাঠানো হয়ে গেলে, CPMS ডিভাইসটিকে সাসপেন্ড বা শাটডাউন করার জন্য কার্নেল কমান্ডকে কল করে। এটি করার আগে, VHAL বা BSP একটি GPIO টগল করে VMCU-কে নির্দেশ দিতে পারে যে ডিভাইসটি থেকে পাওয়ার সংযোগ বিচ্ছিন্ন করা নিরাপদ।

VHAL-কে অবশ্যই নিম্নলিখিত বৈশিষ্ট্যগুলি সমর্থন করতে হবে, যা VHAL-এর মাধ্যমে বিদ্যুৎ ব্যবস্থাপনা নিয়ন্ত্রণ করে:

নাম বর্ণনা
এপি_পাওয়ার_স্টেট_রিপোর্ট অ্যান্ড্রয়েড এই প্রপার্টির মাধ্যমে VehicleApPowerStateReport enum ভ্যালু ব্যবহার করে VMCU-কে স্টেট ট্রানজিশন সম্পর্কে রিপোর্ট করে।
AP_POWER_STATE_REQ VMCU, VehicleApPowerStateReq enum ভ্যালু ব্যবহার করে অ্যান্ড্রয়েডকে বিভিন্ন পাওয়ার স্টেটে পরিবর্তন করার নির্দেশ দিতে এই প্রপার্টিটি ব্যবহার করে।

এপি_পাওয়ার_স্টেট_রিপোর্ট

অ্যান্ড্রয়েডের বর্তমান পাওয়ার ম্যানেজমেন্ট অবস্থা জানাতে এই প্রপার্টিটি ব্যবহার করুন। এই প্রপার্টিতে দুটি পূর্ণসংখ্যা থাকে:

  • int32Values[0] : বর্তমান অবস্থার VehicleApPowerStateReport enum।
  • int32Values[1] : স্থগিত, ঘুমন্ত বা বন্ধ করার জন্য সময় (মিলিসেকেন্ডে)। এই মানের অর্থ প্রথম মানের উপর নির্ভর করে।

প্রথম মানটি নিম্নলিখিত মানগুলির মধ্যে যেকোনো একটি হতে পারে। VehicleApPowerStateReport.aidl আরও সুনির্দিষ্ট বিবরণ রয়েছে, যা hardware/interfaces/automotive/vehicle/aidl/android/hardware/automotive/vehicle এ সংরক্ষিত আছে।

মানের নাম বর্ণনা দ্বিতীয় মান
WAIT_FOR_VHAL AP চালু হচ্ছে এবং VHAL-এর সাথে যোগাযোগ স্থাপন করতে হবে।
গভীর_ঘুমের_প্রবেশ AP গভীর নিদ্রা অবস্থায় প্রবেশ করছে। দ্বিতীয় মানে নির্দিষ্ট করা সময় পর VMCU-এর উচিত AP-টিকে পুনরায় চালু করা। অবশ্যই সেট করতে হবে
গভীর ঘুম থেকে প্রস্থান AP গভীর নিদ্রা অবস্থা থেকে বেরিয়ে আসছে।
শীতযাপনের_প্রবেশ AP হাইবারনেশন অবস্থায় প্রবেশ করছে। দ্বিতীয় মানে উল্লেখিত সময় পর VMCU-এর উচিত AP-টিকে পুনরায় চালু করা। অবশ্যই সেট করতে হবে
হাইবারনেশন_এক্সিট AP হাইবারনেশন অবস্থা থেকে বেরিয়ে আসছে।
শাটডাউন_স্থগিত অ্যান্ড্রয়েড বন্ধ হওয়ার জন্য প্রস্তুত নয়। AP-টি বন্ধ করার আগে VMCU-কে দ্বিতীয় ভ্যালুতে উল্লেখিত সময় পর্যন্ত অপেক্ষা করতে হবে। অ্যান্ড্রয়েড অতিরিক্ত SHUTDOWN_POSTPONE রিপোর্ট জারি করে আরও বিলম্বের অনুরোধ করতে পারে। অবশ্যই সেট করতে হবে
শাটডাউন_প্রস্তুতি অ্যান্ড্রয়েড বন্ধ হওয়ার প্রস্তুতি নিচ্ছে। অবশ্যই সেট করতে হবে
শাটডাউন_স্টার্ট AP বন্ধ হওয়ার জন্য প্রস্তুত। দ্বিতীয় মানে উল্লেখিত সময় পর VMCU-এর উচিত AP-টিকে আবার চালু করা। (VMCU-এর জন্য নির্দিষ্ট সময়ে চালু হওয়ার বৈশিষ্ট্যটি সমর্থন করা বাধ্যতামূলক নয়।) অবশ্যই সেট করতে হবে
শাটডাউন_বাতিল অ্যান্ড্রয়েড শাটডাউন হওয়ার প্রস্তুতি বন্ধ করছে এবং WAIT_FOR_VHAL পর্যায়ে অগ্রসর হবে।
চালু অ্যান্ড্রয়েড স্বাভাবিকভাবে চলছে।

অবস্থাটি স্বয়ংক্রিয়ভাবে অথবা VMCU-এর মাধ্যমে করা অনুরোধের জবাবে নির্ধারণ করা যেতে পারে।

AP_POWER_STATE_REQ

এই প্রপার্টিটি অ্যান্ড্রয়েডকে একটি ভিন্ন পাওয়ার স্টেটে রূপান্তর করার জন্য VMCU দ্বারা পাঠানো হয় এবং এতে দুটি পূর্ণসংখ্যা থাকে:

  • int32Values[0] : VehicleApPowerStateReq enum মান, যা নতুন অবস্থাকে প্রতিনিধিত্ব করে যেখানে রূপান্তর করা হবে।
  • int32Values[1] : VehicleApPowerStateShutdownParam enum মান। এই মানটি শুধুমাত্র একটি SHUTDOWN_PREPARE বার্তার জন্য পাঠানো হয় এবং এতে থাকা বিকল্পগুলি Android-এ প্রেরণ করে।

প্রথম পূর্ণসংখ্যা মানটি সেই নতুন অবস্থাকে নির্দেশ করে যেখানে অ্যান্ড্রয়েড স্থানান্তরিত হবে। এর কার্যপ্রণালী VehicleApPowerStateReq.aidl এ সংজ্ঞায়িত করা হয়েছে এবং নিচে দেওয়া হলো:

মানের নাম বর্ণনা
চালু এপি-র পূর্ণাঙ্গ কার্যক্রম শুরু করা উচিত।
শাটডাউন_প্রস্তুতি AP-টির শাটডাউন হওয়ার জন্য প্রস্তুত হওয়া উচিত। দ্বিতীয় মানটি নির্দেশ করে যে AP-টিকে শাটডাউন বিলম্বিত করার অনুমতি দেওয়া হবে কিনা এবং AP-টি পাওয়ার অফ হবে নাকি ডিপ স্লিপে প্রবেশ করবে।
বাতিল_শাটডাউন এপি-র উচিত বন্ধ হওয়ার প্রস্তুতি ছেড়ে দিয়ে এগিয়ে যাওয়ার প্রস্তুতি নেওয়া।
সমাপ্ত এপি এখন বন্ধ বা স্থগিত করা হবে।

VehicleApPowerStateShutdownParam VehicleApPowerStateShutdownParam.aidl ফাইলে সংজ্ঞায়িত করা হয়েছে। এই enum-টির নিম্নলিখিত উপাদানগুলো রয়েছে:

মানের নাম বর্ণনা
CAN_SLEEP AP সম্পূর্ণভাবে বন্ধ না হয়ে গভীর ঘুমে প্রবেশ করতে পারে। স্থগিত করার অনুমতি আছে।
CAN_HIBERNATE AP সম্পূর্ণভাবে বন্ধ না হয়ে হাইবারনেশনে যেতে পারে। এটি স্থগিত করা যেতে পারে।
শুধুমাত্র শাটডাউন AP বন্ধ হয়ে যাওয়া উচিত। স্থগিত করা যাবে। গভীর ঘুম অনুমোদিত নয়।
অবিলম্বে ঘুমান AP গভীর ঘুমে প্রবেশ করতে পারে, কিন্তু তাকে অবিলম্বে হয় ঘুমাতে হবে অথবা বন্ধ হয়ে যেতে হবে। স্থগিত করার অনুমতি নেই।
অবিলম্বে শীতে যান AP সাসপেন্ড-টু-ডিস্ক মোডে প্রবেশ করতে পারে, কিন্তু অবিলম্বে হয় হাইবারনেট করতে হবে অথবা শাট ডাউন করতে হবে। স্থগিত করার অনুমতি নেই।
অবিলম্বে বন্ধ করুন AP অবশ্যই অবিলম্বে বন্ধ করতে হবে। স্থগিত করা যাবে না। ডিপ স্লিপ অনুমোদিত নয়।

জাগরণের উৎস

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

অ্যাপস

OEM-দের অবশ্যই অ্যাপগুলো এমনভাবে লিখতে হবে যাতে সেগুলো দ্রুত বন্ধ করা যায় এবং এই প্রক্রিয়াটি অনির্দিষ্টকালের জন্য স্থগিত না হয়ে যায়।

পরিশিষ্ট

সোর্স কোড ট্রিতে ডিরেক্টরি

বিষয়বস্তু ডিরেক্টরি
CarPowerManager-সম্পর্কিত কোড। packages/services/Car/car-lib/src/android/car/hardware/power
গাড়ির পাওয়ার ম্যানেজমেন্ট সার্ভিস ইত্যাদি। packages/services/Car/service/src/com/android/car/power
VHAL সম্পর্কিত পরিষেবাসমূহ, যেমন VehicleHal এবং HAlClient packages/services/Car/service/src/com/android/car/hal
VHAL ইন্টারফেস এবং প্রপার্টি সংজ্ঞা। hardware/interfaces/automotive/vehicle/aidl/android/hardware/automotive/vehicle/
CarPowerManager সম্পর্কে ধারণা দেওয়ার জন্য একটি নমুনা অ্যাপ। packages/services/Car/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink

শ্রেণী চিত্র

এই ক্লাস ডায়াগ্রামটি পাওয়ার ম্যানেজমেন্ট সিস্টেমের জাভা ক্লাস এবং ইন্টারফেসগুলো প্রদর্শন করে:

পাওয়ার ক্লাস ডায়াগ্রাম

চিত্র ৪. ক্ষমতা শ্রেণী চিত্র।

বস্তুগত সম্পর্ক

চিত্র ৫ দেখায় কোন কোন অবজেক্টের অন্য অবজেক্টের রেফারেন্স রয়েছে। একটি এজ (edge) বলতে বোঝায় যে সোর্স অবজেক্টটি টার্গেট অবজেক্টের একটি রেফারেন্স ধারণ করে। উদাহরণস্বরূপ, VehicleHAL-এর একটি PropertyHalService অবজেক্টের রেফারেন্স রয়েছে।

বস্তু রেফারেন্স ডায়াগ্রাম

চিত্র ৫. বস্তু নির্দেশক চিত্র।