لضمان تشغيل وإيقاف مكوّنات الأجهزة والبرامج (مثل الشاشة والصوت والتفاعل الصوتي) بشكل انتقائي حسب الحاجة، يوفّر نظام التشغيل Android Automotive (AAOS) سياسة تشغيل تتألف من مجموعة من حالات التشغيل والإيقاف المتوقّعة لمكوّنات الأجهزة والبرامج. يمكن لـ VHAL أو خدمات مورّد النظام التي تتمتّع بامتيازات النظام تطبيق سياسة تشغيل جديدة عند انتقال حالة تشغيل Android أو عند استيفاء الشروط التي تنتظرها.
يُسمح بتطبيق سياسة التشغيل في حالتَي "في انتظار VHAL" و "مفعّل" (مع بعض القيود في بعض الأحيان). في حالة "التحضير لإيقاف التشغيل"، يكون "وضع المرآب" قيد التشغيل ويجب ألا يتأثر بتغيير حالة التشغيل. على الرغم من أنّه لا يمكن تطبيق سياسة تشغيل عادية، يتم تطبيق سياسة تشغيل خاصة، وهي سياسة تشغيل النظام التي تحمل الاسم "بدون تفاعل المستخدم"، في حالة "التحضير لإيقاف التشغيل".
حالة تشغيل نظام التشغيل Android Automotive (AAOS)
تتّبع أجهزة نظام التشغيل Android Automotive (AAOS) مخطط حالة التشغيل هذا:

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