Android 11-এ, সব healthd কোডকে রিফ্যাক্টর করে
libhealthloop ও libhealth2impl-এ পরিবর্তন করা হয়েছে, তারপর health@2.1
HAL প্রয়োগ করার জন্য সেগুলিকে মডিফাই করা হয়েছে। এই দুটি লাইব্রেরি health@2.0-impl-2.1-এর মাধ্যমে স্ট্যাটিক্যালি লিঙ্ক করা আছে,
Health 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সিস্টেম ডেমন হওয়া সত্ত্বেওIHealth-কেhwservicemanager-এ রেজিস্টার করে।IHealthসিস্টেম ম্যানিফেস্টে যোগ করা হয়েছে, যার ইনস্ট্যান্সের নাম "backup"।- ফ্রেমওয়ার্ক ও
storagedbinder-এর পরিবর্তেhwbinder-এর মাধ্যমেhealthd-এর সাথে যোগাযোগ করে। - ফ্রেমওয়ার্কের কোড এবং
storagedপরিবর্তন করে ইনস্ট্যান্স "default" আনা হয়েছে, উপলভ্য থাকলে, তারপর "backup" আনা হয়েছে।- C++ ক্লায়েন্ট কোড
libhealthhalutils-এ সংজ্ঞায়িত লজিক ব্যবহার করে। - Java ক্লায়েন্ট কোড
HealthServiceWrapper-এ সংজ্ঞায়িত যুক্তি ব্যবহার করে।
- C++ ক্লায়েন্ট কোড
- iHealth/default ব্যাপকভাবে উপলভ্য হওয়ার পরে এবং Android 8.1 ভেন্ডর ইমেজ
পুরনো হয়ে গেলে, iHealth/backup এবং
healthdপুরনো হয়ে যেতে পারে।
healthd-এর জন্য বোর্ড-নির্দিষ্ট বিল্ড ভেরিয়েবল
BOARD_PERIODIC_CHORES_INTERVAL_* হল বোর্ড-নির্দিষ্ট ভেরিয়েবল যা
healthd তৈরি করতে ব্যবহার করা হয়। সিস্টেম/ভেন্ডর বিল্ড স্প্লিটের অংশ হিসেবে, সিস্টেম মডিউলের জন্য বোর্ড-নির্দিষ্ট ভ্যালু
নির্ধারণ করা যাবে না। এই ভ্যালুগুলি আগে healthd_board_init ফাংশনে ওভাররাইড করা হতো,
যা এখন আর ব্যবহার করা হয় না।
health@2.1-এ, ভেন্ডররা
এই দুটি পর্যায়ক্রমিক কাজের ব্যবধানের মান healthd_config স্ট্রাক্টে ওভাররাইড করতে পারেন,
স্বাস্থ্য বাস্তবায়ন ক্লাস কনস্ট্রাক্টরে পাস করার আগে। স্বাস্থ্য
ইমপ্লিমেন্টেশন ক্লাসকে
android::hardware::health::V2_1::implementation::Health থেকে ইনহেরিট করতে হবে।
Health 2.1 পরিষেবা প্রয়োগ করুন
Health 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.
BatteryManager.queryProperty(int id)হলIBatteryPropertiesRegistrar.getProperty-এর একমাত্র ক্লায়েন্ট।IBatteryPropertiesRegistrar.getProperty,healthd-এর দ্বারা প্রদান করা হয়েছে এবং সরাসরি/sys/class/power_supplyপড়ে।নিরাপত্তার কথা বিবেচনা করে, অ্যাপগুলিকে সরাসরি হেলথ HAL কল করার অনুমতি দেওয়া হয় না। Android 9 ও তার পরবর্তী ভার্সনে, বাইন্ডার পরিষেবা
IBatteryPropertiesRegistrar,healthd-এর পরিবর্তেBatteryService-এর মাধ্যমে প্রদান করা হয়।BatteryServiceঅনুরোধ করা তথ্য পেতে হেলথ HAL-কে কল ডেলিগেট করে।BatteryService. Android 9 ও তার পরবর্তী যেকোনও ভার্সনে,
BatteryServiceHealthServiceWrapperব্যবহার করে এটি নির্ধারণ করে যেvendorথেকে ডিফল্ট হেলথ পরিষেবা ইনস্ট্যান্স ব্যবহার করা হবে নাকিhealthdথেকে ব্যাক-আপ হেলথ পরিষেবা ইনস্ট্যান্স ব্যবহার করা হবে।BatteryServiceতারপরIHealth.registerCallback-এর মাধ্যমে স্বাস্থ্য সম্পর্কিত ইভেন্ট শোনে।স্টোরেজ করা হয়েছে। Android 9 ও তার পরবর্তী যেকোনও ভার্সনে,
storagedvendorথেকে ডিফল্ট হেলথ পরিষেবা ইনস্ট্যান্স ব্যবহার করা হবে নাকিhealthdথেকে ব্যাক-আপ হেলথ পরিষেবা ইনস্ট্যান্স ব্যবহার করা হবে তা নির্ধারণ করতেlibhealthhalutilsব্যবহার করে।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(Health 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(Health 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(Health 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-এ নতুন
VTS টেস্ট
অন্তর্ভুক্ত আছে যা বিশেষভাবে health@2.1 HAL-এর জন্য লেখা হয়েছে। কোনও ডিভাইস, ডিভাইস ম্যানিফেস্টে
health@2.1 HAL ঘোষণা করলে, সেটিকে অবশ্যই সংশ্লিষ্ট VTS পরীক্ষা পাস করতে হবে।
ডিফল্ট ইনস্ট্যান্স (ডিভাইসটি HAL সঠিকভাবে প্রয়োগ করে কিনা তা নিশ্চিত করতে) এবং ব্যাক-আপ ইনস্ট্যান্স (এটি সরিয়ে দেওয়ার আগে healthd
সঠিকভাবে কাজ করা চালিয়ে যায় কিনা তা নিশ্চিত করতে) দুটির জন্যই টেস্ট লেখা হয়।
ব্যাটারি সংক্রান্ত তথ্য সম্পর্কিত প্রয়োজনীয়তা
Health 2.0 HAL, HAL ইন্টারফেসে প্রয়োজনীয়তার একটি সেট উল্লেখ করে, কিন্তু সেগুলি প্রয়োগ করার ক্ষেত্রে সংশ্লিষ্ট VTS পরীক্ষা তুলনামূলকভাবে শিথিল। Android 11-এ, Android 11 ও এর পরের যেকোনও ভার্সন দিয়ে লঞ্চ করা ডিভাইসে নিম্নলিখিত প্রয়োজনীয়তা এনফোর্স করতে নতুন VTS টেস্ট যোগ করা হয়েছে:
- ইনস্ট্যান্টেনিয়াস ও গড় ব্যাটারি কারেন্টের ইউনিট মাইক্রোঅ্যাম্প (μA) হতে হবে।
- ইনস্ট্যান্টেনিয়াস ও গড় ব্যাটারি কারেন্টের চিহ্ন সঠিক হতে হবে।
নির্দিষ্টভাবে:
- ব্যাটারি স্ট্যাটাস
UNKNOWNহলে current == 0 - ব্যাটারির স্ট্যাটাস
CHARGINGহলে কারেন্ট > ০ - ব্যাটারি স্ট্যাটাস
NOT_CHARGINGহলে কারেন্ট <= 0 - ব্যাটারি স্ট্যাটাস
DISCHARGINGহলে কারেন্ট < 0 হয় - ব্যাটারি স্ট্যাটাস
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-কে ১০০০ দিয়ে ভাগ করে এবং মিলিভোল্ট (mV)-এ ভ্যালু রিপোর্ট করে। @1.0::HealthInfo দেখুন।
আরও বিবরণের জন্য, Linux পাওয়ার সাপ্লাই ক্লাস দেখুন।