অ্যান্ড্রয়েড 11-এ, সমস্ত healthd কোড libhealthloop এবং libhealth2impl এ রিফ্যাক্টর করা হয়, তারপর health@2.1 HAL বাস্তবায়নের জন্য সংশোধন করা হয়। এই দুটি লাইব্রেরি health@2.0-impl-2.1 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 পরিষেবা প্রদান নাও করতে পারে৷ পুরানো বিক্রেতার চিত্রগুলির সাথে পশ্চাদগামী সামঞ্জস্য অবনমনের সময়সূচী দ্বারা প্রয়োগ করা হয়৷
পিছনের সামঞ্জস্য নিশ্চিত করতে:
-
healthdএকটি সিস্টেম ডেমন হওয়া সত্ত্বেওhwservicemanagerএIHealthনিবন্ধন করে।IHealthসিস্টেম ম্যানিফেস্টে যোগ করা হয়েছে, উদাহরণ নাম "ব্যাকআপ" সহ। - ফ্রেমওয়ার্ক এবং
storagedbinderপরিবর্তেhwbinderএর মাধ্যমেhealthdসাথে যোগাযোগ করে। - ফ্রেমওয়ার্ক এবং
storagedজন্য কোড পরিবর্তন করা হয় ইনস্ট্যান্স আনার জন্য "ডিফল্ট" যদি উপলব্ধ থাকে, তাহলে "ব্যাকআপ"।- C++ ক্লায়েন্ট কোড
libhealthhalutilsএ সংজ্ঞায়িত যুক্তি ব্যবহার করে। - Java ক্লায়েন্ট কোড
HealthServiceWrapperএ সংজ্ঞায়িত যুক্তি ব্যবহার করে।
- C++ ক্লায়েন্ট কোড
- IHealth/ডিফল্ট ব্যাপকভাবে উপলভ্য হওয়ার পরে এবং Android 8.1 বিক্রেতার ছবিগুলি অবমূল্যায়িত হওয়ার পরে, IHealth/ব্যাকআপ এবং
healthdঅবচয় করা যেতে পারে।
স্বাস্থ্যের জন্য বোর্ড-নির্দিষ্ট বিল্ড ভেরিয়েবল
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.getPropertyhealthdদ্বারা সরবরাহ করা হয়েছে এবং সরাসরি/sys/class/power_supplyপড়ুন।নিরাপত্তা বিবেচনায়, অ্যাপগুলিকে সরাসরি স্বাস্থ্য HAL-এ কল করার অনুমতি দেওয়া হয় না। অ্যান্ড্রয়েড 9 এবং উচ্চতর, বাইন্ডার পরিষেবা
IBatteryPropertiesRegistrarhealthdপরিবর্তেBatteryServiceদ্বারা সরবরাহ করা হয়।BatteryServiceঅনুরোধ করা তথ্য পুনরুদ্ধার করার জন্য স্বাস্থ্য HAL কে কল অর্পণ করে।ব্যাটারি সার্ভিস। অ্যান্ড্রয়েড 9 এবং উচ্চতর সংস্করণে,
vendorথেকে ডিফল্ট স্বাস্থ্য পরিষেবার দৃষ্টান্ত ব্যবহার করতে বাhealthdথেকে ব্যাকআপ স্বাস্থ্য পরিষেবার দৃষ্টান্ত ব্যবহার করতে হবে কিনা তা নির্ধারণ করতেBatteryServiceHealthServiceWrapperব্যবহার করে৷BatteryServiceতারপরIHealth.registerCallbackমাধ্যমে স্বাস্থ্য ইভেন্টগুলি শোনে।সঞ্চিত। অ্যান্ড্রয়েড 9 এবং উচ্চতর সংস্করণে,
vendorকাছ থেকে ডিফল্ট স্বাস্থ্য পরিষেবার দৃষ্টান্ত ব্যবহার করতে হবে নাকিhealthdথেকে ব্যাকআপ স্বাস্থ্য পরিষেবার উদাহরণ ব্যবহার করতে হবে তা নির্ধারণ করতেstoragedlibhealthhalutilsব্যবহার করে।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.
কার্নেল ইন্টারফেস
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হলে প্রয়োগ করা হয় না
- বর্তমান == 0 যখন ব্যাটারির স্থিতি
- একটি পাওয়ার উত্স সংযুক্ত কিনা তার বিপরীতে ব্যাটারির স্থিতি অবশ্যই সঠিক হতে হবে৷ বিশেষভাবে:
- ব্যাটারির স্থিতি অবশ্যই
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_now1000 দ্বারা ভাগ করে এবং মিলিভোল্টে (mV) মান রিপোর্ট করে। @1.0::হেলথইনফো দেখুন।
-
বিস্তারিত জানার জন্য, লিনাক্স পাওয়ার সাপ্লাই ক্লাস দেখুন।