لضمان تفعيل مكونات الأجهزة والبرامج (مثل الشاشة والصوت والتفاعل الصوتي) وإيقافها بشكل انتقائي حسب الحاجة، يقدّم نظام التشغيل AAOS سياسة للطاقة تتألف من مجموعة من حالات التشغيل والإيقاف المتوقّعة لمكونات الأجهزة والبرامج. يمكن أن تطبِّق VHAL أو خدمات المورّدين المزوّدة بامتيازات النظام سياسة جديدة للطاقة عند تغيُّر حالة الطاقة في Android أو عند استيفاء الشروط التي تنتظرها.
يُسمح بتطبيق سياسة الطاقة في حالتَي "الانتظار إلى أن يصبح وضع VHAL مفعّلاً" و"تفعيل" (مع بعض القيود في بعض الأحيان). في مرحلة "الاستعداد للإيقاف"، يكون "وضع المرآب" مفعّلاً ومن المفترض أن لا يتأثر بتغيير حالة الطاقة. على الرغم من أنّه لا يمكن تطبيق سياسة طاقة عادية، يتم تطبيق سياسة طاقة خاصة، وهي سياسة طاقة النظام التي تحمل الاسم "بدون تفاعل من المستخدم"، في مرحلة "الاستعداد للإيقاف".
حالة الطاقة في نظام التشغيل Android Automotive
تتّبع أجهزة AAOS الرسم البياني التالي لحالة الطاقة:
الشكل 1: مخطّط حالة الطاقة في نظام التشغيل Android Automotive
في ما يلي وصف كل حالة من حالات الطاقة:
القيمة | الوصف |
---|---|
غير مفعّلة |
|
الانتظار إلى أن يظهر VHAL |
|
تشغيل |
|
الاستعداد للإيقاف |
|
الانتظار إلى أن تكتمل عملية VHAL |
|
تعليق في ذاكرة الوصول العشوائي (STR) |
|
تعليق العمل إلى القرص (STD) |
|
كيف يتم تعريف سياسة الطاقة؟
يحدّد القائمون بالتنفيذ سياسات الطاقة في /vendor/etc/automotive/power_policy.xml
،
التي:
- لتحديد سياسة التشغيل
- تحدِّد مجموعات سياسات الطاقة التي تتضمّن سياسة الطاقة التلقائية ويتم تطبيقها تلقائيًا عند حدوث عمليات النقل في حالة الطاقة.
- تلغي سياسة تشغيل ميزات النظام.
سياسة الطاقة
تتألف سياسة الطاقة من مجموعة من حالات الطاقة المتوقّعة لمكونات الأجهزة والبرامج. يتيح نظام التشغيل AAOS استخدام المكوّنات التالية في سياسة الطاقة:
الصوت الوسائط الشاشة البلوتوث |
WIFI شبكة الجوّال إيثرنت الربط |
NFC INPUT VOICE_INTERACTION VISUAL_INTERACTION |
TRUSTED_DEVICE_DETECTION LOCATION MICROPHONE CPU |
يمكن أيضًا للمورّدين تحديد مكونات الطاقة المخصّصة الخاصة بهم لاستخدامها مع سياسات الطاقة. حدِّد مكوّنات الطاقة المخصّصة في ملف XML نفسه الخاص بسياسات الطاقة، كما هو موضّح في هذا المثال:
<customComponents>CUSTOM_COMPONENT_1000 CUSTOM_COMPONENT_SPECIAL_SENSOR CUSTOM_COMPONENT_AUX_INPUT </customComponents>
مجموعة سياسات الطاقة
يتم تطبيق سياسة الطاقة التلقائية تلقائيًا عند انتقال حالة الطاقة المحدّدة في مجموعة سياسات الطاقة. يمكن للمورّدين تحديد سياسة الطاقة التلقائية لحالات "الانتظار إلى أن ينتهي وضع VHAL" و"التفعيل" و"الانتظار إلى أن ينتهي وضع VHAL" (بدء وضع السكون العميق أو إيقاف التشغيل).
سياسات طاقة النظام
يتيح نظام التشغيل AAOS سياستَي إدارة طاقة النظام، وهما بدون تفاعل المستخدم و تعليق الاستعداد. يتم تطبيق سياسة إدارة الطاقة في النظام عندما يدخل الجهاز في "وضع الصمت" أو "وضع الإيقاف المؤقت" أو "وضع التعليق في ذاكرة الوصول العشوائي" أو "وضع التعليق في القرص".
تسرد الجداول التالية سلوك كل مكوّن في سياسة طاقة النظام.
يمكن للمنفِّذين إلغاء ميزة "اكتشاف الأجهزة الموثوق بها" وتقنية NFC وتقنية البلوتوث في سياسة إدارة الطاقة في النظام التي تعتمد على
عدم تفاعل المستخدم. يتم تطبيق عمليات الاستبدال في
/vendor/etc/power_policy.xml
.
بدون تفاعل من المستخدِم
يتم تحديد سلوك سياسة إدارة الطاقة في النظام بدون تفاعل المستخدم في هذا الجدول:
المكوّنات | حالة الطاقة | قابل للضبط |
---|---|---|
الصوت | غير مفعّلة | لا |
الوسائط | غير مفعّلة | لا |
الشاشة | غير مفعّلة | لا |
البلوتوث | غير مفعّلة | نعم |
شبكة Wi-Fi | تشغيل | لا |
شبكة الجوّال | تشغيل | لا |
إيثرنت | تشغيل | لا |
القيمة المتوقّعة | غير مفعّلة | لا |
NFC | غير مفعّلة | نعم |
الإدخال | غير مفعّلة | لا |
مساعد Google | غير مفعّلة | لا |
تفاعل المستخدم | غير مفعّلة | لا |
رصد الجهاز الموثوق به لتسجيل دخول المستخدم | تشغيل | نعم |
الموقع الجغرافي | غير مفعّلة | لا |
الميكروفون | غير مفعّلة | لا |
وحدة المعالجة المركزية (CPU) | تشغيل | لا |
تعليق الإعداد
يتم تحديد سلوك سياسة الطاقة في النظام suspend prep في هذا الجدول:
المكوّنات | حالة الطاقة | يمكن للمصنع الأصلي للجهاز ضبطها |
---|---|---|
الصوت | غير مفعّلة | لا |
الوسائط | لا ينطبق | لا |
الشاشة | لا ينطبق | لا |
البلوتوث | غير مفعّلة | لا |
شبكة Wi-Fi | غير مفعّلة | لا |
شبكة الجوّال | لا ينطبق | لا |
إيثرنت | لا ينطبق | لا |
القيمة المتوقّعة | لا ينطبق | لا |
NFC | لا ينطبق | لا |
الإدخال | لا ينطبق | لا |
مساعد Google | لا ينطبق | لا |
تفاعل المستخدم | لا ينطبق | لا |
رصد الجهاز الموثوق به لتسجيل دخول المستخدم | لا ينطبق | لا |
الموقع الجغرافي | غير مفعّلة | لا |
الميكروفون | غير مفعّلة | لا |
وحدة المعالجة المركزية (CPU) | غير مفعّلة | لا |
التفاعل مع "الملفّ الشخصي للزائر"
يشترك الخادم الدائم لسياسة تشغيل السيارة الذي يعمل في طبقة النظام في موقعَين للاستماع إلى الطلبات الواردة من VHAL:
POWER_POLICY_REQ
يُسجِّل VHAL رقم تعريف سياسة الطاقة في هذا الحقل.POWER_POLICY_GROUP_REQ
يكتب VHAL رقم تعريف مجموعة سياسة الطاقة في هذا الحقل.
يمكن تغيير سياسة الطاقة الحالية في النظام بواسطة وحدات غير VHAL. في هذه الحالة،
يعدّل الخادم الدائم لسياسة الطاقة في السيارة سمة CURRENT_POWER_POLICY
لإعلام
وحدة التحكّم في حدود الجهد الكهربي (VHAL) بالتغيير.
التفاعل مع العمليات الأصلية
كما ذكرنا أعلاه، يتم تشغيل الخادم الدائم لسياسة الطاقة في السيارة في طبقة النظام، ويقدّم من حيث إدارة سياسة الطاقة الوظائف نفسها تقريبًا التي يوفّرها نظام إدارة الطاقة في السيارة (CPMS) الذي يتم تشغيله في طبقة الإطار. افترض أيضًا أنّه تمت مزامنة الخدمة الدائمة لسياسة تشغيل ميزات السيارة مع نظام إدارة الطاقة بالكامل.
يصدِّر الخادم الدائم لسياسة الطاقة في السيارة واجهات AIDL لاستخدامها من قِبل واجهات HAL والعمليات الأصلية الأخرى. ويمكن إرسال إشعارات إليهم عند تغيير سياسة جديدة للطاقة. بعبارة أخرى، عندما يجب أن يغيّر كل منهما حالة الطاقة.
ICarPowerPolicyServer.aidl
package android.frameworks.automotive.powerpolicy; import android.frameworks.automotive.powerpolicy.CarPowerPolicy; import android.frameworks.automotive.powerpolicy.CarPowerPolicyFilter; import android.frameworks.automotive.powerpolicy.ICarPowerPolicyChangeCallback; import android.frameworks.automotive.powerpolicy.PowerComponent; /** * ICarPowerPolicyServer is an interface implemented by the power policy daemon. * VHAL changes the power policy and the power policy daemon notifies the change to * registered subscribers. When subscribing to policy changes, a filter can be specified so * that the registered callbacks can listen only to a specific power component's change. */ @VintfStability interface ICarPowerPolicyServer { /** * Gets the current power policy. * @throws IllegalStateException if the current policy is not set. */ CarPowerPolicy getCurrentPowerPolicy(); /** * Gets whether the power component is turned on or off. * * @param componentId Power component ID defined in PowerComponent.aidl to check power * state. * @return True if the component's power state is on. * @throws IllegalArgumentException if the componentId is invalid. */ boolean getPowerComponentState(in PowerComponent componentId); /** * Subscribes to power policy change. * Notification is sent to the registered callback when the power policy changes and the * power state of the components which the callback is interested in changes. * * @param callback Callback that is invoked when the power policy changes. * @param filter The list of components which the callback is interested in. * @throws IllegalArgumentException if the callback is already registered. * @throws IllegalStateException if the callback is dead. */ void registerPowerPolicyChangeCallback(in ICarPowerPolicyChangeCallback callback, in CarPowerPolicyFilter filter); /** * Unsubscribes from power policy change. * * @param callback Callback that doesn't want to receive power policy change. * @throws IllegalArgumentException if the callback is not registered. */ void unregisterPowerPolicyChangeCallback(in ICarPowerPolicyChangeCallback callback); /** * Applies the power policy. * *{@code policyId} should be one of power policy IDs defined in * {@code /vendor/etc/automotive/power_policy.xml} or predefined system power policies. * * @param policyId ID of power policy. * @throws IllegalArgumentException if {@code policyId} is invalid. */ void applyPowerPolicy(in @utf8InCpp String policyId); /** * Sets the current power policy group. * *
{@code policyGroupId} should be one of power policy group IDs defined in * {@code /vendor/etc/automotive/power_policy.xml}. * * @param policyGroupId ID of power policy group. * @throws IllegalArgumentException if {@code policyGroupId} is invalid. */ void setPowerPolicyGroup(in @utf8InCpp String policyGroupId); }
ICarPowerPolicyChangeCallback.aidl
package android.frameworks.automotive.powerpolicy; import android.frameworks.automotive.powerpolicy.CarPowerPolicy; /** * ICarPowerPolicyChangeCallback is notified when a power policy changes. */ @VintfStability oneway interface ICarPowerPolicyChangeCallback { /** * Called when a power policy is fully changed. * * @param policy The current policy. */ void onPolicyChanged(in CarPowerPolicy policy); }
التفاعل مع وحدات Java
CarPowerManager
يوفّر طرقًا لتفعيل إدارة سياسة الطاقة:
- الحصول على سياسة الطاقة الحالية
- تطبيق سياسة طاقة جديدة
- ضبط مجموعة جديدة لسياسة التشغيل
لا يمكن استخدام الطرق إلا من خلال الوحدات الممنوحة لها امتيازات النظام. بالنسبة إلى الوحدات التي تريد إعلامها
عند تطبيق سياسة الطاقة، يمكنها تسجيل مستمع لتغيير سياسة الطاقة في
CarPowerManager