पावर मैनेजमेंट

Android, वाहन के हिसाब से पावर मैनेजमेंट की सुविधा उपलब्ध कराने के लिए, CarPowerManagementService सेवा और CarPowerManager इंटरफ़ेस उपलब्ध कराता है.

स्टेट ट्रांज़िशन, वाहन की मुख्य कंट्रोल यूनिट (वीएमसीयू) की वजह से ट्रिगर होते हैं. वीएमसीयू से कम्यूनिकेट करने के लिए, इंटिग्रेटर को कई कॉम्पोनेंट लागू करने होंगे. इंटीग्रेटर, वाहन के हार्डवेयर ऐब्स्ट्रैक्शन लेयर (वीएचएएल) और कर्नेल के साथ इंटिग्रेट करने के लिए ज़िम्मेदार होते हैं. इंटीग्रेटर, वेक सोर्स को बंद करने के लिए भी ज़िम्मेदार होते हैं. साथ ही, यह पक्का करते हैं कि शटडाउन को अनिश्चित काल के लिए टाला न जाए.

शब्दावली

इस दस्तावेज़ में इन शब्दों का इस्तेमाल किया गया है:

ऐप्लिकेशन प्रोसेसर (एपी)
चिप पर सिस्टम (SoC) का हिस्सा.
बोर्ड सपोर्ट पैकेज (बीएसपी)
सॉफ़्टवेयर की वह लेयर जिसमें हार्डवेयर के हिसाब से बूट फ़र्मवेयर और डिवाइस ड्राइवर होते हैं. इनकी मदद से, एम्बेड किए गए ऑपरेटिंग सिस्टम को किसी हार्डवेयर एनवायरमेंट (मदरबोर्ड) में काम करने की अनुमति मिलती है. यह एम्बेड किए गए ऑपरेटिंग सिस्टम के साथ इंटिग्रेट होता है.
CarPowerManager (CPM)
यह ऐप्लिकेशन के लिए एक एपीआई उपलब्ध कराता है, ताकि वे बैटरी की स्थिति में होने वाले बदलावों के लिए रजिस्टर कर सकें.
CarPowerManagementService (CPMS)
यह पावर स्टेट ट्रांज़िशन को मैनेज करता है. साथ ही, पावर स्टेट को कंट्रोल करने के लिए VHAL के साथ इंटरफ़ेस करता है. इसके अलावा, यह सिस्टम को निलंबित करने और बंद करने के लिए फ़ाइनल कॉल करता है.
CarPowerPolicyDaemon (CPPD)
यह पावर से जुड़ी नीतियों को मैनेज करता है. साथ ही, नेटिव प्रोसेस के लिए AIDL इंटरफ़ेस उपलब्ध कराता है, ताकि वे पावर से जुड़ी नीति के लिसनर रजिस्टर कर सकें.
सामान्य मकसद के लिए इनपुट या आउटपुट (GPIO)
सामान्य इस्तेमाल के लिए डिजिटल सिग्नल पिन.
हार्डवेयर ऐब्स्ट्रैक्शन लेयर (एचएएल)
यह एक सॉफ़्टवेयर लेयर होती है. हार्डवेयर के फ़ंक्शन ऐक्सेस करने के लिए, सभी हायर लेवल मॉड्यूल को इससे इंटरैक्ट करना होता है.
हाइबरनेट
इसे Suspend-to-Disk (S2D/S4) भी कहा जाता है. SoC को S4 पावर मोड (हाइबरनेट) में रखा जाता है. साथ ही, रैम के कॉन्टेंट को नॉन-वॉलेटाइल मीडिया (जैसे कि फ़्लैश या डिस्क) में लिखा जाता है. इसके बाद, पूरे सिस्टम को बंद कर दिया जाता है.
मीडिया प्रोसेसर (एमपी)
चिप पर सिस्टम (SoC) देखें.
पावर मैनेजमेंट इंटिग्रेटेड सर्किट (पीएमआईसी)
इस चिप का इस्तेमाल, होस्ट सिस्टम के लिए बिजली की ज़रूरतें मैनेज करने के लिए किया जाता है.
चिप पर सिस्टम (SoC)
यह AAOS को चलाने वाला मुख्य प्रोसेसर होता है. आम तौर पर, इसे Intel, MediaTek, Nvidia, Qualcomm, Renesas, और Texas Instruments जैसे मैन्युफ़ैक्चरर सप्लाई करते हैं.
निलंबित करना
इसे Suspend-to-RAM (S2R या STR) भी कहा जाता है. SoC को S3 पावर मोड में रखा जाता है और सीपीयू को बंद कर दिया जाता है. हालांकि, रैम चालू रहती है.
व्हीकल एचएएल (वीएचएएल)
यह Android API, वाहन के नेटवर्क से इंटरफ़ेस करने के लिए इस्तेमाल किया जाता है. इस मॉड्यूल को लिखने की ज़िम्मेदारी, टियर 1 पार्टनर या ओईएम की होती है. वाहन का नेटवर्क, किसी भी फ़िज़िकल लेयर का इस्तेमाल कर सकता है. जैसे, CAN, LIN, MOST, और Ethernet. वीएचएएल, इस वाहन नेटवर्क को ऐब्स्ट्रैक्ट करता है, ताकि AAOS वाहन के साथ इंटरैक्ट कर सके.
वाहन इंटरफ़ेस प्रोसेसर (वीआईपी)
वाहन का एमसीयू देखें.
व्हीकल मास्टर कंट्रोल यूनिट (वीएमसीयू)
यह एक माइक्रोकंट्रोलर है, जो वाहन के नेटवर्क और एसओसी के बीच इंटरफ़ेस उपलब्ध कराता है. एसओसी, यूएसबी, यूएआरटी, एसपीआई, और जीपीआईओ सिग्नल के ज़रिए वीएमसीयू से कम्यूनिकेट करता है.

सिस्टम डिज़ाइन

इस सेक्शन में बताया गया है कि AAOS, ऐप्लिकेशन प्रोसेसर की पावर स्टेट को कैसे दिखाता है. साथ ही, यह भी बताया गया है कि कौनसे मॉड्यूल, पावर मैनेजमेंट सिस्टम को लागू करते हैं. इस दस्तावेज़ में यह भी बताया गया है कि ये मॉड्यूल एक साथ कैसे काम करते हैं और आम तौर पर स्टेट ट्रांज़िशन कैसे होता है.

कार के पावर की स्थिति बताने वाली मशीन

AAOS, एपी की पावर स्टेट को दिखाने के लिए स्टेट मशीन का इस्तेमाल करता है. स्टेट मशीन, यहां दी गई स्थितियां दिखाती है:

कार के पावर की स्थिति बताने वाली मशीन

पहली इमेज. कार के पावर की स्थिति की मशीन.

सबसे ज़्यादा इस्तेमाल किए जाने वाले ट्रांज़िशन को नीले रंग में हाइलाइट किया जाता है. ये राज्य और सामान्य ट्रांज़िशन हैं:

  • रैम में सेव करके बंद करना. वाहन और SoC बंद हैं. कोई कोड नहीं चलाया जा रहा है. SoC रैम को पावर मिलती रहती है.
  • वीएचएएल के लिए इंतज़ार करें. जब ड्राइवर वाहन से इंटरैक्ट करता है, जैसे कि दरवाज़ा खोलता है, तब वीएमसीय, एसओसी को पावर देता है. AAOS, Suspend-to-RAM मोड से फिर से शुरू होता है और Wait for VHAL मोड में चला जाता है. यहां यह वीएचएएल के साथ कोऑर्डिनेट होने का इंतज़ार करता है.
  • चालू है. VHAL, AAOS को चालू होने की स्थिति में आने के लिए कहता है. इस स्थिति में, AAOS पूरी तरह से काम करता है और ड्राइवर के साथ इंटरैक्ट करता है.
  • Pre Shutdown Prepare. जब ड्राइवर गाड़ी चलाना बंद कर देता है, तो वीएचएएल, AAOS को SHUTDOWN_PREPARE भेजकर, प्री शटडाउन प्रिपेयर फ़ेज़ में जाने के लिए कहता है. इस स्थिति में, पावर स्टेट में होने वाले बदलावों को सुनने वाले लोगों को STATE_PRE_SHUTDOWN_PREPARE मिलता है. यह इस बात की शुरुआती चेतावनी है कि सेवा बंद होने वाली है.
  • बंद करने की तैयारी. जब सभी लिसनर, शटडाउन की तैयारी पूरी कर लेते हैं या शटडाउन से पहले तैयारी करने का टाइम आउट हो जाता है, तो Android सिस्टम, शटडाउन की तैयारी के मुख्य फ़ेज़ में चला जाता है. इस दौरान, लिसनर को STATE_SHUTDOWN_PREPARE के साथ सूचना दी जाती है. डिसप्ले और ऑडियो बंद है. साथ ही, AAOS ड्राइवर के साथ इंटरैक्ट नहीं कर रहा है. Android सिस्टम अब भी चालू रहता है. साथ ही, यह क्लीनअप और अपडेट जैसी कार्रवाइयां कर सकता है. जैसे, गैराज मोड चालू करना.
  • Wait for VHAL Finish. इस समय, AAOS, VHAL को सूचना देता है कि वह बंद होने के लिए तैयार है. वीएमसीयू से उम्मीद की जाती है कि वह एसओसी को डीप स्लीप मोड में रखेगा और ऐप्लिकेशन प्रोसेसर से पावर हटा देगा. इसके बाद, AAOS को Suspend-to-RAM मोड में रखा जाता है. हालांकि, इस दौरान कोई कोड नहीं चलता.

पावर मैनेजमेंट मॉड्यूल

पावर मैनेजमेंट सिस्टम में ये मॉड्यूल शामिल होते हैं:

मॉड्यूल का नाम ब्यौरा
CarPowerManager Java या C++ API.
CarPowerManagementService यह पावर की स्थिति में बदलावों को मैनेज करता है. साथ ही, पावर की नीति के मैनेजमेंट को CarPowerPolicyDaemon को सौंपता है.
CarPowerPolicyDaemon यह पावर से जुड़ी नीतियों को मैनेज करता है और पावर से जुड़ी नीतियों के क्लाइंट से कम्यूनिकेट करता है.
व्हीकल एचएएल वीएमसीयू से इंटरफ़ेस.
कर्नेल RAM या डिस्क में डेटा सेव करने के लिए निलंबित करें.

डीप स्लीप/हाइबरनेशन की सुविधा (Android को RAM/डिस्क में निलंबित करना) कर्नल में लागू की जाती है. यह सुविधा, उपयोगकर्ता के स्पेस में /sys/power/state पर मौजूद एक खास फ़ाइल के तौर पर दिखती है. इस फ़ाइल में mem या disk लिखकर, AAOS को निलंबित किया जाता है.

सीपीएमएस, पावर स्टेट को अन्य सेवाओं और एचएएल के साथ कोऑर्डिनेट करता है. सीपीएमएस, ऊपर बताए गए स्टेट मशीन को लागू करता है. साथ ही, पावर स्टेट में बदलाव होने पर, हर ऑब्ज़र्वर को सूचनाएं भेजता है. यह सेवा, हार्डवेयर को मैसेज भेजने के लिए VHAL का भी इस्तेमाल करती है.

सीपीपीडी, अधिकार से जुड़ी नीतियों के लिए भरोसेमंद सोर्स है. यह डिवाइस के पूरे लाइफ़साइकल के दौरान, पावर से जुड़ी नीतियों को मैनेज करता है. साथ ही, CPMS, VHAL, और पावर से जुड़ी नीतियों में हुए बदलावों के बारे में अन्य नेटिव लिसनर को सूचना देता है. सीपीएमएस, पावर मैनेजमेंट से जुड़ी नीति में बदलाव करने के अनुरोधों को सीपीपीडी को सौंपता है.

सीपीएमएस, वीएमसीयू के साथ कम्यूनिकेट करता है. इसके लिए, वह पावर स्टेट से जुड़ी वीएचएएल प्रॉपर्टी को पढ़ता और लिखता है. जैसे, AP_POWER_STATE_REQ और AP_POWER_STATE_REPORT. ऐप्लिकेशन, सीपीएम में तय किए गए इंटरफ़ेस का इस्तेमाल करके, पावर की स्थिति में होने वाले बदलावों पर नज़र रख सकते हैं. इस इंटरफ़ेस की मदद से, ऐप्लिकेशन पावर पॉलिसी लिसनर रजिस्टर कर सकते हैं. इस Java API को @SystemApi और @hide के साथ एनोटेट किया गया है. इसलिए, यह सिर्फ़ खास ऐप्लिकेशन के लिए उपलब्ध है. इन मॉड्यूल, ऐप्लिकेशन, और सेवाओं के बीच के संबंध को यहां दिखाया गया है:

पावर कॉम्पोनेंट का रेफ़रंस डायग्राम

दूसरी इमेज. पावर कॉम्पोनेंट का रेफ़रंस डायग्राम.

मैसेज का क्रम

पिछले सेक्शन में, पावर मैनेजमेंट सिस्टम में शामिल मॉड्यूल के बारे में बताया गया था. इस सेक्शन में, बैटरी की बचत करने वाला मोड चालू करें और बैटरी की बचत करने वाला मोड बंद करें उदाहरणों का इस्तेमाल करके यह बताया गया है कि मॉड्यूल और ऐप्लिकेशन एक-दूसरे से कैसे कम्यूनिकेट करते हैं:

गहरी नींद में जाना

सिर्फ़ वीएमसीयू, गहरी नींद की सुविधा शुरू कर सकता है. गहरी नींद शुरू होने पर, वीएमसीयू, वीएचएएल के ज़रिए सीपीएम को सूचना भेजता है. सीपीएमएस, स्थिति को SHUTDOWN PREPARE में बदल देता है. साथ ही, इस स्थिति में बदलाव की जानकारी उन सभी मॉनिटर को भेजता है जो सीपीएमएस को मॉनिटर करते हैं. इसके लिए, सीपीएमएस, onStateChanged() तरीके को कॉल करता है. इस तरीके में, सीपीएम से मिला नया स्थिति आईडी शामिल होता है.

सीपीएम, ऐप्लिकेशन/सेवाओं और सीपीएम के बीच मध्यस्थता करता है. ऐप्लिकेशन/सेवाओं के लिए onStateChanged() तरीके को, सीएमपी के onStateChanged() तरीके में सिंक्रोनस तरीके से लागू किया जाता है. ज़्यादातर ऐप्लिकेशन और सेवाओं को इस कॉल से वापस आने से पहले, तैयारी पूरी करनी होती है. PRE_SHUTDOWN_PREPARE, SUSPEND_ENTER, POST_SUSPEND_ENTER के लिए वापस आने के बाद, खास सेवाओं को एसिंक्रोनस तरीके से तैयारी जारी रखने की अनुमति है. इस मामले में, खास अधिकार वाली सेवा को तैयारी पूरी होने पर, दिए गए CompletablePowerStateChangeFuture ऑब्जेक्ट पर complete() को कॉल करना चाहिए. ध्यान दें कि SHUTDOWN_PREPARE के लिए, एसिंक्रोनस तैयारी की अनुमति नहीं है. DEEP_SLEEP_ENTRY को वीएचएएल पर भेजने से पहले, सीपीएमएस समय-समय पर वीएचएएल को शटडाउन पोस्टपोन करने के अनुरोध भेजता है.

जब सभी सीपीएम ऑब्जेक्ट बंद होने की तैयारी पूरी कर लेते हैं, तो सीपीएम, वीएचएएल को AP_POWER_STATE_REPORT भेजता है. इसके बाद, वीएचएएल, वीएमसीयू को सूचना देता है कि एपी को निलंबित किया जा सकता है. CPMS, निलंबन के तरीके को भी कॉल करता है. इससे कर्नल निलंबित हो जाता है.

ऊपर बताई गई प्रोसेस को यहां दिखाया गया है:

गहरी नींद में जाना

तीसरी इमेज. गहरी नींद में जाना.

CPM की ओर से उपलब्ध कराए गए प्रोग्रामिंग इंटरफ़ेस

इस सेक्शन में, सिस्टम ऐप्लिकेशन और सेवाओं के लिए CPM की ओर से उपलब्ध कराए गए Java API के बारे में बताया गया है. इस एपीआई की मदद से, सिस्टम सॉफ़्टवेयर ये काम कर सकता है:

  • एपी में पावर की स्थिति में होने वाले बदलावों पर नज़र रखें.
  • पावर से जुड़ी नीतियां लागू करें.

सीपीएम की ओर से उपलब्ध कराए गए एपीआई को कॉल करने के लिए, यह तरीका अपनाएं:

  1. CPM इंस्टेंस पाने के लिए, Car API को कॉल करें.
  2. पहले चरण में बनाए गए ऑब्जेक्ट पर सही तरीके को कॉल करें.

CarPowerManager ऑब्जेक्ट बनाना

CPM ऑब्जेक्ट बनाने के लिए, कार ऑब्जेक्ट के getCarManager() तरीके को कॉल करें. इस तरीके का इस्तेमाल, सीपीएम ऑब्जेक्ट बनाने के लिए किया जाता है. सीपीएम ऑब्जेक्ट बनाने के लिए, android.car.Car.POWER_SERVICE को आर्ग्युमेंट के तौर पर तय करें.

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

CarPowerStateListener और रजिस्ट्रेशन

सिस्टम ऐप्लिकेशन और सेवाएं, 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_ON चालू होने की स्थिति डालें. सिस्टम पूरी तरह से काम कर रहा है.
STATE_SHUTDOWN_CANCELLED बंद करने की प्रोसेस रद्द कर दी जाती है और डिवाइस को फिर से सामान्य स्थिति में ले जाया जाता है.
STATE_SHUTDOWN_ENTER ऐप्लिकेशन को बंद होने से पहले, अपना डेटा सेव कर लेना चाहिए.
STATE_POST_SHUTDOWN_ENTER शट डाउन करने की तैयारी पूरी हो गई है और वीएमसीयू शट डाउन के लिए तैयार है. शटडाउन की स्थिति डालें.
STATE_PRE_SHUTDOWN_PREPARE खाता बंद करने का अनुरोध किया गया है, लेकिन CPMS ने अब तक प्रोसेस शुरू नहीं की है. डिसप्ले और ऑडियो अब भी चालू हैं
STATE_SHUTDOWN_PREPARE इस दौरान, गराज मोड चालू हो सकता है.
STATE_SUSPEND_ENTER ऐप्लिकेशन से उम्मीद की जाती है कि वे स्टोरेज में जगह बनाएं और RAM में सेव किए जाने के लिए तैयार रहें.
STATE_POST_SUSPEND_ENTER सस्पेंड-टू-रैम की तैयारी पूरी हो गई है और VMCU, सस्पेंड-टू-रैम के लिए तैयार है. निलंबित स्थिति में डालें.
STATE_SUSPEND_EXIT निलंबन से बाहर आना या रद्द किए गए निलंबन को फिर से शुरू करना.
STATE_HIBERNATION_ENTER ऐप्लिकेशन को बंद करने से पहले, उन्हें अपना डेटा मिटा देना चाहिए और बंद होने के लिए तैयार हो जाना चाहिए.
STATE_POST_HIBERNATION_ENTER हाइबरनेशन की तैयारी पूरी हो गई है और वीएमसीयू हाइबरनेशन की स्थिति में जाने के लिए तैयार है.
STATE_HIBERNATION_EXIT स्लीप मोड से बाहर आना या रद्द किए गए स्लीप मोड को फिर से शुरू करना.
STATE_WAIT_FOR_VHAL सिस्टम चालू हो रहा है, लेकिन चालू होने से पहले VHAL से कम्यूनिकेट करने का इंतज़ार कर रहा है.

CarPowerStateListener का रजिस्ट्रेशन रद्द करना

सीपीएम के साथ रजिस्टर किए गए सभी लिसनर ऑब्जेक्ट का रजिस्ट्रेशन रद्द करने के लिए, clearListener तरीके का इस्तेमाल करें:

powerManager.clearListener();

Android पर लागू किए गए सिस्टम इंटिग्रेशन

इंटीग्रेटर इन चीज़ों के लिए ज़िम्मेदार होते हैं:

  • Android को निलंबित करने के लिए, कर्नेल इंटरफ़ेस लागू करना.
  • वीएचएएल फ़ंक्शन लागू करने के लिए:
    • कार से Android में, निलंबित करने या बंद करने की प्रोसेस शुरू करना.
    • Android डिवाइस से कार को बंद करने के लिए तैयार होने का मैसेज भेजें.
    • Linux कर्नल इंटरफ़ेस के ज़रिए, Android को बंद या निलंबित करें.
  • पक्का करें कि डिवाइस के स्लीप मोड में होने पर, सभी वेकसॉर्स बंद हों.
  • पक्का करें कि ऐप्लिकेशन इतनी जल्दी बंद हो जाएं कि शटडाउन की प्रोसेस को अनिश्चित काल के लिए न टाला जाए.
  • पक्का करें कि बीएसपी, पावर से जुड़ी नीति के मुताबिक डिवाइस के कॉम्पोनेंट को चालू (या बंद) करता हो, ताकि स्लीप मोड या हाइबरनेशन को ब्लॉक न किया जा सके

कर्नेल इंटरफ़ेस: /sys/power/state

जब कोई ऐप्लिकेशन या सेवा, /sys/power/state में मौजूद किसी फ़ाइल में suspend-to-RAM के लिए mem या suspend-to-disk के लिए disk लिखती है, तब AAOS डिवाइस को निलंबित मोड में डाल देता है. इंटिग्रेटर को एक ऐसा फ़ंक्शन देना होगा जो इस फ़ाइल पर नज़र रखे और Linux को सस्पेंड पावर स्टेट में रखे. यह फ़ंक्शन, VMCU को GPIO भेज सकता है, ताकि VMCU को सूचना दी जा सके कि डिवाइस पूरी तरह से बंद हो गया है. इंटीग्रेटर की यह भी ज़िम्मेदारी है कि वह VHAL से VMCU को फ़ाइनल मैसेज भेजने और सिस्टम के निलंबित या बंद होने के मोड में जाने के बीच, रेस की स्थिति को हटाए.

वीएचएएल की ज़िम्मेदारी

VHAL, वाहन के नेटवर्क और Android के बीच इंटरफ़ेस उपलब्ध कराता है. वीएचएएल:

  • यह कुकी, कार से Android डिवाइस पर निलंबित करने या बंद करने की प्रोसेस को शुरू करती है.
  • यह कुकी, Android से कार को शटडाउन के लिए तैयार होने का मैसेज भेजती है.
  • यह Linux कर्नल इंटरफ़ेस के ज़रिए, Android को बंद करने या निलंबित करने की प्रोसेस शुरू करता है.

जब सीपीएमएमएस, वीएचएएल को बताता है कि वह बंद होने के लिए तैयार है, तब वीएचएएल, वीएमसीयू को 'शटडाउन के लिए तैयार है' मैसेज भेजता है. आम तौर पर, यूएआरटी, एसपीआई, और यूएसबी जैसे ऑन-चिप पेरिफ़ेरल, मैसेज ट्रांसमिट करते हैं. मैसेज भेजे जाने के बाद, CPMS कर्नल कमांड को कॉल करता है, ताकि डिवाइस को निलंबित या बंद किया जा सके. ऐसा करने से पहले, वीएचएएल या बीएसपी, जीपीआईओ को टॉगल कर सकता है. इससे वीएमसीयू को यह निर्देश मिलता है कि डिवाइस से पावर हटाना सुरक्षित है.

वीएचएएल में ये प्रॉपर्टी काम करनी चाहिए. इनसे वीएचएएल के ज़रिए पावर मैनेजमेंट को कंट्रोल किया जाता है:

नाम ब्यौरा
AP_POWER_STATE_REPORT Android, इस प्रॉपर्टी का इस्तेमाल करके VMCU को स्टेट ट्रांज़िशन की जानकारी देता है. इसके लिए, वह VehicleApPowerStateReport enum वैल्यू का इस्तेमाल करता है.
AP_POWER_STATE_REQ वीएमसीयू इस प्रॉपर्टी का इस्तेमाल करके, Android को अलग-अलग पावर स्टेट में ट्रांज़िशन करने का निर्देश देता है. इसके लिए, वह VehicleApPowerStateReq enum वैल्यू का इस्तेमाल करता है.

AP_POWER_STATE_REPORT

Android की मौजूदा पावर मैनेजमेंट की स्थिति की जानकारी देने के लिए, इस प्रॉपर्टी का इस्तेमाल करें. इस प्रॉपर्टी में दो पूर्णांक शामिल हैं:

  • int32Values[0]: VehicleApPowerStateReport enum, जो मौजूदा स्थिति के बारे में बताता है.
  • int32Values[1]: सूचना को कुछ समय के लिए बंद करने, स्नूज़ करने या बंद करने के लिए मिलीसेकंड में समय. इस वैल्यू का मतलब, पहली वैल्यू पर निर्भर करता है.

पहली वैल्यू में इनमें से कोई एक वैल्यू हो सकती है. VehicleApPowerStateReport.aidl में ज़्यादा जानकारी वाला ब्यौरा होता है. यह hardware/interfaces/automotive/vehicle/aidl/android/hardware/automotive/vehicle में सेव होता है.

वैल्यू का नाम ब्यौरा दूसरी वैल्यू
WAIT_FOR_VHAL एपी शुरू हो रहा है और उसे वीएचएएल से कम्यूनिकेट करना है.
DEEP_SLEEP_ENTRY एपी, डीप स्लीप स्टेट में जा रहा है. दूसरी वैल्यू में तय किए गए समय के बाद, वीएमसीयू को एपी को फिर से चालू करना चाहिए. सेट किया जाना चाहिए
DEEP_SLEEP_EXIT एपी, डीप स्लीप स्टेट से बाहर निकल रहा है.
HIBERNATION_ENTRY एपी, हाइबरनेशन मोड में जा रहा है. दूसरी वैल्यू में तय किए गए समय के बाद, वीएमसीयू को एपी को फिर से चालू करना चाहिए. सेट किया जाना चाहिए
HIBERNATION_EXIT एपी, हाइबरनेशन मोड से बाहर निकल रहा है.
SHUTDOWN_POSTPONE Android बंद होने के लिए तैयार नहीं है. वीएमसीयू को एपी बंद करने से पहले, दूसरी वैल्यू में बताया गया समय तक इंतज़ार करना चाहिए. Android, SHUTDOWN_POSTPONE की अतिरिक्त रिपोर्ट जारी करके, शटडाउन को कुछ और समय के लिए टाले जाने का अनुरोध कर सकता है. सेट किया जाना चाहिए
SHUTDOWN_PREPARE Android बंद होने वाला है. सेट किया जाना चाहिए
SHUTDOWN_START एपी शट डाउन करने के लिए तैयार है. वीएमसीयू को दूसरी वैल्यू में तय किए गए समय के बाद, एपी को फिर से चालू करना चाहिए. (टाइम के हिसाब से चालू होने की सुविधा के लिए, वीएमसीयू की ज़रूरत नहीं होती.) सेट किया जाना चाहिए
SHUTDOWN_CANCELLED Android, शट डाउन करने की तैयारी बंद कर रहा है और WAIT_FOR_VHAL पर चला जाएगा.
चालू है Android सामान्य रूप से काम कर रहा है.

स्टेट को अपने-आप सेट किया जा सकता है. इसके अलावा, वीएमसीयू के ज़रिए किए गए अनुरोध के जवाब में भी इसे सेट किया जा सकता है.

AP_POWER_STATE_REQ

इस प्रॉपर्टी को वीएमसीयू भेजता है, ताकि Android को किसी दूसरी पावर स्टेट में बदला जा सके. इसमें दो पूर्णांक होते हैं:

  • int32Values[0]: VehicleApPowerStateReq enum वैल्यू, जो ट्रांज़िशन की नई स्थिति को दिखाती है.
  • int32Values[1]: VehicleApPowerStateShutdownParam enum वैल्यू. यह वैल्यू सिर्फ़ SHUTDOWN_PREPARE मैसेज के लिए भेजी जाती है. साथ ही, इसमें मौजूद विकल्पों को Android पर ट्रांसमिट करती है.

पहली पूर्णांक वैल्यू, नई स्थिति को दिखाती है जिसमें Android को ट्रांज़िट करना है. सिमैंटिक की परिभाषा VehicleApPowerStateReq.aidl में दी गई है. यहां भी इसकी जानकारी दी गई है:

वैल्यू का नाम ब्यौरा
चालू है एपी को पूरी तरह से काम करना शुरू कर देना चाहिए.
SHUTDOWN_PREPARE एपी को शट डाउन करने की तैयारी करनी चाहिए. दूसरी वैल्यू से पता चलता है कि एपी को बंद होने की प्रोसेस को कुछ समय के लिए रोकने की अनुमति है या नहीं. साथ ही, इससे यह भी पता चलता है कि एपी को बंद होने या डीप स्लीप मोड में जाने की उम्मीद करनी चाहिए या नहीं.
CANCEL_SHUTDOWN एपी को शट डाउन करने की तैयारी बंद कर देनी चाहिए और चालू होने की तैयारी करनी चाहिए.
खत्म अब एपी को शट डाउन कर दिया जाएगा या निलंबित कर दिया जाएगा.

VehicleApPowerStateShutdownParam को VehicleApPowerStateShutdownParam.aidl में तय किया गया है. इस इनम में ये एलिमेंट शामिल हैं:

वैल्यू का नाम ब्यौरा
CAN_SLEEP AP पूरी तरह से बंद होने के बजाय, गहरी नींद में जा सकता है. परीक्षा को स्थगित करने की अनुमति है.
CAN_HIBERNATE एपी पूरी तरह से बंद होने के बजाय, हाइबरनेट मोड में जा सकता है. परीक्षा को स्थगित करने की अनुमति है.
SHUTDOWN_ONLY एपी बंद हो जाना चाहिए. परीक्षा को स्थगित करने की अनुमति है. गहरी नींद लेने की अनुमति नहीं है.
SLEEP_IMMEDIATELY एपी गहरी नींद में जा सकता है, लेकिन उसे तुरंत स्लीप मोड में जाना चाहिए या शट डाउन करना चाहिए. परीक्षा को स्थगित करने की अनुमति नहीं है.
HIBERNATE_IMMEDIATELY एपी, सस्पेंड-टू-डिस्क मोड में जा सकता है. हालांकि, उसे तुरंत हाइबरनेट या बंद हो जाना चाहिए. परीक्षा को स्थगित करने की अनुमति नहीं है.
SHUTDOWN_IMMEDIATELY एपी को तुरंत बंद कर देना चाहिए. परीक्षा को स्थगित करने की अनुमति नहीं है. गहरी नींद लेने की अनुमति नहीं है.

स्क्रीन चालू करने के सोर्स

जब डिवाइस स्लीप मोड में हो, तब इंटिग्रेटर को वेक सोर्स बंद करने चाहिए. डिवाइस के चालू होने की सामान्य वजहों में दिल की धड़कन, मॉडेम, वाई-फ़ाई, और ब्लूटूथ शामिल हैं. एसओसी को चालू करने के लिए, सिर्फ़ वीएमसीयू से मिलने वाला इंटरप्ट ही मान्य वेक सोर्स होना चाहिए. इससे यह माना जाता है कि वीएमसीयू, रिमोट वेकअप इवेंट (जैसे कि रिमोट इंजन स्टार्ट) के लिए मॉडेम को सुन सकता है. अगर इस सुविधा को एपी पर पुश किया जाता है, तो मॉडेम को चालू करने के लिए एक और वेक सोर्स जोड़ना होगा.

ऐप्लिकेशन

OEM को ऐप्लिकेशन इस तरह से बनाने चाहिए कि उन्हें तुरंत बंद किया जा सके. साथ ही, उन्हें इस प्रोसेस को अनिश्चित काल के लिए नहीं रोकना चाहिए.

अपेंडिक्स

सोर्स कोड ट्री में मौजूद डायरेक्ट्री

कॉन्टेंट डायरेक्ट्री
CarPowerManager से जुड़ा कोड. packages/services/Car/car-lib/src/android/car/hardware/power
CarPowerManagementService वगैरह. packages/services/Car/service/src/com/android/car/power
वीएचएएल से जुड़ी सेवाएं, जैसे कि VehicleHal और HAlClient. packages/services/Car/service/src/com/android/car/hal
वीएचएएल इंटरफ़ेस और प्रॉपर्टी की परिभाषाएं. hardware/interfaces/automotive/vehicle/aidl/android/hardware/automotive/vehicle/
CarPowerManager के बारे में कुछ जानकारी देने के लिए सैंपल ऐप्लिकेशन packages/services/Car/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink

क्लास डायग्राम

इस क्लास डायग्राम में, पावर मैनेजमेंट सिस्टम में मौजूद Java क्लास और इंटरफ़ेस दिखाए गए हैं:

पावर क्लास डायग्राम

चौथी इमेज. पावर क्लास डायग्राम.

ऑब्जेक्ट का संबंध

पांचवें फ़िगर में दिखाया गया है कि किन ऑब्जेक्ट में अन्य ऑब्जेक्ट के रेफ़रंस हैं. एज का मतलब है कि सोर्स ऑब्जेक्ट में टारगेट ऑब्जेक्ट का रेफ़रंस है. उदाहरण के लिए, VehicleHAL में PropertyHalService ऑब्जेक्ट का रेफ़रंस होता है.

ऑब्जेक्ट रेफ़रंस डायग्राम

पांचवीं इमेज. ऑब्जेक्ट रेफ़रंस डायग्राम.