किसी मौजूदा इंटरफ़ेस क्लास के लिए, नए ConfigStore आइटम (यानी, इंटरफ़ेस के तरीके) जोड़े जा सकते हैं. अगर इंटरफ़ेस क्लास तय नहीं की गई है, तो उस क्लास के लिए ConfigStore आइटम जोड़ने से पहले, आपको एक नई क्लास जोड़नी होगी. इस सेक्शन में, IChargerConfigs
इंटरफ़ेस क्लास में जोड़े जा रहे healthd
के लिए, disableInitBlank
कॉन्फ़िगरेशन आइटम के उदाहरण का इस्तेमाल किया गया है.
इंटरफ़ेस क्लास जोड़ना
अगर आपको जो इंटरफ़ेस जोड़ना है उसके लिए कोई इंटरफ़ेस क्लास तय नहीं की गई है, तो उससे जुड़े ConfigStore आइटम जोड़ने से पहले, आपको इंटरफ़ेस क्लास जोड़नी होगी.
- 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 };
- नया इंटरफ़ेस 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
को अपडेट करते हैं. - सर्वर कोड लागू करने के लिए, 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 }
LOCAL_SRC_FILES
में लागू करने की फ़ाइल (modulenameConfigs.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
- (ज़रूरी नहीं) मेनिफ़ेस्ट में कोई एंट्री जोड़ें. अगर यह मौजूद नहीं है, तो 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
में: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 सेवा से संपर्क किए बिना, कैश मेमोरी में सेव की गई वैल्यू को तुरंत वापस पाया जा सके.- ConfigStore और
Android.mk
याAndroid.bp
मेंconfigstore-utils
लाइब्रेरी पर डिपेंडेंसी जोड़ें. उदाहरण के लिए,system/core/healthd/Android.mk
में:LOCAL_SHARED_LIBRARIES := \ android.hardware.configstore@1.0 \ android.hardware.configstore-utils \ ... (other libraries) \