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