سياسة الطاقة

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

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

حالة تشغيل نظام التشغيل Android Automotive ‏(AAOS)

تتّبع أجهزة نظام التشغيل Android Automotive ‏(AAOS) مخطط حالة التشغيل هذا:

مخطّط حالة التشغيل في نظام التشغيل Android Automotive

الشكل 1: مخطط حالة تشغيل نظام التشغيل Android Automotive ‏(AAOS)

في ما يلي وصف لكل حالة تشغيل:

القيمة الوصف
إيقاف
  • لا يتم تزويد معالج التطبيق (AP) والذاكرة والأجهزة الطرفية بالطاقة فعليًا.
في انتظار VHAL
  • عندما يتفاعل السائق مع السيارة (على سبيل المثال، عن طريق فتح باب)، يزوّد VMCU معالج التطبيق والذاكرة والأجهزة الطرفية بالطاقة.
  • ينتقل نظام التشغيل Android Automotive ‏(AAOS) من إحدى الحالات الثلاث (إيقاف أو تعليق إلى ذاكرة الوصول العشوائي (STR) أو في انتظار انتهاء VHAL) ثم يدخل حالة "في انتظار VHAL"، حيث ينتظر التنسيق مع VHAL.
مفعّل
  • يطلب VHAL من نظام التشغيل Android Automotive ‏(AAOS) الدخول في حالة "مفعّل". في هذه الحالة، يكون نظام التشغيل Android Automotive ‏(AAOS) قيد التشغيل بالكامل ويتفاعل مع السائق.
  • يتم التحكّم في الشاشة من خلال سياسة التشغيل وليس من خلال طلبات تشغيل/إيقاف شاشة Android لعوامل الشكل الأخرى.
التحضير لإيقاف التشغيل
  • عندما يتوقف السائق عن القيادة، يطلب VHAL من نظام التشغيل Android Automotive ‏(AAOS) الدخول في حالة "التحضير لإيقاف التشغيل". في هذه الحالة، تكون الشاشة والصوت متوقفَين ولا يتفاعل نظام التشغيل Android Automotive ‏(AAOS) مع السائق. لا يزال نظام Android قيد التشغيل ويمكنه تحديث التطبيقات ونظام Android. عند اكتمال التحديثات (إن وُجدت)، يدخل نظام Android حالة "في انتظار انتهاء VHAL".
في انتظار انتهاء VHAL
  • يُعلم نظام التشغيل Android Automotive ‏(AAOS) واجهة VHAL بأنّه يمكن إيقاف تشغيله. من المتوقّع أن تضع وحدة التحكّم الدقيقة في السيارة (VMCU) هي منظومة على رقاقة (SoC) في وضع "النوم العميق" وأن تزيل الطاقة من نقطة الوصول. يصبح نظام التشغيل Android Automotive ‏(AAOS) بعد ذلك في حالة "تعليق إلى ذاكرة الوصول العشوائي" (STR)، على الرغم من عدم تنفيذ أي رمز.
  • إذا لم تنتهِ واجهة VHAL وعاد السائق، يجب أن تنتقل الوحدة الرئيسية (HU) مباشرةً إلى حالة "في انتظار 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