ConfigStore ক্লাস ও আইটেম যোগ করা

আপনি আগে থেকে থাকা ইন্টারফেস ক্লাসের জন্য নতুন ConfigStore আইটেম (অর্থাৎ, ইন্টারফেস পদ্ধতি) যোগ করতে পারবেন। ইন্টারফেস ক্লাসটি সংজ্ঞায়িত করা না থাকলে, আপনাকে অবশ্যই একটি নতুন ক্লাস যোগ করতে হবে, তারপরেই আপনি সেই ক্লাসের জন্য ConfigStore আইটেম যোগ করতে পারবেন। এই বিভাগে IChargerConfigs ইন্টারফেস ক্লাসে healthd যোগ করার জন্য disableInitBlank কনফিগারেশন আইটেমের উদাহরণ ব্যবহার করা হয়েছে।

ইন্টারফেস ক্লাস যোগ করুন

আপনি যে ইন্টারফেস মেথড যোগ করতে চান সেটির জন্য কোনও ইন্টারফেস ক্লাস নির্দিষ্ট করা না থাকলে, আপনাকে অবশ্যই সংশ্লিষ্ট ConfigStore আইটেম যোগ করার আগে ইন্টারফেস ক্লাস যোগ করতে হবে।

  1. 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
    };
    
  2. নতুন ইন্টারফেস 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::IChargerConfigs
    hidl-gen -o hardware/interfaces/configstore/1.0/default -Landroidbp -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.0::IChargerConfigs
    
    এইসব কমান্ড hardware/interfaces/configstore/1.0-এ Android.bp এবং Android.mk আপডেট করে।
  3. সার্ভার কোড প্রয়োগ করার জন্য 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।
  4. .h এবং .cpp ইমপ্লিমেন্টেশন ফাইল খুলুন এবং HIDL_FETCH_name ফাংশন সম্পর্কিত কোড সরিয়ে দিন (যেমন, HIDL_FETCH_IChargerConfigs)। HIDL পাসথ্রু মোডের জন্য এই ফাংশন প্রয়োজন, যা ConfigStore ব্যবহার করে না।
  5. 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
    }
    
  6. 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
    
  7. (ঐচ্ছিক) ম্যানিফেস্ট এন্ট্রি যোগ করুন। এটি না থাকলে, ConfigStore-এর "default" ইনস্ট্যান্সের নামে ডিফল্ট হিসেবে সেট করুন। যেমন, device/google/marlin/manifest.xml-এ:
        <hal format="hidl">
            <name>android.hardware.configstore</name>
            ...
            <interface>
                <name>IChargerConfigs</name>
                <instance>default</instance>
            </interface>
        </hal>
    
  8. প্রয়োজন হলে sepolicy নিয়ম যোগ করুন (অর্থাৎ, ক্লায়েন্টের কাছে hal_configstore-এ hwbinder কল করার অনুমতি না থাকলে)। যেমন, system/sepolicy/private/healthd.te-এ:
    ... // other rules
    binder_call(healthd, hal_configstore)
    

নতুন ConfigStore আইটেম যোগ করুন

নতুন ConfigStore আইটেম যোগ করতে:

  1. HAL ফাইল খুলুন এবং আইটেমের জন্য প্রয়োজনীয় ইন্টারফেস পদ্ধতি যোগ করুন। (ConfigStore-এর .hal ফাইল hardware/interfaces/configstore/1.0-এ থাকে।) যেমন, in hardware/interfaces/configstore/1.0/IChargerConfigs.hal:
    package android.hardware.configstore@1.0;
    
    interface IChargerConfigs {
        ... // Other interfaces
        disableInitBlank() generates(OptionalBool value);
    };
    
  2. সংশ্লিষ্ট ইন্টারফেস 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 আইটেম ব্যবহার করতে:

  1. প্রয়োজনীয় হেডার ফাইল যোগ করুন। যেমন, system/core/healthd/healthd.cpp-এ:
    #include <android/hardware/configstore/1.0/IChargerConfigs.h>
    #include <configstore/Utils.h>
    
  2. android.hardware.configstore-utils-এ উপযুক্ত টেমপ্লেট ফাংশন ব্যবহার করে ConfigStore আইটেম অ্যাক্সেস করুন। যেমন, system/core/healthd/healthd.cpp-এ:
    using namespace android::hardware::configstore;
    using namespace android::hardware::configstore::V1_0;
    
    static int64_t disableInitBlank = getBool<
            IChargerConfigs,
            &IChargerConfigs::disableInitBlank>(false);
    
    এই উদাহরণে, ConfigStore আইটেম disableInitBlank ফিরিয়ে আনা হয়েছে এবং একটি ভেরিয়েবলে স্টোর করা হয়েছে (ভেরিয়েবলটি একাধিকবার অ্যাক্সেস করার প্রয়োজন হলে এটি উপযোগী)। ConfigStore থেকে পাওয়া ভ্যালু ইনস্ট্যানশিয়েটেড টেমপ্লেট ফাংশনের মধ্যে ক্যাশে করা হয় যাতে ইনস্ট্যানশিয়েটেড টেমপ্লেট ফাংশনে পরবর্তী কলের জন্য ConfigStore পরিষেবার সাথে যোগাযোগ না করেই ক্যাশে করা ভ্যালু থেকে দ্রুত পাওয়া যায়।
  3. 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) \