سياسة الطاقة

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

يُسمح بتطبيق سياسة الطاقة في الحالات "الانتظار حتى إشارة VHAL" و"قيد التشغيل" و"الاستعداد للإيقاف المسبق" (مع بعض القيود أحيانًا). على عكس Wait for VHAL وOn، لا يمكن ضبط سياسة طاقة تلقائية لـ Pre Shutdown Prepare في مجموعة سياسات الطاقة. في مرحلة الإعداد الأساسية للإيقاف، يكون "وضع المرآب" قيد التشغيل ويجب ألا يتأثر بتغيير حالة الطاقة. على الرغم من أنّه لا يمكن تطبيق سياسة طاقة عادية، يتم تطبيق سياسة طاقة خاصة، وهي سياسة طاقة النظام المسماة no user interaction، في مرحلة الإعداد للإيقاف الأساسية.

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

تتّبع أجهزة AAOS مخطط حالة الطاقة التالي:

مخطّط حالة الطاقة في نظام التشغيل Android Automotive ‏(AAOS)

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

في ما يلي وصف لكل حالة من حالات الطاقة:

القيمة الوصف
إيقاف
  • لا يتم توفير أي طاقة مادية لمعالج التطبيقات والذاكرة والأجهزة الطرفية.
انتظار VHAL
  • عندما يتفاعل السائق مع المركبة (على سبيل المثال، عن طريق فتح أحد الأبواب)، يوفّر نظام VMCU الطاقة لمعالج التطبيقات والذاكرة والأجهزة الطرفية.
  • ينتقل نظام التشغيل Android Automotive من إحدى الحالات الثلاث (إيقاف، تعليق إلى ذاكرة الوصول العشوائي (STR)، انتظار اكتمال VHAL) ثم ينتقل إلى حالة "انتظار اكتمال VHAL"، حيث ينتظر التنسيق مع VHAL.
مفعّل
  • توجّه VHAL نظام التشغيل AAOS إلى الانتقال إلى الحالة "قيد التشغيل". في هذه الحالة، يكون نظام التشغيل AAOS قيد التشغيل بالكامل ويتفاعل مع السائق.
  • يتم التحكّم في شاشة العرض من خلال سياسة الطاقة وليس من خلال طلبات تفعيل/إيقاف شاشة Android لأشكال الأجهزة الأخرى.
الاستعداد لإيقاف التشغيل
  • عندما يتوقف السائق عن القيادة، يطلب VHAL من AAOS الانتقال إلى وضع "الاستعداد للإيقاف"، والذي يبدأ بمرحلة "الاستعداد للإيقاف المسبق"، تليها مرحلة "الاستعداد للإيقاف الأساسي". في مرحلة التشغيل الأساسية، تكون الشاشة والصوت غير مفعّلين ولا يتفاعل نظام التشغيل Android Automotive مع السائق. يظل نظام Android قيد التشغيل ويمكنه تحديث التطبيقات ونظام Android. عند اكتمال أي تحديثات، ينتقل نظام Android إلى حالة "انتظار اكتمال VHAL".
انتظِر إلى أن تنتهي عملية VHAL
  • يُعلم نظام التشغيل Android Automotive HAL (VHAL) بأنّه يمكن إيقافه. من المتوقّع أن تضع وحدة التحكّم الدقيق في المركبة (VMCU) نظام System-on-Chip (SoC) في وضع "السكون العميق" وأن تزيل الطاقة من معالج التطبيقات (AP). بعد ذلك، يصبح AAOS في حالة STR، على الرغم من عدم تنفيذ أي رمز.
  • إذا لم تنتهِ عملية VHAL وعاد السائق، يجب أن تنتقل وحدة التحكم الرئيسية (HU) مباشرةً إلى Wait for VHAL.
تعليق إلى ذاكرة الوصول العشوائي (STR)
  • تكون المركبة ونقطة الوصول غير نشطتَين، ولا يتم تنفيذ أي رمز برمجي، ويتم الحفاظ على الطاقة في ذاكرة الوصول العشوائي لنقطة الوصول.
Suspend-to-disk (STD)
  • تكون المركبة ونقطة الوصول غير نشطتَين، ولا يتم تنفيذ أي رمز برمجي، ولا يتم الحفاظ على الطاقة في وحدة المعالجة وذاكرة الوصول العشوائي لنقطة الوصول.

كيف يتم تحديد سياسة الطاقة؟

يحدّد المنفّذون سياسات الطاقة في /vendor/etc/automotive/power_policy.xml، التي:

  • تحدّد هذه السمة سياسة الطاقة.
  • تحدّد هذه السمة مجموعات سياسات الطاقة التي تتضمّن سياسة الطاقة التلقائية ويتم تطبيقها تلقائيًا عند حدوث عمليات انتقال بين حالات الطاقة.
  • تتجاوز سياسة طاقة النظام.

سياسة الطاقة

تتألف سياسة الطاقة من مجموعة من حالات الطاقة المتوقّعة لمكوّنات الأجهزة والبرامج. يتيح نظام التشغيل AAOS استخدام المكوّنات التالية في سياسة الطاقة:

الصوت
الوسائط
الشاشة
البلوتوث
‫WIFI
CELLULAR
ETHERNET
PROJECTION
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>

مجموعة سياسات الطاقة

تحدّد مجموعة سياسات الطاقة سياسة الطاقة التلقائية التي يتم تطبيقها تلقائيًا عند الانتقال إلى حالة الطاقة. يمكن للمورّدين تحديد سياسة الطاقة التلقائية لكلّ من Wait for VHAL وOn.

سياسات طاقة النظام

يتوافق نظام التشغيل AAOS مع سياستَي طاقة للنظام، وهما عدم تفاعل المستخدم والاستعداد للتعليق. يتم تطبيق سياسة الطاقة في النظام عندما ينتقل الجهاز إلى &quot;الوضع الصامت&quot; أو &quot;وضع المرآب&quot; أو &quot;التعليق إلى ذاكرة الوصول العشوائي&quot; أو &quot;التعليق إلى القرص&quot;.

تدرِج الجداول التالية سلوك كل مكوّن في سياسة الطاقة في النظام. يمكن للمنفّذين تجاهل سياسة الطاقة الخاصة بالبلوتوث وNFC ورصد الأجهزة الموثوق بها في سياسة الطاقة الخاصة بالنظام بدون تفاعل المستخدم. يتم تطبيق عمليات التجاوز في /vendor/etc/automotive/power_policy.xml.

عدم تفاعل المستخدم

يتم تحديد سلوك سياسة الطاقة عدم تفاعل المستخدم في الجدول التالي:

المكونات حالة التشغيل قابلة للضبط
الصوت إيقاف لا
الوسائط إيقاف لا
الشاشة إيقاف لا
بلوتوث إيقاف نعم
شبكة Wi-Fi مفعّل لا
شبكة الجوّال مفعّل لا
إيثرنت مفعّل لا
العرض إيقاف لا
NFC إيقاف نعم
الإدخال إيقاف لا
المساعد إيقاف لا
تفاعل المستخدم إيقاف لا
رصد الأجهزة الموثوق بها عند تسجيل دخول المستخدم مفعّل نعم
الموقع الجغرافي إيقاف لا
الميكروفون إيقاف لا
وحدة معالجة مركزية (CPU) مفعّل لا

تعليق الإعداد

يتم تحديد سلوك سياسة الطاقة في النظام تعليق الإعداد في هذا الجدول:

المكوّنات حالة التشغيل قابلة للضبط من قِبل المصنّع الأصلي للجهاز
الصوت إيقاف لا
الوسائط لا ينطبق لا
الشاشة لا ينطبق لا
بلوتوث إيقاف لا
شبكة Wi-Fi إيقاف لا
شبكة الجوّال لا ينطبق لا
إيثرنت لا ينطبق لا
العرض لا ينطبق لا
NFC لا ينطبق لا
الإدخال لا ينطبق لا
المساعد لا ينطبق لا
تفاعل المستخدم لا ينطبق لا
رصد الأجهزة الموثوق بها عند تسجيل دخول المستخدم لا ينطبق لا
الموقع الجغرافي إيقاف لا
الميكروفون إيقاف لا
وحدة معالجة مركزية (CPU) إيقاف لا

التفاعل مع VHAL

يشترك برنامج car power policy daemon الذي يعمل في طبقة النظام في سمتَين للاستماع إلى الطلبات الواردة من VHAL:

  • POWER_POLICY_REQ يكتب VHAL رقم تعريف سياسة الطاقة إلى هذه السمة.
  • POWER_POLICY_GROUP_REQ تكتب VHAL رقم تعريف مجموعة سياسات الطاقة إلى هذه السمة.

يمكن تغيير سياسة الطاقة الحالية في النظام من خلال وحدات أخرى غير VHAL. في هذه الحالة، يعدّل البرنامج الخفي لسياسة طاقة السيارة السمة CURRENT_POWER_POLICY لإعلام VHAL بالتغيير.

التفاعل مع العمليات الأصلية

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

يصدّر برنامج car power policy الخفي واجهات 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