किसी मौजूदा इंटरफ़ेस क्लास के लिए, नए ConfigStore आइटम (यानी कि इंटरफ़ेस के तरीके) जोड़े जा सकते हैं. अगर इंटरफ़ेस क्लास तय नहीं की गई है, तो आपको उस क्लास के लिए ConfigStore आइटम जोड़ने से पहले, नई क्लास जोड़नी होगी. इस सेक्शन में, IChargerConfigs
इंटरफ़ेस क्लास में जोड़े जा रहे healthd
के लिए, disableInitBlank
कॉन्फ़िगरेशन आइटम का उदाहरण दिया गया है.
इंटरफ़ेस क्लास जोड़ना
अगर आपको जिस इंटरफ़ेस तरीके को जोड़ना है उसके लिए कोई इंटरफ़ेस क्लास तय नहीं की गई है, तो आपको उससे जुड़े ConfigStore आइटम जोड़ने से पहले इंटरफ़ेस क्लास जोड़नी होगी.
- एचएएल इंटरफ़ेस फ़ाइल बनाएं. 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 };
- 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
. यह फ़ंक्शन, एचआईडीएल पासथ्रू मोड के लिए ज़रूरी है. 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
फ़ाइल में बदलाव करें, ताकिLOCAL_SRC_FILES
में लागू करने वाली फ़ाइल (modulenameConfigs.cpp
) जोड़ी जा सके. साथ ही, बिल्ड फ़्लैग को मैक्रो डेफ़िनिशन में मैप किया जा सके. उदाहरण के लिए,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 के "default" इंस्टेंस के नाम पर डिफ़ॉल्ट रूप से सेट हो जाता है. उदाहरण के लिए,
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 कॉल करने की अनुमतियां नहीं हैं, तो नियम जोड़ें. उदाहरण के लिए,hal_configstore
में:system/sepolicy/private/healthd.te
... // other rules binder_call(healthd, hal_configstore)
ConfigStore के नए आइटम जोड़ना
नया ConfigStore आइटम जोड़ने के लिए:
- एचएएल फ़ाइल खोलें और आइटम के लिए ज़रूरी इंटरफ़ेस तरीका जोड़ें. (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); };
- इस तरीके को, इंटरफ़ेस एचएएल लागू करने वाली फ़ाइलों (
.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) \