স্বাস্থ্য বাস্তবায়ন 2.1

সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।

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

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

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

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

healthd BOARD_PERIODIC_CHORES_INTERVAL_* হল বোর্ড-নির্দিষ্ট ভেরিয়েবল যা স্বাস্থ্যকর তৈরি করতে ব্যবহৃত হয়। সিস্টেম/ভেন্ডার বিল্ড স্প্লিটের অংশ হিসেবে, সিস্টেম মডিউলের জন্য বোর্ড-নির্দিষ্ট মান সংজ্ঞায়িত করা যাবে না । এই মানগুলি অপ্রচলিত ফাংশনে ওভাররাইড করা হত 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 libbatterymonitor এ মোড়ানো হয়েছে। BatteryMonitor সমস্ত কল Health বাস্তবায়ন ক্লাসে কল দ্বারা প্রতিস্থাপিত হয়।
  • ব্যাটারি ম্যানেজারBatteryManager.queryProperty(int id) ছিল IBatteryPropertiesRegistrar.getProperty এর একমাত্র ক্লায়েন্ট। IBatteryPropertiesRegistrar.getProperty দ্বারা সরবরাহ করা healthd এবং সরাসরি /sys/class/power_supply

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

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

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

SELinux পরিবর্তন

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

  • file_contexts android.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.

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

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

  • /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 , ঐচ্ছিক হতে পারে। যাইহোক, কার্নেল ইন্টারফেস অনুপস্থিত হওয়ার ফলে ভুল ফ্রেমওয়ার্ক আচরণ প্রতিরোধ করতে, হেলথ HAL 2.1 পরিষেবা তৈরি করার আগে CL 1398913 চেরি-পিক করার পরামর্শ দেওয়া হয়।

পরীক্ষামূলক

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

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

হেলথ 2.0 এইচএএল এইচএএল ইন্টারফেসে প্রয়োজনীয়তার একটি সেট বলে, কিন্তু সংশ্লিষ্ট ভিটিএস পরীক্ষাগুলি তাদের প্রয়োগ করার ক্ষেত্রে তুলনামূলকভাবে শিথিল। অ্যান্ড্রয়েড 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::হেলথইনফো দেখুন।

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