ConfigStore क्लास और आइटम जोड़ें

अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

आप मौजूदा इंटरफ़ेस क्लास के साथ काम करता है. यदि इंटरफ़ेस श्रेणी निर्धारित नहीं की गई है, तो आपको नई क्लास जोड़ें. इस सेक्शन पर इसके लिए, disableInitBlank कॉन्फ़िगरेशन आइटम के उदाहरण का इस्तेमाल करता है: healthd को IChargerConfigs इंटरफ़ेस में जोड़ा जा रहा है क्लास.

इंटरफ़ेस क्लास जोड़ें

अगर उस इंटरफ़ेस तरीके के लिए कोई इंटरफ़ेस क्लास तय नहीं की गई है जिसे आपको इस्तेमाल करना है जोड़ें, तो आपको संबंधित डेटा जोड़ने से पहले इंटरफ़ेस क्लास 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. इसके लिए Android.bp और Android.mk अपडेट करें: नया इंटरफ़ेस HAL शामिल करने के लिए ConfigStore की शेयर की गई लाइब्रेरी और हेडर फ़ाइलें. जैसे:
    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
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है ये निर्देश Android.bp और Android.mk को अपडेट करते हैं hardware/interfaces/configstore/1.0.
  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. लागू की गई फ़ाइल जोड़ने के लिए, Android.mk फ़ाइल में बदलाव करें (modulenameConfigs.cpp) से LOCAL_SRC_FILES तक और मैक्रो डेफ़िनिशन में बिल्ड फ़्लैग को मैप करने के लिए. उदाहरण के लिए, 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 फ़ाइल खोलें और आइटम के लिए ज़रूरी इंटरफ़ेस तरीका जोड़ें. ( 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. इस तरीके को इंटरफ़ेस पर लागू होने वाली एचएएल से जुड़ी फ़ाइलों में लागू करें (.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. इसमें सही टेंप्लेट फ़ंक्शन का इस्तेमाल करके, ConfigStore आइटम को ऐक्सेस करें android.hardware.configstore-utils. उदाहरण के लिए, 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 से मिलने वाली वैल्यू को इंस्टैंशिएट किया गया टेंप्लेट फ़ंक्शन, ताकि इसे बाद में इंस्टैंशिएट किया गया टेंप्लेट फ़ंक्शन.
  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) \