অ্যান্ড্রয়েড 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 পরিষেবা প্রদান নাও করতে পারে৷ পুরানো বিক্রেতার চিত্রগুলির সাথে পিছনের সামঞ্জস্যতা অবমূল্যায়ন সময়সূচী দ্বারা প্রয়োগ করা হয়৷
পিছনের সামঞ্জস্য নিশ্চিত করতে:
-
healthd
একটি সিস্টেম ডেমনhwservicemanager
সত্ত্বেওIHealth
এ IHealth নিবন্ধন করে।IHealth
সিস্টেম ম্যানিফেস্টে যোগ করা হয়েছে, উদাহরণ নাম "ব্যাকআপ" সহ। - ফ্রেমওয়ার্ক এবং
healthd
hwbinder
storaged
স্বাস্থ্যের সাথে যোগাযোগbinder
। - ফ্রেমওয়ার্ক এবং
storaged
জন্য কোড পরিবর্তন করা হয় যদি পাওয়া যায় তাহলে "ডিফল্ট" উদাহরণ আনতে, তারপর "ব্যাকআপ"।- C++ ক্লায়েন্ট কোড
libhealthhalutils
এ সংজ্ঞায়িত যুক্তি ব্যবহার করে। - Java ক্লায়েন্ট কোড
HealthServiceWrapper
এ সংজ্ঞায়িত যুক্তি ব্যবহার করে।
- C++ ক্লায়েন্ট কোড
- 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
দ্বারা সরবরাহ করাhealthd
।BatteryService
অনুরোধ করা তথ্য পুনরুদ্ধার করার জন্য স্বাস্থ্য 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
হলে প্রয়োগ করা হয় না
- বর্তমান == 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_now
1000 দ্বারা ভাগ করে এবং মিলিভোল্টে (mV) মান রিপোর্ট করে। @1.0::হেলথইনফো দেখুন।
-
বিস্তারিত জানার জন্য, লিনাক্স পাওয়ার সাপ্লাই ক্লাস দেখুন।