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. 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::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. ইমপ্লিমেন্টেশন ফাইল ( 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
    
  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 এ থাকে।) উদাহরণস্বরূপ, 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. 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) \