ConfigStore ক্লাস এবং আইটেম যোগ করুন

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

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

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

  1. একটি 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
    };
    
  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.0Android.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
    
    এই কমান্ড দুটি ফাইল তৈরি করে, ChargerConfigs.h এবং ChargerConfigs.cpp , hardware/interfaces/configstore/1.0/default
  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. 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
    
  7. (ঐচ্ছিক) একটি ম্যানিফেস্ট এন্ট্রি যোগ করুন। যদি এটি বিদ্যমান না থাকে, তাহলে ConfigStore এর "ডিফল্ট" ইনস্ট্যান্স নামের ডিফল্ট। উদাহরণস্বরূপ, device/google/marlin/manifest.xml এ:
        <hal format="hidl">
            <name>android.hardware.configstore</name>
            ...
            <interface>
                <name>IChargerConfigs</name>
                <instance>default</instance>
            </interface>
        </hal>
    
  8. প্রয়োজনে সেপলিসি নিয়ম যোগ করুন (অর্থাৎ, যদি ক্লায়েন্টের কাছে hal_configstore এ hwbinder কল করার অনুমতি না থাকে)। উদাহরণস্বরূপ, system/sepolicy/private/healthd.te এ:
    ... // other rules
    binder_call(healthd, hal_configstore)
    

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

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

  1. 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);
    };
    
  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 পুনরুদ্ধার করা হয়েছে এবং একটি ভেরিয়েবলে সংরক্ষণ করা হয়েছে (যখন ভেরিয়েবলটিকে একাধিকবার অ্যাক্সেস করতে হবে তখন দরকারী)। কনফিগস্টোর থেকে পুনরুদ্ধার করা মানটি ইনস্ট্যান্টিয়েটেড টেমপ্লেট ফাংশনের ভিতরে ক্যাশে করা হয় যাতে তা ইনস্ট্যান্টিয়েটেড টেমপ্লেট ফাংশনে পরবর্তী কলগুলির জন্য কনফিগস্টোর পরিষেবার সাথে যোগাযোগ না করেই ক্যাশে করা মান থেকে দ্রুত পুনরুদ্ধার করা যায়।
  3. 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) \