इंटरफ़ेस की मौजूदा क्लास के लिए, ConfigStore के नए आइटम (यानी, इंटरफ़ेस के तरीके) जोड़े जा सकते हैं. अगर इंटरफ़ेस की क्लास तय नहीं की गई है, तो उस क्लास के लिए ConfigStore का कोई आइटम जोड़ने से पहले, आपको एक नई क्लास जोड़नी होगी. इस सेक्शन में, IChargerConfigs इंटरफ़ेस क्लास में healthd के लिए, disableInitBlank कॉन्फ़िगरेशन आइटम जोड़ने का उदाहरण दिया गया है.
इंटरफ़ेस की क्लास जोड़ना
अगर जोड़े जाने वाले इंटरफ़ेस के तरीके के लिए, इंटरफ़ेस की कोई क्लास तय नहीं की गई है, तो उससे जुड़े ConfigStore के आइटम जोड़ने से पहले, आपको इंटरफ़ेस की क्लास जोड़नी होगी.
- HAL इंटरफ़ेस की कोई फ़ाइल बनाएं. ConfigStore का वर्शन 1.0 है. इसलिए, ConfigStore के इंटरफ़ेस को
hardware/interfaces/configstore/1.0में तय करें. उदाहरण के लिए,hardware/interfaces/configstore/1.0/IChargerConfigs.halमें:package android.hardware.configstore@1.0; interface IChargerConfigs { // TO-BE-FILLED-BELOW }; - 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::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फ़ाइल में बदलाव करें, ताकि लागू करने वाली फ़ाइल (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
- (ज़रूरी नहीं) मेनिफ़ेस्ट की कोई एंट्री जोड़ें. अगर यह मौजूद नहीं है, तो ConfigStore के "डिफ़ॉल्ट" इंस्टेंस के नाम का इस्तेमाल करें. उदाहरण के लिए,
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में मौजूद होती हैं.) उदाहरण के लिए,hardware/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 सेवा से संपर्क किए बिना, कैश की गई वैल्यू को तुरंत वापस पाया जा सकता है.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) \