আপনি আগে থেকে থাকা ইন্টারফেস ক্লাসের জন্য নতুন 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 }; - নতুন ইন্টারফেস 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
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 } Android.mkফাইল পরিবর্তন করেLOCAL_SRC_FILES-এ ইমপ্লিমেন্টেশন ফাইল (modulenameConfigs.cpp) যোগ করুন এবং ম্যাক্রো ডেফিনিশনে বিল্ড ফ্ল্যাগ ম্যাপ করুন। যেমন,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-এ থাকে।) যেমন, inhardware/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 পরিষেবার সাথে যোগাযোগ না করেই ক্যাশে করা ভ্যালু থেকে দ্রুত পাওয়া যায়।- ConfigStore-এর উপর নির্ভরতা এবং
configstore-utilsলাইব্রেরিAndroid.mkবাAndroid.bp-এ যোগ করুন। যেমন,system/core/healthd/Android.mk-এ:LOCAL_SHARED_LIBRARIES := \ android.hardware.configstore@1.0 \ android.hardware.configstore-utils \ ... (other libraries) \