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

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

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

शब्दावली

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

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

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

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

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

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

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

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

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

  • रैम में निलंबित करें. वाहन और SoC बंद हैं. कोई कोड नहीं चलाया जा रहा है. SoC रैम में पावर बनी रहती है.
  • VHAL के दिखने का इंतज़ार करें. जब ड्राइवर, वाहन के साथ इंटरैक्ट करता है, जैसे कि दरवाज़ा खोलकर, तो VMCU, SoC को पावर देता है. AAOS, 'RAM में निलंबित करें' मोड से फिर से शुरू होता है और 'VHAL के लिए इंतज़ार करें' मोड में चला जाता है. यहां यह VHAL के साथ समन्वय करने का इंतज़ार करता है.
  • चालू है. VHAL, AAOS को चालू होने का निर्देश देता है. इस स्थिति में, AAOS पूरी तरह से काम कर रहा है और ड्राइवर के साथ इंटरैक्ट कर रहा है.
  • शटडाउन तैयार करें. जब ड्राइवर ड्राइविंग पूरी कर लेता है, तो VHAL, AAOS को शटडाउन की तैयारी करने के लिए कहता है. इस स्थिति में, डिसप्ले और ऑडियो बंद होते हैं और AAOS, ड्राइवर के साथ इंटरैक्ट नहीं करता. Android सिस्टम अब भी काम कर रहा है और ऐप्लिकेशन और Android सिस्टम को अपडेट किया जा सकता है. अगर कोई अपडेट है, तो उसके पूरा होने के बाद Android सिस्टम, 'VHAL के पूरा होने का इंतज़ार करें' मोड में चला जाता है.
  • वीएचएएल की प्रोसेस पूरी होने का इंतज़ार करें. इस दौरान, AAOS, VHAL को बताता है कि वह शट डाउन होने के लिए तैयार है. उम्मीद है कि VMCU, SoC को डीप स्लीप मोड में डाल देगा और ऐप्लिकेशन प्रोसेसर से पावर हटा देगा. इसके बाद, AAOS, RAM में निलंबित होने की स्थिति में होता है. हालांकि, कोई कोड नहीं चल रहा होता.

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

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

मॉड्यूल का नाम जानकारी
CarPowerManager Java या C++ API.
CarPowerManagementService यह पावर स्टेटस के ट्रांज़िशन को मैनेज करता है.
CarPowerPolicyDaemon यह नेटिव पावर नीति क्लाइंट के साथ संपर्क करता है.
वाहन एचएएल VMCU के लिए इंटरफ़ेस.
कर्नेल रैम या डिस्क पर लागू करने के लिए रोकें.

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

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

सीपीएमएस के कंट्रोल में आने तक, सीपीपीडी पावर नीति को मैनेज करता है. यह नेटिव दर्शकों को, पावर नीति में हुए बदलावों की सूचनाएं भी भेजता है.

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

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

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

मैसेज का क्रम

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

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

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

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

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

ऊपर बताए गए क्रम को यहां दिखाया गया है:

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

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

सीपीएम से मिलने वाले प्रोग्रामिंग इंटरफ़ेस

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

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

सीपीएम से मिलने वाले एपीआई को कॉल करने के लिए, यह तरीका अपनाएं:

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

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

सीपीएम ऑब्जेक्ट बनाने के लिए, कार ऑब्जेक्ट के 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() बताया गया है. यह एक कॉलबैक फ़ंक्शन है, जो सीपीएमएस की पावर की स्थिति बदलने पर ट्रिगर होता है. यहां दिए गए उदाहरण में, इंटरफ़ेस को लागू करने वाली एक नई क्लास के बारे में बताया गया है:

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

इस लिसनर ऑब्जेक्ट को पावर स्टेटस ट्रांज़िशन को मॉनिटर करने का निर्देश देने के लिए, एक नई एक्सीक्यूशन टारगेट बनाने के साथ-साथ लिसनर और इस थ्रेड को सीपीएम ऑब्जेक्ट में रजिस्टर करें:

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

पावर की स्थिति बदलने पर, पावर की नई स्थिति दिखाने के लिए, listener ऑब्जेक्ट के onStateChanged() तरीके को किसी वैल्यू के साथ शुरू किया जाता है. CarPowerManager में, असल वैल्यू और बिजली की स्थिति के बीच के संबंध के बारे में बताया गया है. साथ ही, इस बारे में यहां दी गई टेबल में भी जानकारी दी गई है:

नाम जानकारी
STATE_ON चालू होने की स्थिति डालें. सिस्टम पूरी तरह से काम कर रहा है.
STATE_SHUTDOWN_CANCELLED शटडाउन रद्द हो जाता है और डिवाइस की पावर की स्थिति सामान्य हो जाती है.
STATE_SHUTDOWN_ENTER ऐप्लिकेशन बंद हो जाएंगे.
STATE_POST_SHUTDOWN_ENTER शट डाउन की तैयारियां पूरी हो गई हैं और VMCU शट डाउन के लिए तैयार है. बंद होने की स्थिति डालें.
STATE_PRE_SHUTDOWN_PREPARE शटडाउन की प्रोसेस का अनुरोध किया गया है, लेकिन सीपीएमएस ने अब तक प्रोसेस शुरू नहीं की है. डिसप्ले और ऑडियो अब भी चालू हैं
STATE_SHUTDOWN_PREPARE इस दौरान, गैरेज मोड चालू रह सकता है.
STATE_SUSPEND_ENTER ऐप्लिकेशन, स्टोरेज खाली कर देंगे और 'रैम में निलंबित करें' मोड के लिए तैयार हो जाएंगे.
STATE_POST_SUSPEND_ENTER 'रैम में निलंबित करें' मोड के लिए तैयारी पूरी हो गई है और VMCU, 'रैम में निलंबित करें' मोड के लिए तैयार है. निलंबन की स्थिति डालें.
STATE_SUSPEND_EXIT निलंबन की स्थिति से डिवाइस को चालू करना या निलंबन की रद्द की गई स्थिति से डिवाइस को चालू करना.
STATE_HIBERNATION_ENTER ऐप्लिकेशन, डेटा मिटा देंगे और हाइबरनेट मोड में जाने के लिए तैयार हो जाएंगे.
STATE_POST_HIBERNATION_ENTER हाइबरनेट मोड के लिए तैयारी पूरी हो गई है और VMCU, हाइबरनेट मोड में जाने के लिए तैयार है.
STATE_HIBERNATION_EXIT हाइबरनेट मोड से डिवाइस को चालू करना या रद्द किए गए हाइबरनेट मोड से डिवाइस को चालू करना.
STATE_WAIT_FOR_VHAL सिस्टम चालू हो रहा है, लेकिन चालू होने से पहले VHAL से संपर्क करने का इंतज़ार कर रहा है.

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

सीपीएम के लिए रजिस्टर किए गए सभी लिसनर ऑब्जेक्ट को अनरजिस्टर करने के लिए, clearListener विधि को कॉल करें:

powerManager.clearListener();

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

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

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

Kernel इंटरफ़ेस: /sys/power/state

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

VHAL की ज़िम्मेदारी

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

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

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

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

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

AP_POWER_STATE_REPORT

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

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

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

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

स्थिति को अपने-आप सेट किया जा सकता है या VMCU के ज़रिए अनुरोध के जवाब में सेट किया जा सकता है.

AP_POWER_STATE_REQ

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

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

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

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

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

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

डिवाइस को चालू करने के सोर्स

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

ऐप्लिकेशन

OEM को ऐप्लिकेशन लिखते समय सावधानी बरतनी चाहिए, ताकि उन्हें तुरंत बंद किया जा सके और इस प्रोसेस को कभी भी स्थगित न किया जाए.

अन्य जानकारी

सोर्स कोड ट्री में डायरेक्ट्री

कॉन्टेंट डायरेक्ट्री
CarPowerManager से जुड़ा कोड. packages/services/Car/car-lib/src/android/car/hardware/power
CarPowerManagementService वगैरह. 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

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

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

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

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

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

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

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

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