শক্তি নীতি

হার্ডওয়্যার এবং সফ্টওয়্যার উপাদানগুলি (যেমন ডিসপ্লে, অডিও এবং ভয়েস ইন্টারঅ্যাকশন) প্রয়োজন অনুযায়ী বেছে বেছে চালু এবং বন্ধ করা নিশ্চিত করতে, AAOS একটি পাওয়ার পলিসি প্রদান করে, যা হার্ডওয়্যার এবং সফ্টওয়্যার উপাদানগুলির জন্য প্রত্যাশিত পাওয়ার অন এবং অফ অবস্থার একটি সেট নিয়ে গঠিত। VHAL, বা সিস্টেম-সুবিধাপ্রাপ্ত ভেন্ডর পরিষেবাগুলি, অ্যান্ড্রয়েডের পাওয়ার অবস্থার পরিবর্তন হলে বা তারা যে শর্তগুলির জন্য অপেক্ষা করছে তা পূরণ হলে একটি নতুন পাওয়ার পলিসি প্রয়োগ করতে পারে।

Wait for VHAL এবং On অবস্থায় পাওয়ার পলিসি প্রয়োগ করার অনুমতি আছে (কখনও কখনও কিছু বিধিনিষেধ সহ)। Shutdown Prepare অবস্থায়, Garage Mode চালু থাকে এবং পাওয়ার অবস্থার পরিবর্তনের দ্বারা এতে ব্যাঘাত ঘটানো উচিত নয়। যদিও একটি সাধারণ পাওয়ার পলিসি প্রয়োগ করা যায় না, Shutdown Prepare অবস্থায় একটি বিশেষ পাওয়ার পলিসি, যা হলো ‘no user interaction’ নামক সিস্টেম পাওয়ার পলিসি, তা প্রয়োগ করা হয়।

AAOS ক্ষমতার অবস্থা

AAOS ডিভাইসগুলো এই পাওয়ার স্টেট ডায়াগ্রাম অনুসরণ করে:

AAOS পাওয়ার স্টেট ডায়াগ্রাম

চিত্র 1. AAOS পাওয়ার স্টেট ডায়াগ্রাম।

প্রতিটি ক্ষমতার অবস্থা নিচে বর্ণনা করা হলো:

মূল্য বর্ণনা
বন্ধ
  • অ্যাপ্লিকেশন প্রসেসর (AP), মেমরি এবং পেরিফেরালগুলোতে ভৌতভাবে কোনো বিদ্যুৎ সরবরাহ করা হয় না।
VHAL-এর জন্য অপেক্ষা করুন
  • যখন চালক গাড়িটি ব্যবহার করেন (উদাহরণস্বরূপ, দরজা খোলার মাধ্যমে), তখন VMCU, AP, মেমরি এবং পেরিফেরালগুলোতে বিদ্যুৎ সরবরাহ করে।
  • AAOS তিনটি অবস্থার (বন্ধ, র‍্যামে স্থগিত (STR), VHAL শেষ হওয়ার জন্য অপেক্ষা)) যেকোনো একটি থেকে পরিবর্তিত হয়ে 'VHAL-এর জন্য অপেক্ষা' অবস্থায় প্রবেশ করে, যেখানে এটি VHAL-এর সাথে সমন্বয়ের জন্য অপেক্ষা করে।
চালু
  • VHAL, AAOS-কে 'অন' অবস্থায় প্রবেশ করার নির্দেশ দেয়। এই অবস্থায়, AAOS সম্পূর্ণরূপে চালু থাকে এবং ড্রাইভারের সাথে যোগাযোগ রক্ষা করে।
  • ডিসপ্লে পাওয়ার পলিসি দ্বারা নিয়ন্ত্রিত হয়, অন্য ফর্ম ফ্যাক্টরগুলোর জন্য অ্যান্ড্রয়েড ডিসপ্লে অন/অফ কলের মাধ্যমে নয়।
শাটডাউন প্রস্তুতি
  • যখন ড্রাইভার গাড়ি চালানো বন্ধ করে, তখন VHAL, AAOS-কে 'শাটডাউন প্রিপেয়ার' অবস্থায় প্রবেশ করার নির্দেশ দেয়। এই অবস্থায়, ডিসপ্লে এবং অডিও বন্ধ থাকে এবং AAOS ড্রাইভারের সাথে কোনো যোগাযোগ রাখে না। অ্যান্ড্রয়েড সিস্টেম তখনও চালু থাকে এবং অ্যাপ ও অ্যান্ড্রয়েড সিস্টেম আপডেট করতে পারে। যখন কোনো আপডেট সম্পন্ন হয়, তখন অ্যান্ড্রয়েড সিস্টেম 'ওয়েট ফর VHAL ফিনিশ' অবস্থায় প্রবেশ করে।
VHAL শেষ হওয়া পর্যন্ত অপেক্ষা করুন
  • AAOS, VHAL-কে জানায় যে এটিকে বন্ধ করা যেতে পারে। আশা করা হয় যে, ভেহিকল মাইক্রোকন্ট্রোলার ইউনিট (VMCU) সিস্টেম-অন-চিপ (SoC)-কে ডিপ স্লিপ মোডে রাখবে এবং AP থেকে পাওয়ার সংযোগ বিচ্ছিন্ন করে দেবে। এরপর AAOS, STR স্টেটে থাকে, যদিও কোনো কোড এক্সিকিউট হয় না।
  • যদি VHAL শেষ না হয় এবং ড্রাইভার ফিরে আসে, তাহলে হেড ইউনিট (HU) সরাসরি 'Wait for VHAL' মোডে চলে যাবে।
সাসপেন্ড-টু-র‍্যাম (STR)
  • যানবাহন এবং AP বন্ধ আছে, কোনো কোড কার্যকর হচ্ছে না, এবং AP RAM-এ বিদ্যুৎ সরবরাহ বজায় রয়েছে।
সাসপেন্ড-টু-ডিস্ক (এসটিডি)
  • যানবাহন এবং AP বন্ধ আছে, কোনো কোড কার্যকর হচ্ছে না, এবং প্রসেসিং ইউনিট ও AP RAM-এ কোনো বিদ্যুৎ সরবরাহ বজায় থাকছে না।

বিদ্যুৎ নীতি কীভাবে সংজ্ঞায়িত করা হয়?

বাস্তবায়নকারীরা /vendor/etc/automotive/power_policy.xml ফাইলে পাওয়ার পলিসি নির্ধারণ করেন, যা নিম্নরূপ:

  • বিদ্যুৎ নীতি নির্ধারণ করে।
  • পাওয়ার পলিসি গ্রুপগুলো সংজ্ঞায়িত করে, যার মধ্যে ডিফল্ট পাওয়ার পলিসি অন্তর্ভুক্ত থাকে এবং পাওয়ার অবস্থার পরিবর্তন ঘটলে তা স্বয়ংক্রিয়ভাবে প্রয়োগ হয়।
  • সিস্টেমের পাওয়ার পলিসিকে অগ্রাহ্য করে।

ক্ষমতা নীতি

পাওয়ার পলিসি হলো হার্ডওয়্যার এবং সফ্টওয়্যার উপাদানগুলির একগুচ্ছ প্রত্যাশিত পাওয়ার অবস্থা। AAOS তার পাওয়ার পলিসিতে এই উপাদানগুলিকে সমর্থন করে:

অডিও
মিডিয়া
প্রদর্শন
ব্লুটুথ
ওয়াইফাই
কোষীয়
ইথারনেট
প্রক্ষেপণ
এনএফসি
ইনপুট
ভয়েস ইন্টারঅ্যাকশন
চাক্ষুষ মিথস্ক্রিয়া
বিশ্বস্ত ডিভাইস সনাক্তকরণ
অবস্থান
মাইক্রোফোন
সিপিইউ

বিক্রেতারা পাওয়ার পলিসির সাথে ব্যবহারের জন্য তাদের নিজস্ব কাস্টম পাওয়ার কম্পোনেন্টও সংজ্ঞায়িত করতে পারেন। পাওয়ার পলিসির সাথে একই XML ফাইলে কাস্টম পাওয়ার কম্পোনেন্টগুলো সংজ্ঞায়িত করুন, যেমনটি এই উদাহরণে দেখানো হয়েছে:

<customComponents>
  CUSTOM_COMPONENT_1000
  CUSTOM_COMPONENT_SPECIAL_SENSOR
  CUSTOM_COMPONENT_AUX_INPUT
</customComponents>

ক্ষমতা নীতি গোষ্ঠী

পাওয়ার পলিসি গ্রুপটি পাওয়ার স্টেট পরিবর্তনের সময় স্বয়ংক্রিয়ভাবে প্রয়োগ করার জন্য ডিফল্ট পাওয়ার পলিসি নির্দিষ্ট করে। ভেন্ডররা Wait For VHAL, On, এবং Wait for VHAL Finish (Deep Sleep Entry বা Shutdown Start)-এর জন্য ডিফল্ট পাওয়ার পলিসি নির্ধারণ করতে পারে।

সিস্টেম পাওয়ার নীতি

AAOS দুটি সিস্টেম পাওয়ার পলিসি সমর্থন করে, যেগুলো হলো নো ইউজার ইন্টারঅ্যাকশন এবং সাসপেন্ড প্রেপ। ডিভাইসটি যখন সাইলেন্ট মোড, গ্যারেজ মোড, সাসপেন্ড-টু-র‍্যাম বা সাসপেন্ড-টু-ডিস্ক মোডে যায়, তখন সিস্টেম পাওয়ার পলিসি প্রয়োগ করা হয়।

নিম্নলিখিত সারণিগুলিতে সিস্টেম পাওয়ার পলিসির প্রতিটি উপাদানের আচরণ তালিকাভুক্ত করা হয়েছে। বাস্তবায়নকারীরা নো ইউজার ইন্টারঅ্যাকশন সিস্টেম পাওয়ার পলিসিতে ব্লুটুথ, এনএফসি এবং ট্রাস্টেড ডিভাইস ডিটেকশন ওভাররাইড করতে পারেন। ওভাররাইডগুলি /vendor/etc/power_policy.xml ফাইলে প্রয়োগ করা হয়।

ব্যবহারকারীর কোন মিথস্ক্রিয়া নেই

ব্যবহারকারীর কোনো মিথস্ক্রিয়া ছাড়া সিস্টেম পাওয়ার পলিসির আচরণ এই টেবিলে সংজ্ঞায়িত করা হয়েছে:

উপাদান ক্ষমতার অবস্থা কনফিগারযোগ্য
অডিও বন্ধ না
মিডিয়া বন্ধ না
প্রদর্শন বন্ধ না
ব্লুটুথ বন্ধ হ্যাঁ
ওয়াইফাই চালু না
সেলুলার চালু না
ইথারনেট চালু না
প্রক্ষেপণ বন্ধ না
এনএফসি বন্ধ হ্যাঁ
ইনপুট বন্ধ না
সহকারী বন্ধ না
ব্যবহারকারীর মিথস্ক্রিয়া বন্ধ না
ব্যবহারকারীর লগইনের জন্য বিশ্বস্ত ডিভাইস সনাক্তকরণ চালু হ্যাঁ
অবস্থান বন্ধ না
মাইক্রোফোন বন্ধ না
সিপিইউ চালু না

প্রস্তুতি স্থগিত করুন

সাসপেন্ড প্রেপ সিস্টেম পাওয়ার পলিসির আচরণ এই টেবিলে সংজ্ঞায়িত করা হয়েছে:

উপাদান ক্ষমতার অবস্থা OEM-কনফিগারযোগ্য
অডিও বন্ধ না
মিডিয়া প্রযোজ্য নয় না
প্রদর্শন প্রযোজ্য নয় না
ব্লুটুথ বন্ধ না
ওয়াইফাই বন্ধ না
সেলুলার প্রযোজ্য নয় না
ইথারনেট প্রযোজ্য নয় না
প্রক্ষেপণ প্রযোজ্য নয় না
এনএফসি প্রযোজ্য নয় না
ইনপুট প্রযোজ্য নয় না
সহকারী প্রযোজ্য নয় না
ব্যবহারকারীর মিথস্ক্রিয়া প্রযোজ্য নয় না
ব্যবহারকারীর লগইনের জন্য বিশ্বস্ত ডিভাইস সনাক্তকরণ প্রযোজ্য নয় না
অবস্থান বন্ধ না
মাইক্রোফোন বন্ধ না
সিপিইউ বন্ধ না

VHAL-এর সাথে মিথস্ক্রিয়া

সিস্টেম লেয়ারে চলমান গাড়ির পাওয়ার পলিসি ডেমনটি VHAL থেকে আসা অনুরোধ শোনার জন্য দুটি প্রপার্টি সাবস্ক্রাইব করে:

  • POWER_POLICY_REQ কমান্ডটি VHAL-কে পাওয়ার পলিসি আইডি এই প্রপার্টিতে লিখে দেয়।
  • POWER_POLICY_GROUP_REQ এই প্রপার্টিতে VHAL পাওয়ার পলিসি গ্রুপ আইডি লিখে দেয়।

সিস্টেমের বর্তমান পাওয়ার পলিসি VHAL ছাড়া অন্য মডিউল দ্বারা পরিবর্তন করা যেতে পারে। সেক্ষেত্রে, গাড়ির পাওয়ার পলিসি ডেমন CURRENT_POWER_POLICY প্রপার্টি আপডেট করে VHAL-কে এই পরিবর্তনের বিষয়ে অবহিত করে।

স্থানীয় প্রক্রিয়াগুলির সাথে মিথস্ক্রিয়া

কারপাওয়ারম্যানেজমেন্টসার্ভিস (CPMS) পাওয়ার পলিসি ব্যবস্থাপনার দায়িত্ব কার পাওয়ার পলিসি ডেমন-এর উপর অর্পণ করে। সিস্টেমের পাওয়ার পলিসি সংক্রান্ত তথ্যের একমাত্র নির্ভরযোগ্য উৎস হলো এই ডেমন। কার পাওয়ার পলিসি ডেমন পাওয়ার পলিসির অবস্থা পরিচালনা করে এবং কোনো পরিবর্তন হলে CPMS, VHAL ও অন্যান্য নেটিভ ক্লায়েন্টকে অবহিত করে।

গাড়ির পাওয়ার পলিসি ডেমনটি HAL এবং অন্যান্য নেটিভ প্রসেস দ্বারা ব্যবহারের জন্য AIDL ইন্টারফেস রপ্তানি করে। নতুন পাওয়ার পলিসি পরিবর্তিত হলে তাদেরকে অবহিত করা যেতে পারে। অন্য কথায়, কখন প্রত্যেককে তার পাওয়ার স্টেট পরিবর্তন করতে হবে।

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);
  }

জাভা মডিউলগুলির সাথে মিথস্ক্রিয়া

CarPowerManager পাওয়ার পলিসি ম্যানেজমেন্ট সক্ষম করার জন্য পদ্ধতি প্রদান করে:

  • বর্তমান বিদ্যুৎ নীতি জানুন
  • একটি নতুন বিদ্যুৎ নীতি প্রয়োগ করুন
  • একটি নতুন ক্ষমতা নীতি গোষ্ঠী গঠন করুন

শুধুমাত্র সিস্টেম-সুবিধাপ্রাপ্ত মডিউলগুলোই এই পদ্ধতিগুলো ব্যবহার করতে পারে। যে মডিউলগুলো পাওয়ার পলিসি প্রয়োগ করা হলে অবহিত হতে চায়, তারা CarPowerManager এ একটি পাওয়ার পলিসি পরিবর্তন লিসেনার নিবন্ধন করতে পারে।