التأكد من أن مكونات الأجهزة والبرامج (مثل العرض والصوت والتفاعل الصوتي) يتم تشغيلها وإيقافها بشكل انتقائي حسب الحاجة، ويوفر AAOS سياسة الطاقة، والتي تتألف من مجموعة من حالات التشغيل وإيقاف التشغيل المتوقعة لمكونات الأجهزة والبرامج. VHAL أو خدمات الموردين التي يوفرها النظام، يمكنها تطبيق سياسة طاقة جديدة عند انتهاء حالة الانتقالات أو عند استيفاء الشروط التي ينتظرونها.
يُسمح بتطبيق سياسة الطاقة في حالات انتظار VHAL و مفعَّل (مع بعض القيود أحيانًا). أثناء الاستعداد لإيقاف التشغيل، يكون "وضع المرآب" قيد التشغيل ويجب أن عدم إزعاجك بتغيير حالة الطاقة. وبالرغم من عدم إمكانية تطبيق سياسة طاقة عادية، فإن يتم تطبيق سياسة الطاقة الخاصة، وهي سياسة طاقة النظام المُسماة "عدم تفاعل المستخدم"، في الاستعداد لإيقاف التشغيل
حالة طاقة AAOS
تتّبع أجهزة AAOS هذا الرسم البياني لحالة الطاقة:
الشكل 1. مخطط حالة طاقة AAOS.
في ما يلي توضيح لكل حالة من حالات الطاقة:
القيمة | الوصف |
---|---|
غير مفعّلة |
|
انتظار VHAL |
|
تشغيل |
|
الاستعداد لإيقاف التشغيل |
|
انتظار انتهاء VHAL |
|
التعليق على ذاكرة الوصول العشوائي (STR) |
|
التعليق على القرص (STD) |
|
كيف يتم تحديد سياسة الطاقة؟
تحدّد جهات التنفيذ سياسات الطاقة في /vendor/etc/automotive/power_policy.xml
الذي:
- تحدِّد هذه السياسة سياسة الطاقة.
- يتم تحديد مجموعات سياسات الطاقة، والتي تتضمن سياسة الطاقة التلقائية ويتم تلقائيًا يتم تطبيقها عند حدوث انتقالات حالة الطاقة.
- يؤدي هذا الخيار إلى إلغاء سياسة طاقة النظام.
سياسة الطاقة
تتكون سياسة الطاقة من مجموعة من حالات الطاقة المتوقعة لمكونات الأجهزة والبرامج. يتيح نظام التشغيل Android Automotive (AAOS) هذه المكوّنات في سياسة الطاقة:
صوت الوسائط الشبكة الإعلانية البلوتوث |
Wi-Fi شبكة الجوّال EtheRNET التوقعات |
الاتصال القصير المدى (NFC) الإدخال التفاعل الصوتي التفاعل VISUAL_INTERACTION |
TRUSTED_DEVICE_DETECTION الموقع الميكروفون وحدة المعالجة المركزية (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) | تشغيل | لا |
التحضير لعملية التعليق
يتم تحديد سلوك سياسة طاقة نظام الإعداد المسبق في هذا الجدول:
المكوّنات | حالة الطاقة | قابل للضبط من قِبل المصنّع الأصلي للجهاز |
---|---|---|
الصوت | غير مفعّلة | لا |
الوسائط | لا ينطبق | لا |
الشاشة | لا ينطبق | لا |
البلوتوث | غير مفعّلة | لا |
شبكة Wi-Fi | غير مفعّلة | لا |
شبكة الجوّال | لا ينطبق | لا |
إيثرنت | لا ينطبق | لا |
القيمة المتوقّعة | لا ينطبق | لا |
الاتصال القصير المدى (NFC) | لا ينطبق | لا |
الإدخال | لا ينطبق | لا |
مساعد Google | لا ينطبق | لا |
تفاعل المستخدم | لا ينطبق | لا |
رصد الجهاز الموثوق به لتسجيل دخول المستخدم | لا ينطبق | لا |
الموقع الجغرافي | غير مفعّلة | لا |
الميكروفون | غير مفعّلة | لا |
وحدة المعالجة المركزية (CPU) | غير مفعّلة | لا |
التفاعل مع VHAL
يشترك البرنامج الخفي لسياسة تشغيل السيارة في طبقة النظام في خاصيتين للاستماع إلىهما. الطلبات من VHAL:
POWER_POLICY_REQ
تكتب VHAL معرّف سياسة الطاقة لهذه السمة.POWER_POLICY_GROUP_REQ
يكتب VHAL معرّف مجموعة سياسة الطاقة على هذا الموقع.
يمكن تغيير سياسة الطاقة الحالية في النظام باستخدام وحدات غير VHAL. في هذه الحالة،
يعدّل البرنامج الخفي لسياسة تشغيل السيارة السمة CURRENT_POWER_POLICY
لإرسال إشعار إلى
التغيير إلى VHAL.
التفاعل مع العمليات الأصلية
كما ذكرنا أعلاه، يتم تشغيل البرنامج الخفي لسياسة طاقة السيارة في طبقة النظام ومن حيث الطاقة إدارة السياسات، يوفر تقريبًا نفس وظائف التكلفة لكل ألف ظهور التي تعمل في طبقة إطار العمل. لنفترض أيضًا أنّه قد تمت مزامنة البرنامج الخفي لسياسة تشغيل السيارة والتكلفة لكل ألف ظهور (CPMS) بالكامل.
يصدِّر البرنامج الخفي لسياسة تشغيل السيارة واجهات AIDL لاستخدامها من خلال HALs وغيرها من العمليات الأصلية. يمكن إشعارهم عند تغيير سياسة طاقة جديدة. بمعنى آخر، عندما يجب تغيير كل منها حالة قوتها.
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