আপনি একটি বিদ্যমান ইন্টারফেস ক্লাসের জন্য নতুন ConfigStore আইটেম (অর্থাৎ, ইন্টারফেস মেথড) যোগ করতে পারেন। যদি ইন্টারফেস ক্লাসটি সংজ্ঞায়িত না থাকে, তবে সেই ক্লাসের জন্য একটি ConfigStore আইটেম যোগ করার আগে আপনাকে অবশ্যই একটি নতুন ক্লাস তৈরি করতে হবে। এই বিভাগে IChargerConfigs ইন্টারফেস ক্লাসে healthd জন্য একটি disableInitBlank কনফিগারেশন আইটেম যোগ করার উদাহরণ ব্যবহার করা হয়েছে।
ইন্টারফেস ক্লাস যোগ করুন
আপনি যে ইন্টারফেস মেথডটি যোগ করতে চান, তার জন্য যদি কোনো ইন্টারফেস ক্লাস সংজ্ঞায়িত না থাকে, তাহলে সংশ্লিষ্ট ConfigStore আইটেমগুলো যোগ করার আগে আপনাকে অবশ্যই ইন্টারফেস ক্লাসটি যোগ করতে হবে।
- একটি HAL ইন্টারফেস ফাইল তৈরি করুন। ConfigStore-এর ভার্সন হলো 1.0, তাই
hardware/interfaces/configstore/1.0এ ConfigStore ইন্টারফেসগুলো সংজ্ঞায়িত করুন। উদাহরণস্বরূপ,hardware/interfaces/configstore/1.0/IChargerConfigs.hal:package android.hardware.configstore@1.0; interface IChargerConfigs { // TO-BE-FILLED-BELOW }; - ConfigStore শেয়ার্ড লাইব্রেরি এবং হেডার ফাইলগুলির জন্য
Android.bpএবংAndroid.mkআপডেট করে নতুন ইন্টারফেস HAL অন্তর্ভুক্ত করুন। উদাহরণস্বরূপ: এই কমান্ডগুলোhidl-gen -o hardware/interfaces/configstore/1.0/default -Lmakefile -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.0::IChargerConfigshidl-gen -o hardware/interfaces/configstore/1.0/default -Landroidbp -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.0::IChargerConfigshardware/interfaces/configstore/1.0ফোল্ডারে থাকাAndroid.bpএবংAndroid.mkদুটি আপডেট করে। - সার্ভার কোড বাস্তবায়নের জন্য C++ স্টাব তৈরি করুন। উদাহরণস্বরূপ:
এই কমান্ডটিhidl-gen -o hardware/interfaces/configstore/1.0/default -Lc++-impl -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.0::IChargerConfigs
hardware/interfaces/configstore/1.0/defaultফোল্ডারেChargerConfigs.hএবংChargerConfigs.cppনামে দুটি ফাইল তৈরি করে। -
.hএবং.cppইমপ্লিমেন্টেশন ফাইলগুলো খুলুন এবংHIDL_FETCH_ nameফাংশন সম্পর্কিত কোড মুছে ফেলুন (উদাহরণস্বরূপ,HIDL_FETCH_IChargerConfigs)। এই ফাংশনটি HIDL পাসথ্রু মোডের জন্য প্রয়োজন, যা ConfigStore ব্যবহার করে না। - ConfigStore সার্ভিসে ইমপ্লিমেন্টেশনটি রেজিস্টার করুন। উদাহরণস্বরূপ,
hardware/interfaces/configstore/1.0/default/service.cppএ:#include <android/hardware/configstore/1.0/IChargerConfigs.h> #include "ChargerConfigs.h" using android::hardware::configstore::V1_0::IChargerConfigs; using android::hardware::configstore::V1_0::implementation::ChargerConfigs; int main() { ... // other code sp<IChargerConfigs> chargerConfigs = new ChargerConfigs; status = chargerConfigs->registerAsService(); LOG_ALWAYS_FATAL_IF(status != OK, "Could not register IChargerConfigs"); ... // other code } - ইমপ্লিমেন্টেশন ফাইল (
modulename Configs.cpp)LOCAL_SRC_FILESএ যোগ করতে এবং বিল্ড ফ্ল্যাগগুলোকে ম্যাক্রো ডেফিনিশনে ম্যাপ করতেAndroid.mkফাইলটি পরিবর্তন করুন। উদাহরণস্বরূপ,hardware/interfaces/configstore/1.0/default/Android.mkএ:LOCAL_SRC_FILES += ChargerConfigs.cpp ifeq ($(strip $(BOARD_CHARGER_DISABLE_INIT_BLANK)),true) LOCAL_CFLAGS += -DCHARGER_DISABLE_INIT_BLANK endif
- (ঐচ্ছিক) একটি ম্যানিফেস্ট এন্ট্রি যোগ করুন। যদি এটি বিদ্যমান না থাকে, তাহলে ConfigStore-এর "default" ইনস্ট্যান্স নামটি ডিফল্ট হিসেবে ব্যবহার করুন। উদাহরণস্বরূপ,
device/google/marlin/manifest.xmlএ:<hal format="hidl"> <name>android.hardware.configstore</name> ... <interface> <name>IChargerConfigs</name> <instance>default</instance> </interface> </hal> - প্রয়োজনে sepolicy নিয়মটি যোগ করুন (অর্থাৎ, যদি ক্লায়েন্টের
hal_configstoreএ hwbinder কল করার অনুমতি না থাকে)। উদাহরণস্বরূপ,system/sepolicy/private/healthd.te:... // other rules binder_call(healthd, hal_configstore)
নতুন ConfigStore আইটেম যোগ করুন
একটি নতুন ConfigStore আইটেম যোগ করতে:
- HAL ফাইলটি খুলুন এবং আইটেমটির জন্য প্রয়োজনীয় ইন্টারফেস মেথডটি যোগ করুন। (ConfigStore-এর
.halফাইলগুলোhardware/interfaces/configstore/1.0এ থাকে।) উদাহরণস্বরূপ,hardware/interfaces/configstore/1.0/IChargerConfigs.halএ:package android.hardware.configstore@1.0; interface IChargerConfigs { ... // Other interfaces disableInitBlank() generates(OptionalBool value); }; - সংশ্লিষ্ট ইন্টারফেস HAL ইমপ্লিমেন্টেশন ফাইলগুলিতে (
.hএবং.cpp) মেথডটি প্রয়োগ করুন। ডিফল্ট ইমপ্লিমেন্টেশনগুলিhardware/interfaces/configstore/1.0/default-এ রাখুন। উদাহরণস্বরূপ,hardware/interfaces/configstore/1.0/default/ChargerConfigs.hএ: এবংstruct ChargerConfigs : public IChargerConfigs { ... // Other interfaces Return<void> disableInitBlank(disableInitBlank_cb _hidl_cb) override; };hardware/interfaces/configstore/1.0/default/ChargerConfigs.cppএ:Return<void> ChargerConfigs::disableInitBlank(disableInitBlank_cb _hidl_cb) { bool value = false; #ifdef CHARGER_DISABLE_INIT_BLANK value = true; #endif _hidl_cb({true, value}); return Void(); }
ConfigStore আইটেম ব্যবহার করুন
একটি ConfigStore আইটেম ব্যবহার করতে:
- প্রয়োজনীয় হেডার ফাইলগুলো অন্তর্ভুক্ত করুন। উদাহরণস্বরূপ,
system/core/healthd/healthd.cppএ:#include <android/hardware/configstore/1.0/IChargerConfigs.h> #include <configstore/Utils.h>
-
android.hardware.configstore-utilsএ উপযুক্ত টেমপ্লেট ফাংশন ব্যবহার করে ConfigStore আইটেমটি অ্যাক্সেস করুন। উদাহরণস্বরূপ,system/core/healthd/healthd.cppএ: এই উদাহরণে, ConfigStore আইটেমusing namespace android::hardware::configstore; using namespace android::hardware::configstore::V1_0; static int64_t disableInitBlank = getBool< IChargerConfigs, &IChargerConfigs::disableInitBlank>(false);disableInitBlankপুনরুদ্ধার করে একটি ভেরিয়েবলে সংরক্ষণ করা হয় (যা একাধিকবার ভেরিয়েবলটি অ্যাক্সেস করার প্রয়োজন হলে উপযোগী)। ConfigStore থেকে পুনরুদ্ধার করা মানটি ইনস্ট্যানসিয়েটেড টেমপ্লেট ফাংশনের ভিতরে ক্যাশ করা হয়, যাতে পরবর্তীতে ইনস্ট্যানসিয়েটেড টেমপ্লেট ফাংশনটি কল করার জন্য ConfigStore সার্ভিসের সাথে যোগাযোগ না করেই ক্যাশ করা মান থেকে দ্রুত মানটি পুনরুদ্ধার করা যায়। -
Android.mkঅথবাAndroid.bpফাইলে ConfigStore এবংconfigstore-utilsলাইব্রেরির ডিপেন্ডেন্সি যোগ করুন। উদাহরণস্বরূপ,system/core/healthd/Android.mkএ:LOCAL_SHARED_LIBRARIES := \ android.hardware.configstore@1.0 \ android.hardware.configstore-utils \ ... (other libraries) \