স্বাস্থ্য 2.1 বাস্তবায়ন করুন

অ্যান্ড্রয়েড 11-এ, সমস্ত healthd কোড libhealthloop এবং libhealth2impl এ রিফ্যাক্টর করা হয়, তারপর health@2.1 HAL বাস্তবায়নের জন্য সংশোধন করা হয়। এই দুটি লাইব্রেরি health@2.0-impl-2.1 , স্বাস্থ্য 2.1-এর পাসথ্রু বাস্তবায়ন দ্বারা স্থিরভাবে সংযুক্ত। স্ট্যাটিকলি লিঙ্কযুক্ত লাইব্রেরিগুলি health@2.0-impl-2.1 healthd এর মতো একই কাজ করতে সক্ষম করে, যেমন healthd_mainloop চালানো এবং পোলিং। init, health@2.1-service hwservicemanager এর কাছে IHealth ইন্টারফেসের একটি বাস্তবায়ন নিবন্ধন করে। একটি Android 8.x বা 9 বিক্রেতা চিত্র এবং একটি Android 11 ফ্রেমওয়ার্ক সহ ডিভাইসগুলি আপগ্রেড করার সময়, বিক্রেতা চিত্রটি health@2.1 পরিষেবা প্রদান নাও করতে পারে৷ পুরানো বিক্রেতার চিত্রগুলির সাথে পশ্চাদগামী সামঞ্জস্য অবনমনের সময়সূচী দ্বারা প্রয়োগ করা হয়৷

পিছনের সামঞ্জস্য নিশ্চিত করতে:

  1. healthd একটি সিস্টেম ডেমন হওয়া সত্ত্বেও hwservicemanagerIHealth নিবন্ধন করে। IHealth সিস্টেম ম্যানিফেস্টে যোগ করা হয়েছে, উদাহরণ নাম "ব্যাকআপ" সহ।
  2. ফ্রেমওয়ার্ক এবং storaged binder পরিবর্তে hwbinder এর মাধ্যমে healthd সাথে যোগাযোগ করে।
  3. ফ্রেমওয়ার্ক এবং storaged জন্য কোড পরিবর্তন করা হয় ইনস্ট্যান্স আনার জন্য "ডিফল্ট" যদি উপলব্ধ থাকে, তাহলে "ব্যাকআপ"।
    • C++ ক্লায়েন্ট কোড libhealthhalutils এ সংজ্ঞায়িত যুক্তি ব্যবহার করে।
    • Java ক্লায়েন্ট কোড HealthServiceWrapper এ সংজ্ঞায়িত যুক্তি ব্যবহার করে।
  4. IHealth/ডিফল্ট ব্যাপকভাবে উপলভ্য হওয়ার পরে এবং Android 8.1 বিক্রেতার ছবিগুলি অবমূল্যায়িত হওয়ার পরে, IHealth/ব্যাকআপ এবং healthd অবচয় করা যেতে পারে। আরও বিশদ বিবরণের জন্য, স্বাস্থ্য অবনমন @1.0 দেখুন।

স্বাস্থ্যের জন্য বোর্ড-নির্দিষ্ট বিল্ড ভেরিয়েবল

BOARD_PERIODIC_CHORES_INTERVAL_* হল বোর্ড-নির্দিষ্ট ভেরিয়েবল যা healthd তৈরি করতে ব্যবহৃত হয়। সিস্টেম/বিক্রেতা বিল্ড স্প্লিটের অংশ হিসাবে, সিস্টেম মডিউলগুলির জন্য বোর্ড-নির্দিষ্ট মানগুলি সংজ্ঞায়িত করা যাবে না । এই মানগুলি অপ্রচলিত ফাংশনে ওভাররাইড করা হত healthd_board_init

health@2.1-এ, বিক্রেতারা হেলথ ইমপ্লিমেন্টেশন ক্লাস কনস্ট্রাক্টরের কাছে যাওয়ার আগে healthd_config স্ট্রাকটে এই দুটি পর্যায়ক্রমিক কাজের ব্যবধানের মানগুলিকে ওভাররাইড করতে পারে। স্বাস্থ্য বাস্তবায়ন শ্রেণীটি android::hardware::health::V2_1::implementation::Health থেকে উত্তরাধিকারসূত্রে পাওয়া উচিত।

স্বাস্থ্য 2.1 পরিষেবা বাস্তবায়ন করুন

স্বাস্থ্য 2.1 পরিষেবা বাস্তবায়নের তথ্যের জন্য, hardware/interfaces/health/2.1/README.md দেখুন।

স্বাস্থ্য ক্লায়েন্ট

health@2.x এর নিম্নলিখিত ক্লায়েন্ট রয়েছে:

  • চার্জার libbatterymonitor এবং healthd_common কোডের ব্যবহার health@2.0-impl এ মোড়ানো হয়।
  • পুনরুদ্ধার libbatterymonitor এর সাথে সংযোগটি health@2.0-impl এ মোড়ানো হয়েছে। BatteryMonitor এ সমস্ত কল Health বাস্তবায়ন ক্লাসে কল দ্বারা প্রতিস্থাপিত হয়।
  • ব্যাটারি ম্যানেজার। BatteryManager.queryProperty(int id) ছিল IBatteryPropertiesRegistrar.getProperty এর একমাত্র ক্লায়েন্ট। IBatteryPropertiesRegistrar.getProperty healthd দ্বারা সরবরাহ করা হয়েছে এবং সরাসরি /sys/class/power_supply পড়ুন।

    নিরাপত্তা বিবেচনায়, অ্যাপগুলিকে সরাসরি স্বাস্থ্য HAL-এ কল করার অনুমতি দেওয়া হয় না। অ্যান্ড্রয়েড 9 এবং উচ্চতর, বাইন্ডার পরিষেবা IBatteryPropertiesRegistrar healthd পরিবর্তে BatteryService দ্বারা সরবরাহ করা হয়। BatteryService অনুরোধ করা তথ্য পুনরুদ্ধার করার জন্য স্বাস্থ্য HAL কে কল অর্পণ করে।

  • ব্যাটারি সার্ভিস। অ্যান্ড্রয়েড 9 এবং উচ্চতর সংস্করণে, vendor থেকে ডিফল্ট স্বাস্থ্য পরিষেবার দৃষ্টান্ত ব্যবহার করতে বা healthd থেকে ব্যাকআপ স্বাস্থ্য পরিষেবার দৃষ্টান্ত ব্যবহার করতে হবে কিনা তা নির্ধারণ করতে BatteryService HealthServiceWrapper ব্যবহার করে৷ BatteryService তারপর IHealth.registerCallback এর মাধ্যমে স্বাস্থ্য ইভেন্টগুলি শোনে।

  • সঞ্চিত। অ্যান্ড্রয়েড 9 এবং উচ্চতর সংস্করণে, vendor কাছ থেকে ডিফল্ট স্বাস্থ্য পরিষেবার দৃষ্টান্ত ব্যবহার করতে হবে নাকি healthd থেকে ব্যাকআপ স্বাস্থ্য পরিষেবার উদাহরণ ব্যবহার করতে হবে তা নির্ধারণ করতে storaged libhealthhalutils ব্যবহার করে। storaged তারপর IHealth.registerCallback এর মাধ্যমে স্বাস্থ্য ইভেন্ট শোনে এবং স্টোরেজ তথ্য পুনরুদ্ধার করে।

SELinux পরিবর্তন

health@2.1 HAL প্ল্যাটফর্মে নিম্নলিখিত SELinux পরিবর্তনগুলি অন্তর্ভুক্ত করে:

  • file_contextsandroid.hardware.health@2.1-service যোগ করে।

তাদের নিজস্ব বাস্তবায়ন সহ ডিভাইসগুলির জন্য, কিছু বিক্রেতা SELinux পরিবর্তন প্রয়োজন হতে পারে। উদাহরণ:

# device/<manufacturer>/<device>/sepolicy/vendor/hal_health_default.te
# Add device specific permissions to hal_health_default domain, especially
# if it links to board-specific libhealthd or implements storage APIs.

কার্নেল ইন্টারফেস

healthd ডেমন এবং ডিফল্ট বাস্তবায়ন android.hardware.health@2.0-impl-2.1 ব্যাটারির তথ্য পুনরুদ্ধার করতে নিম্নলিখিত কার্নেল ইন্টারফেসগুলি অ্যাক্সেস করে:

  • /sys/class/power_supply/*/capacity_level (স্বাস্থ্য 2.1 এ যোগ করা হয়েছে)
  • /sys/class/power_supply/*/capacity
  • /sys/class/power_supply/*/charge_counter
  • /sys/class/power_supply/*/charge_full
  • /sys/class/power_supply/*/charge_full_design (স্বাস্থ্য 2.1 এ যোগ করা হয়েছে)
  • /sys/class/power_supply/*/current_avg
  • /sys/class/power_supply/*/current_max
  • /sys/class/power_supply/*/current_now
  • /sys/class/power_supply/*/cycle_count
  • /sys/class/power_supply/*/health
  • /sys/class/power_supply/*/online
  • /sys/class/power_supply/*/present
  • /sys/class/power_supply/*/status
  • /sys/class/power_supply/*/technology
  • /sys/class/power_supply/*/temp
  • /sys/class/power_supply/*/time_to_full_now (স্বাস্থ্য 2.1 এ যোগ করা হয়েছে)
  • /sys/class/power_supply/*/type
  • /sys/class/power_supply/*/voltage_max
  • /sys/class/power_supply/*/voltage_now

যে কোনো ডিভাইস-নির্দিষ্ট স্বাস্থ্য HAL বাস্তবায়ন যা libbatterymonitor ব্যবহার করে ডিফল্টরূপে এই কার্নেল ইন্টারফেসগুলি অ্যাক্সেস করে, যদি না হেলথ ইমপ্লিমেন্টেশন ক্লাস কনস্ট্রাক্টরে ওভাররাইড করা হয়।

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

Health 2.1-এ ব্যবহৃত কিছু কার্নেল ইন্টারফেস, যেমন /sys/class/power_supply/*/capacity_level এবং /sys/class/power_supply/*/time_to_full_now , ঐচ্ছিক হতে পারে। যাইহোক, কার্নেল ইন্টারফেস অনুপস্থিত হওয়ার ফলে ভুল ফ্রেমওয়ার্ক আচরণ প্রতিরোধ করতে, Health HAL 2.1 পরিষেবা তৈরি করার আগে CL 1398913 চেরি-পিক করার পরামর্শ দেওয়া হয়।

পরীক্ষামূলক

Android 11-এ স্বাস্থ্য@2.1 HAL-এর জন্য বিশেষভাবে লেখা নতুন VTS পরীক্ষা অন্তর্ভুক্ত রয়েছে। যদি একটি ডিভাইস ডিভাইস ম্যানিফেস্টে health@2.1 HAL ঘোষণা করে, তবে এটি অবশ্যই সংশ্লিষ্ট VTS পরীক্ষায় উত্তীর্ণ হবে। ডিফল্ট ইনস্ট্যান্স (ডিভাইসটি সঠিকভাবে HAL প্রয়োগ করে কিনা তা নিশ্চিত করার জন্য) এবং ব্যাকআপ ইনস্ট্যান্স ( healthd অপসারণের আগে সঠিকভাবে কাজ করছে তা নিশ্চিত করার জন্য) উভয়ের জন্যই পরীক্ষা লেখা হয়।

ব্যাটারি তথ্য প্রয়োজনীয়তা

হেলথ 2.0 HAL HAL ইন্টারফেসে প্রয়োজনীয়তার একটি সেট বলে, কিন্তু সংশ্লিষ্ট VTS পরীক্ষাগুলি সেগুলি প্রয়োগ করার ক্ষেত্রে তুলনামূলকভাবে শিথিল। অ্যান্ড্রয়েড 11-এ, Android 11 এবং উচ্চতর সংস্করণের সাথে লঞ্চ হওয়া ডিভাইসগুলিতে নিম্নলিখিত প্রয়োজনীয়তাগুলি প্রয়োগ করতে নতুন VTS পরীক্ষাগুলি যোগ করা হয়েছে:

  • অন্তঃসত্ত্বা এবং গড় ব্যাটারি কারেন্টের একক অবশ্যই মাইক্রোঅ্যাম্প (μA) হতে হবে।
  • তাত্ক্ষণিক এবং গড় ব্যাটারি কারেন্টের চিহ্ন অবশ্যই সঠিক হতে হবে। বিশেষভাবে:
    • বর্তমান == 0 যখন ব্যাটারির স্থিতি UNKNOWN থাকে
    • বর্তমান > 0 যখন ব্যাটারি স্ট্যাটাস CHARGING হচ্ছে
    • বর্তমান <= 0 যখন ব্যাটারির স্থিতি NOT_CHARGING
    • বর্তমান <0 যখন ব্যাটারির স্থিতি DISCHARGING হচ্ছে
    • ব্যাটারি স্ট্যাটাস FULL হলে প্রয়োগ করা হয় না
  • একটি পাওয়ার উত্স সংযুক্ত কিনা তার বিপরীতে ব্যাটারির স্থিতি অবশ্যই সঠিক হতে হবে৷ বিশেষভাবে:
    • ব্যাটারির স্থিতি অবশ্যই CHARGING , NOT_CHARGING , বা FULL এর মধ্যে একটি হতে হবে যদি এবং শুধুমাত্র যদি একটি পাওয়ার উত্স সংযুক্ত থাকে;
    • ব্যাটারির স্থিতি অবশ্যই DISCHARGING হতে হবে যদি এবং শুধুমাত্র যদি একটি পাওয়ার উত্স সংযোগ বিচ্ছিন্ন হয়।

আপনি যদি আপনার বাস্তবায়নে libbatterymonitor ব্যবহার করেন এবং কার্নেল ইন্টারফেস থেকে মানগুলি পাস করেন, তাহলে নিশ্চিত করুন যে sysfs নোডগুলি সঠিক মান রিপোর্ট করছে:

  • নিশ্চিত করুন যে ব্যাটারি কারেন্ট সঠিক চিহ্ন এবং ইউনিট সহ রিপোর্ট করা হয়েছে। এর মধ্যে নিম্নলিখিত sysfs নোডগুলি অন্তর্ভুক্ত রয়েছে:
    • /sys/class/power_supply/*/current_avg
    • /sys/class/power_supply/*/current_max
    • /sys/class/power_supply/*/current_now
    • ইতিবাচক মান ব্যাটারিতে ইনকামিং কারেন্ট নির্দেশ করে।
    • মান মাইক্রোঅ্যাম্পে (μA) হওয়া উচিত।
  • নিশ্চিত করুন যে ব্যাটারি ভোল্টেজ মাইক্রোভোল্টে রিপোর্ট করা হয়েছে (μV)। এর মধ্যে নিম্নলিখিত sysfs নোডগুলি অন্তর্ভুক্ত রয়েছে:
    • /sys/class/power_supply/*/voltage_max
    • /sys/class/power_supply/*/voltage_now
    • মনে রাখবেন যে ডিফল্ট HAL বাস্তবায়ন voltage_now 1000 দ্বারা ভাগ করে এবং মিলিভোল্টে (mV) মান রিপোর্ট করে। @1.0::হেলথইনফো দেখুন।

বিস্তারিত জানার জন্য, লিনাক্স পাওয়ার সাপ্লাই ক্লাস দেখুন।