Android, वाहन के हिसाब से पावर मैनेजमेंट की सुविधा उपलब्ध कराने के लिए, CarPowerManagementService सेवा और CarPowerManager इंटरफ़ेस उपलब्ध कराता है.
स्टेट ट्रांज़िशन, वाहन की मुख्य कंट्रोल यूनिट (वीएमसीयू) की वजह से ट्रिगर होते हैं. वीएमसीयू से कम्यूनिकेट करने के लिए, इंटिग्रेटर को कई कॉम्पोनेंट लागू करने होंगे. इंटीग्रेटर, वाहन के हार्डवेयर ऐब्स्ट्रैक्शन लेयर (वीएचएएल) और कर्नेल के साथ इंटिग्रेट करने के लिए ज़िम्मेदार होते हैं. इंटीग्रेटर, वेक सोर्स को बंद करने के लिए भी ज़िम्मेदार होते हैं. साथ ही, यह पक्का करते हैं कि शटडाउन को अनिश्चित काल के लिए टाला न जाए.
शब्दावली
इस दस्तावेज़ में इन शब्दों का इस्तेमाल किया गया है:
सिस्टम डिज़ाइन
इस सेक्शन में बताया गया है कि 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 के बारे में बताया गया है. इस एपीआई की मदद से, सिस्टम सॉफ़्टवेयर ये काम कर सकता है:
- एपी में पावर की स्थिति में होने वाले बदलावों पर नज़र रखें.
- पावर से जुड़ी नीतियां लागू करें.
सीपीएम की ओर से उपलब्ध कराए गए एपीआई को कॉल करने के लिए, यह तरीका अपनाएं:
- CPM इंस्टेंस पाने के लिए, Car API को कॉल करें.
- पहले चरण में बनाए गए ऑब्जेक्ट पर सही तरीके को कॉल करें.
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]:VehicleApPowerStateReqenum वैल्यू, जो ट्रांज़िशन की नई स्थिति को दिखाती है.int32Values[1]:VehicleApPowerStateShutdownParamenum वैल्यू. यह वैल्यू सिर्फ़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 ऑब्जेक्ट का रेफ़रंस होता है.

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