আপনি একটি বিদ্যমান ইন্টারফেস ক্লাসের জন্য নতুন ConfigStore আইটেমগুলি (অর্থাৎ ইন্টারফেস পদ্ধতি) যোগ করতে পারেন। যদি ইন্টারফেস শ্রেণীটি সংজ্ঞায়িত করা না থাকে, তাহলে সেই শ্রেণীর জন্য একটি ConfigStore আইটেম যোগ করার আগে আপনাকে অবশ্যই একটি নতুন ক্লাস যোগ করতে হবে। এই বিভাগটি IChargerConfigs ইন্টারফেস ক্লাসে যুক্ত করার healthd একটি disableInitBlank কনফিগারেশন আইটেমের উদাহরণ ব্যবহার করে।
ইন্টারফেস ক্লাস যোগ করুন
আপনি যে ইন্টারফেস পদ্ধতিটি যোগ করতে চান তার জন্য যদি কোনো ইন্টারফেস শ্রেণী সংজ্ঞায়িত করা না থাকে, তাহলে সংশ্লিষ্ট ConfigStore আইটেমগুলি যোগ করার আগে আপনাকে অবশ্যই ইন্টারফেস ক্লাস যোগ করতে হবে।
- একটি HAL ইন্টারফেস ফাইল তৈরি করুন। কনফিগস্টোর সংস্করণটি 1.0, তাই
hardware/interfaces/configstore/1.0এ কনফিগস্টোর ইন্টারফেসগুলি সংজ্ঞায়িত করুন। উদাহরণস্বরূপ,hardware/interfaces/configstore/1.0/IChargerConfigs.halএ :package android.hardware.configstore@1.0; interface IChargerConfigs { // TO-BE-FILLED-BELOW }; - নতুন ইন্টারফেস HAL অন্তর্ভুক্ত করতে ConfigStore ভাগ করা লাইব্রেরি এবং হেডার ফাইলগুলির জন্য
Android.bpএবংAndroid.mkআপডেট করুন৷ যেমন: এই কমান্ডগুলি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
ChargerConfigs.hএবংChargerConfigs.cpp,hardware/interfaces/configstore/1.0/default। -
.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 } LOCAL_SRC_FILESএ বাস্তবায়ন ফাইল (modulename Configs.cpp) যোগ করতে এবং ম্যাক্রো সংজ্ঞায় বিল্ড ফ্ল্যাগ ম্যাপ করতে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 এর "ডিফল্ট" ইনস্ট্যান্স নামের ডিফল্ট। উদাহরণস্বরূপ,
device/google/marlin/manifest.xmlএ:<hal format="hidl"> <name>android.hardware.configstore</name> ... <interface> <name>IChargerConfigs</name> <instance>default</instance> </interface> </hal> - প্রয়োজনে সেপলিসি নিয়ম যোগ করুন (অর্থাৎ, যদি ক্লায়েন্টের কাছে
hal_configstoreএ hwbinder কল করার অনুমতি না থাকে)। উদাহরণস্বরূপ,system/sepolicy/private/healthd.teএ:... // other rules binder_call(healthd, hal_configstore)
নতুন ConfigStore আইটেম যোগ করুন
একটি নতুন ConfigStore আইটেম যোগ করতে:
- HAL ফাইলটি খুলুন এবং আইটেমের জন্য প্রয়োজনীয় ইন্টারফেস পদ্ধতি যোগ করুন। (কনফিগস্টোরের জন্য
.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পুনরুদ্ধার করা হয়েছে এবং একটি ভেরিয়েবলে সংরক্ষণ করা হয়েছে (যখন ভেরিয়েবলটিকে একাধিকবার অ্যাক্সেস করতে হবে তখন দরকারী)। কনফিগস্টোর থেকে পুনরুদ্ধার করা মানটি ইনস্ট্যান্টিয়েটেড টেমপ্লেট ফাংশনের ভিতরে ক্যাশে করা হয় যাতে তা ইনস্ট্যান্টিয়েটেড টেমপ্লেট ফাংশনে পরবর্তী কলগুলির জন্য কনফিগস্টোর পরিষেবার সাথে যোগাযোগ না করেই ক্যাশে করা মান থেকে দ্রুত পুনরুদ্ধার করা যায়। -
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) \