অ্যান্ড্রয়েড সিস্টেম স্বাস্থ্য

Android 9-এর মধ্যে রয়েছে android.hardware.health HAL 2.0, health@1.0 HAL থেকে একটি বড় সংস্করণ আপগ্রেড৷ এই নতুন HAL এর নিম্নলিখিত সুবিধা রয়েছে:

  • ফ্রেমওয়ার্ক এবং বিক্রেতা কোডের মধ্যে ক্লিনার বিচ্ছেদ।
  • অপ্রয়োজনীয় healthd ডেমনকে অবমূল্যায়ন করে।
  • স্বাস্থ্য তথ্য প্রতিবেদনে বিক্রেতার কাস্টমাইজেশনের জন্য স্বাধীনতার বৃহত্তর ডিগ্রি।
  • শুধু ব্যাটারির চেয়ে বেশি ডিভাইসের স্বাস্থ্যের তথ্য।

Android 11-এর মধ্যে রয়েছে android.hardware.health HAL 2.1, health@2.0 HAL থেকে একটি ছোট সংস্করণ আপগ্রেড। এই নতুন HAL এর নিম্নলিখিত সুবিধা রয়েছে:

  • বাস্তবায়ন করা সহজ
  • বিদ্যমান 2.0 এইচএএল এপিআইগুলির সাথে আরও ভাল সামঞ্জস্য
  • অফ-মোড চার্জিং কোডে আরও ভাল ট্রেবল বিচ্ছেদ
  • ডিভাইসের ব্যাটারি স্বাস্থ্য নির্দেশ করতে ফ্রেমওয়ার্কের জন্য আরও ভাল সমর্থন

Android 13-এ android.hardware.health AIDL HAL, health@2.1 HAL থেকে একটি রূপান্তর অন্তর্ভুক্ত। এই নতুন HAL এর নিম্নলিখিত সুবিধা রয়েছে:

  • অব্যবহৃত চার্জার-সম্পর্কিত APIগুলি সরান৷
  • অব্যবহৃত StorageAttribute এবং সম্পর্কিত ক্ষেত্রগুলি সরান৷
  • ডক চার্জিং সমর্থন করে।

প্রয়োজনীয়তা

Android 9 এবং Android 10 চালিত ডিভাইস

Android 9 এর সাথে লঞ্চ হওয়া ডিভাইসগুলিকে অবশ্যই 2.x HAL প্রদান করতে হবে (এবং 1.0 HAL প্রদান করতে হবে না) বা AIDL HAL প্রদান করতে হবে৷ যে ডিভাইসগুলি Android 9 এর সাথে চালু হচ্ছে না কিন্তু বিক্রেতার ছবিকে টার্গেট ফ্রেমওয়ার্ক কম্প্যাটিবিলিটি ম্যাট্রিক্স সংস্করণ 3 (এন্ড্রয়েড 9 এ প্রকাশিত) তে আপডেট করার পরিকল্পনা করছে তাদের অবশ্যই বিদ্যমান 1.0 HAL বাস্তবায়নগুলি সরিয়ে ফেলতে হবে এবং 2.x HAL বা AIDL HAL প্রদান করতে হবে৷

AOSP-এ 2.0 HAL এবং পুরানো 1.0 HAL থেকে রূপান্তর বাস্তবায়নে সাহায্য করার জন্য ডিজাইন করা একাধিক সহায়ক লাইব্রেরি রয়েছে।

Android 11 এবং Android 12 চালিত ডিভাইস

Android 11-এর সাথে লঞ্চ হওয়া ডিভাইসগুলিকে অবশ্যই 2.1 HAL প্রদান করতে হবে (এবং 1.0 বা 2.0 HAL প্রদান করতে হবে না) বা AIDL HAL প্রদান করতে হবে। যে ডিভাইসগুলি Android 11 এর সাথে চালু হচ্ছে না কিন্তু বিক্রেতার ছবিকে টার্গেট ফ্রেমওয়ার্ক কম্প্যাটিবিলিটি ম্যাট্রিক্স সংস্করণ 5 (Android 11-এ প্রকাশিত) তে আপডেট করার পরিকল্পনা করছে তাদের অবশ্যই বিদ্যমান 2.0 HAL বাস্তবায়নকে সরিয়ে দিতে হবে এবং 2.1 HAL বা AIDL HAL প্রদান করতে হবে। অ্যান্ড্রয়েড 11-এর সাথে চালু না হওয়া এবং বিক্রেতার ছবি আপডেট করার পরিকল্পনা না করা ডিভাইসগুলিকেও 2.1 HAL প্রদান করার পরামর্শ দেওয়া হচ্ছে।

AOSP-এ 2.1 HAL এবং পুরানো 1.0 HAL থেকে রূপান্তর বাস্তবায়নে সাহায্য করার জন্য ডিজাইন করা একাধিক সহায়ক লাইব্রেরি অন্তর্ভুক্ত রয়েছে।

Android 13 এবং উচ্চতর সংস্করণে চলমান ডিভাইস

Android 13 এর সাথে চালু হওয়া ডিভাইসগুলিকে অবশ্যই AIDL HAL প্রদান করতে হবে (এবং HIDL HAL প্রদান করা উচিত নয়)। অ্যান্ড্রয়েড 13-এর সাথে লঞ্চ হচ্ছে না কিন্তু বিক্রেতার ছবিকে টার্গেট ফ্রেমওয়ার্ক কম্প্যাটিবিলিটি ম্যাট্রিক্স ভার্সন 7 (এন্ড্রয়েড 13-এ প্রকাশিত) তে আপডেট করার পরিকল্পনা করছে এমন ডিভাইসগুলিকে অবশ্যই বিদ্যমান HIDL HAL বাস্তবায়নকে সরিয়ে দিতে হবে এবং AIDL HAL প্রদান করতে হবে। Android 13 এর সাথে লঞ্চ না হওয়া এবং বিক্রেতার ছবি আপডেট করার পরিকল্পনা না করা ডিভাইসগুলিকেও AIDL HAL প্রদান করার পরামর্শ দেওয়া হচ্ছে।

ডিভাইসগুলি অবশ্যই HIDL 1.0 HAL প্রদান করবে না৷

AOSP-এ একাধিক সাহায্যকারী লাইব্রেরি রয়েছে যা আপনাকে AIDL HAL এবং পুরানো HIDL HALs থেকে রূপান্তর বাস্তবায়নে সাহায্য করার জন্য ডিজাইন করা হয়েছে।

পরিভাষা

  • health@1.0 : android.hardware.health@1.0 এর সংক্ষিপ্ত রূপ। Android 8.0 এ প্রকাশিত স্বাস্থ্য HIDL HAL সংস্করণ 1.0 এর কথা উল্লেখ করে।
  • health@2.0 : android.hardware.health@2.0 এর সংক্ষিপ্ত রূপ। Android 9 এ প্রকাশিত স্বাস্থ্য HIDL HAL সংস্করণ 2.0 এর কথা উল্লেখ করে।
  • health@2.1 : android.hardware.health@2.1 এর সংক্ষিপ্ত রূপ। Android 11 এ প্রকাশিত স্বাস্থ্য HIDL HAL সংস্করণ 2.1 এর কথা উল্লেখ করে।
  • health AIDL HAL : android.hardware.health এর সংক্ষিপ্ত রূপ।
    • সংস্করণ 1 Android 13 এ প্রকাশিত হয়েছে।
  • চার্জার : অফ-মোড চার্জিং-এ এক্সিকিউটেবল চলমান যা ফোন-চার্জিং অ্যানিমেশন প্রদর্শন করে।
  • পুনরুদ্ধার : পুনরুদ্ধার মোডে এক্সিকিউটেবল চলমান যা ব্যাটারির তথ্য পুনরুদ্ধার করতে হবে।
  • healthd : অ্যান্ড্রয়েডে চলমান লিগ্যাসি ডেমন যা স্বাস্থ্য-সম্পর্কিত তথ্য পুনরুদ্ধার করে এবং ফ্রেমওয়ার্কে প্রদান করে।
  • স্টোরেজড : অ্যান্ড্রয়েডে চলমান ডেমন যা স্টোরেজ তথ্য পুনরুদ্ধার করে এবং ফ্রেমওয়ার্কে সরবরাহ করে।

Android 8.x-এ স্বাস্থ্য

অ্যান্ড্রয়েড 8.x-এ, স্বাস্থ্য উপাদানটি নিম্নলিখিত চিত্রে বিশদভাবে কাজ করে:

Android 8.x-এ স্বাস্থ্য

চিত্র 1 । Android 8.x-এ স্বাস্থ্য

এই চিত্রে:

  • একটি (1) বাইন্ডার কল এবং একটি (1) hwbinder কল হার্ডওয়্যারের সাথে যোগাযোগ করতে ফ্রেমওয়ার্ক দ্বারা ব্যবহৃত হয়।
  • healthd স্ট্যাটিক্যালি libhealthd_android , libbatterymonitor , এবং libbatteryservice এর সাথে লিঙ্ক করে।
  • health@1.0-impl স্থিরভাবে libhealthd. BOARD

প্রতিটি বোর্ড একটি ভিন্ন libhealthd. BOARD ; চার্জার, health@1.0-impl, এবং পুনরুদ্ধারের লিঙ্কটি বিল্ড টাইমে নির্ধারিত হয়।

অন্যান্য মোডের জন্য:

অ্যান্ড্রয়েড 8.x-এ অফ-মোড চারিং এবং পুনরুদ্ধার মোড

চিত্র 2. Android 8.x, অফ-মোড চার্জিং এবং পুনরুদ্ধার মোডে স্বাস্থ্য।

  • চার্জার স্ট্যাটিকভাবে libhealthd. BOARD , libhealthd_charger এবং libbatterymonitor .
  • পুনরুদ্ধার স্ট্যাটিকভাবে libhealthd. BOARD এবং libbatterymonitor .

Android 9 এ স্বাস্থ্য

অ্যান্ড্রয়েড 9-এ, স্বাস্থ্য উপাদানটি নিম্নলিখিত চিত্রে বিশদভাবে কাজ করে: Android 9 এ স্বাস্থ্য

চিত্র 3 । Android 9 এ স্বাস্থ্য।

ফ্রেমওয়ার্ক hwservicemanager থেকে health@2.0 পরিষেবা পুনরুদ্ধার করার চেষ্টা করে। এটি ব্যর্থ হলে, এটি health@1.0 এ কল করে (Android 8.x এ)। লিগ্যাসি কোড পাথ রাখা হয়েছে তাই Android 9 সিস্টেম ইমেজ Android 8.x ভেন্ডর ইমেজের সাথে সামঞ্জস্যপূর্ণ। ফ্রেমওয়ার্ক উভয় HALs থেকে তথ্য পুনরুদ্ধার করে না কারণ ডিভাইসে শুধুমাত্র একটি পরিষেবা সংস্করণ (1.0 বা 2.0) বিদ্যমান থাকতে পারে।

অন্যান্য মোডের জন্য:

অ্যান্ড্রয়েড 9-এ অফ-মোড চারিং এবং পুনরুদ্ধার

চিত্র 4. Android 9-এ স্বাস্থ্য, অফ-মোড চার্জিং এবং পুনরুদ্ধার মোড।

Android 11-এ স্বাস্থ্য

অ্যান্ড্রয়েড 11-এ, স্বাস্থ্যের উপাদানটি নিম্নলিখিত ডায়াগ্রামে বিশদভাবে কাজ করে:

[system]
    | getService()
    V
[health@2.1-service]
        | getService(stub=true)
        V
[      health@2.0-impl-2.1-<device>.so      ]
        |                                  | (device-dependent linkage)
        V                                  V
+---------Helper libs for impl--------+   [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl)    ] |
| [libbatterymonitor (battery)      ] |
+-------------------------------------+

স্বাস্থ্য 2.1 বাস্তবায়ন বিদ্যমান না থাকলে, সিস্টেমটি পূর্ববর্তী বিভাগে বর্ণিত লিগ্যাসি কোডের পথে ফিরে আসে

অন্যান্য মোডের জন্য:

[       charger          ]
    | getService()      |  (legacy code path)
    V                   +-------------------------------------------------+
[health@2.1-service]                                                      |
        | getService(stub=true)                                           |
        V                                                                 |
[      health@2.0-impl-2.1-<device>.so      ]                             |
        |                                  | (device-dependent linkage)   |
        V                                  V                              |
+---------Helper libs for impl--------+   [libhealthd.device]             |
| [libhealthloop (uevent, wakealarm)] |                                   |
| [libhealth2impl (IHealth impl)    ] | <---------------------------------+
| [libbatterymonitor (battery)      ] |
+-------------------------------------+
[recovery]
        | getService() w/o hwservicemanager
        V
[      health@2.0-impl-2.1-<device>.so      ]
        |                                  | (device-dependent linkage)
        V                                  V
+---------Helper libs for impl--------+   [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl)    ] |
| [libbatterymonitor (battery)      ] |
+-------------------------------------+

বিভিন্ন মোডের জন্য নিম্নলিখিত সরলীকৃত চিত্রটি দেখুন:

স্বাস্থ্য HAL 2.1 অবকাঠামো

চিত্র 5. স্বাস্থ্য HAL 2.1 অবকাঠামো।

Android 13-এ স্বাস্থ্য

Android 13-এ স্বাস্থ্য AIDL HAL চালু করা হয়েছে। স্বাস্থ্য উপাদান নিম্নলিখিত ডায়াগ্রামে বিস্তারিত হিসাবে কাজ করে:

স্বাস্থ্য AIDL HAL পরিকাঠামো

চিত্র 6. স্বাস্থ্য এআইডিএল এইচএএল অবকাঠামো।

HIDL HAL ইন্টারফেস 2.0

health@2.0 HAL ফ্রেমওয়ার্কে পুরানো হেলথড ডেমনের মতো একই কার্যকারিতা প্রদান করে। এটি এমন APIগুলিও প্রদান করে যা পূর্বে বাইন্ডার পরিষেবা হিসাবে সরবরাহ করা স্বাস্থ্যের অনুরূপ (যেমন IBatteryPropertiesRegistrar )।

প্রধান ইন্টারফেস, IHealth , নিম্নলিখিত ফাংশন প্রদান করে:

  • registerCallback , IBatteryPropertiesRegistrar.registerListener প্রতিস্থাপন করতে
  • IBatteryPropertiesRegistrar.unregisterListener প্রতিস্থাপন করতে unregisterCallback
  • update , IBatteryPropertiesRegistrar.scheduleUpdate প্রতিস্থাপন করতে
  • IBatteryPropertiesRegistrar.getProperties নিম্নলিখিত দ্বারা প্রতিস্থাপিত হয়:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

উপরন্তু, IHealth বিক্রেতা-নির্দিষ্ট স্টোরেজ সম্পর্কিত তথ্য পুনরুদ্ধার করার জন্য storaged জন্য নিম্নলিখিত নতুন API প্রদান করে:

  • getStorageInfo
  • getDiskStats

একটি নতুন কাঠামো, @2.0::HealthInfo , কলব্যাক এবং getHealthInfo এর মাধ্যমে ফেরত দেওয়া হয়। এই কাঠামোতে health@2.0 HAL এর মাধ্যমে উপলব্ধ সমস্ত ডিভাইস স্বাস্থ্য তথ্য রয়েছে, যার মধ্যে রয়েছে:

  • চার্জিং তথ্য (AC/USB/ওয়্যারলেস, কারেন্ট, ভোল্টেজ, ইত্যাদি)
  • ব্যাটারি তথ্য (উপস্থিতি, ব্যাটারি স্তর, বর্তমান, ভোল্টেজ, চার্জ, প্রযুক্তি, ইত্যাদি)
  • স্টোরেজ তথ্য (স্টোরেজ ডিভাইস তথ্য, ডিস্ক পরিসংখ্যান)

স্বাস্থ্য পরিষেবা 2.0 বাস্তবায়নের তথ্যের জন্য, স্বাস্থ্য 2.0 বাস্তবায়ন দেখুন।

HIDL HAL ইন্টারফেস 2.1

health@2.1 HAL অফ-মোড চার্জিং সমর্থন করে এবং ব্যাটারি সম্পর্কে আরও তথ্য প্রদান করে।

প্রধান ইন্টারফেস, IHealth , নিম্নলিখিত অতিরিক্ত ফাংশন প্রদান করে

  • getHealthConfig : এই HAL এর কনফিগারেশন পুনরুদ্ধার করতে
  • getHealthInfo_2_1 : getHealthInfo তে একটি ছোট সংস্করণ আপগ্রেড
  • shouldKeepScreenOn : চার্জার মোডে স্ক্রীন রাখা উচিত কিনা তা নির্ধারণ করতে

উপরন্তু, @2.1::IHealth এর বাস্তবায়নের জন্য @2.1::IHealthInfoCallback এর উত্তরাধিকারসূত্রে প্রাপ্ত registerCallback এবং unregisterCallback ফাংশনগুলির জন্য সমর্থন করা প্রয়োজন। নতুন কলব্যাক ইন্টারফেস উত্তরাধিকারসূত্রে প্রাপ্ত healthInfoChanged ফাংশনের পরিবর্তে তার healthInfoChanged_2_1 ফাংশন ব্যবহার করে ক্লায়েন্টকে স্বাস্থ্য স্বাস্থ্য তথ্য প্রদান করে।

একটি নতুন কাঠামো, @2.1::HealthInfo , কলব্যাক এবং getHealthInfo_2_1 মাধ্যমে ফেরত দেওয়া হয়। এই স্ট্রাকটে স্বাস্থ্য@2.0 HAL-এর মাধ্যমে অতিরিক্ত ডিভাইস স্বাস্থ্য সংক্রান্ত তথ্য রয়েছে, যার মধ্যে রয়েছে:

  • ব্যাটারি ক্ষমতা স্তর
  • ব্যাটারি চার্জ করার সময় এখন পূর্ণ হবে (সেকেন্ডে)
  • ব্যাটারি ফুল চার্জ ডিজাইন ক্ষমতা (μAh এ)

স্বাস্থ্য HAL বাস্তবায়নের জন্য দরকারী ক্লাসগুলির জন্য নিম্নলিখিত UML চিত্রটি দেখুন:

স্বাস্থ্য 2.1 HAL UML চিত্র

চিত্র 7. স্বাস্থ্য HAL 2.1 UML চিত্র।

স্বাস্থ্য পরিষেবা 2.1 বাস্তবায়নের তথ্যের জন্য, স্বাস্থ্য 2.1 বাস্তবায়ন দেখুন।

AIDL HAL ইন্টারফেস সংস্করণ 1

এপিআই পরিবর্তন

AIDL সংস্করণ 1 HAL HIDL 2.1 HAL-এর অনুরূপ API সমর্থন করে। HIDL 2.1 ইন্টারফেসের তুলনায়, API-তে নিম্নলিখিতগুলি পরিবর্তন করা হয়েছে:

  • HIDL HAL 2.1-এ চালু করা চার্জার-সম্পর্কিত APIগুলি AIDL HAL-এ পোর্ট করা হয় না। যেহেতু অফ-মোড চার্জিংয়ের কার্যকারিতা শুধুমাত্র /vendor পার্টিশনে থাকে, তাই ভেন্ডর ইন্টারফেসে API গুলি প্রয়োজনীয় নয়। অফ-মোড চার্জিং সঠিকভাবে বাস্তবায়ন করতে, নীচের চার্জারটি দেখুন।
  • টাইপ StorageAttribute এবং সম্পর্কিত ক্ষেত্রগুলি সরানো হয়েছে কারণ সেগুলি অব্যবহৃত।
  • chargerDockOnline ডক চার্জিং সমর্থন করতে HealthInfo তে যোগ করা হয়েছে।

বাস্তবায়ন

স্বাস্থ্য HAL বাস্তবায়নের জন্য দরকারী ক্লাসগুলির জন্য নিম্নলিখিত UML চিত্রটি দেখুন:

স্বাস্থ্য AIDL HAL UML চিত্র

চিত্র 8. স্বাস্থ্য AIDL HAL UML চিত্র।

স্বাস্থ্য এআইডিএল সেবা বাস্তবায়নের তথ্যের জন্য, স্বাস্থ্য এআইডিএল এইচএএল বাস্তবায়ন করা দেখুন।

পুনরুদ্ধার

Android 13 পুনরুদ্ধারের ক্ষেত্রে বাইন্ডার সমর্থন করে। পুনরুদ্ধারের জন্য স্বাস্থ্য এআইডিএল পরিষেবা ইনস্টল করা এটিকে পুনরুদ্ধার মোডে চালানোর অনুমতি দেয়।

পুনরুদ্ধারের জন্য স্বাস্থ্য এআইডিএল পরিষেবা ইনস্টল করার তথ্যের জন্য, নিম্নলিখিতগুলি দেখুন:

চার্জার

অফ-মোড চার্জিংয়ের কার্যকারিতা /system থেকে /vendor সরানো হয়েছে। Android 13 এর সাথে চালু হওয়া ডিভাইসগুলির জন্য, যদি তারা অফ-মোড চার্জিং সমর্থন করে, HAL পরিষেবা বাইনারি অবশ্যই চার্জার মোড সমর্থন করে। এটি করতে, প্রয়োগকারী চার্জার পড়ুন।

চার্জার সিস্টেম বৈশিষ্ট্য

বৈশিষ্ট্য ro.charger.* আর charger বাইনারি দ্বারা /vendor দ্বারা পড়া যায় না। যদি আপনার ডিভাইসে ro.charger.* সিস্টেম বৈশিষ্ট্য সেট করা থাকে, তাহলে চার্জারের জন্য সিস্টেম বৈশিষ্ট্যগুলি দেখুন৷