आप मौजूदा इंटरफ़ेस क्लास के लिए नए कॉन्फ़िगस्टोर आइटम (यानी, इंटरफ़ेस विधियाँ) जोड़ सकते हैं। यदि इंटरफ़ेस क्लास परिभाषित नहीं है, तो आपको उस क्लास के लिए कॉन्फिगस्टोर आइटम जोड़ने से पहले एक नई क्लास जोड़नी होगी। यह अनुभाग IChargerConfigs
इंटरफ़ेस वर्ग में जोड़े जाने वाले healthd
के लिए एक disableInitBlank
कॉन्फ़िगरेशन आइटम के उदाहरण का उपयोग करता है।
इंटरफ़ेस कक्षाएं जोड़ना
यदि इंटरफ़ेस विधि के लिए कोई इंटरफ़ेस क्लास परिभाषित नहीं है जिसे आप जोड़ना चाहते हैं, तो संबंधित कॉन्फिगस्टोर आइटम जोड़ने से पहले आपको इंटरफ़ेस क्लास जोड़ना होगा।
- एक HAL इंटरफ़ेस फ़ाइल बनाएँ। कॉन्फिगस्टोर संस्करण 1.0 है, इसलिए कॉन्फिगस्टोर इंटरफेस को
hardware/interfaces/configstore/1.0
में परिभाषित करें। उदाहरण के लिए,hardware/interfaces/configstore/1.0/IChargerConfigs.hal
में:package android.hardware.configstore@1.0; interface IChargerConfigs { // TO-BE-FILLED-BELOW };
- नए इंटरफ़ेस HAL को शामिल करने के लिए कॉन्फ़िगस्टोर साझा लाइब्रेरी और हेडर फ़ाइलों के लिए
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 पासथ्रू मोड के लिए आवश्यक है, जिसका उपयोग कॉन्फिगस्टोर द्वारा नहीं किया जाता है। - कार्यान्वयन को कॉन्फिगस्टोर सेवा में पंजीकृत करें। उदाहरण के लिए,
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 }
- कार्यान्वयन फ़ाइल (
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
- (वैकल्पिक) एक मेनिफेस्ट प्रविष्टि जोड़ें। यदि यह मौजूद नहीं है, तो कॉन्फ़िगस्टोर के "डिफ़ॉल्ट" इंस्टेंस नाम को डिफ़ॉल्ट करें। उदाहरण के लिए,
device/google/marlin/manifest.xml
में:<hal format="hidl"> <name>android.hardware.configstore</name> ... <interface> <name>IChargerConfigs</name> <instance>default</instance> </interface> </hal>
- यदि आवश्यक हो तो सेपॉलिसी नियम जोड़ें (अर्थात्, यदि क्लाइंट के पास
hal_configstore
पर hwbinder कॉल करने की अनुमति नहीं है)। उदाहरण के लिए,system/sepolicy/private/healthd.te
में:... // other rules binder_call(healthd, 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(); }
कॉन्फिगस्टोर आइटम का उपयोग करना
कॉन्फ़िगस्टोर आइटम का उपयोग करने के लिए:
- आवश्यक हेडर फ़ाइलें शामिल करें. उदाहरण के लिए,
system/core/healthd/healthd.cpp
में:#include <android/hardware/configstore/1.0/IChargerConfigs.h> #include <configstore/Utils.h>
-
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);
इस उदाहरण में, कॉन्फिगस्टोर आइटमdisableInitBlank
को पुनर्प्राप्त किया जाता है और एक वेरिएबल में संग्रहीत किया जाता है (उपयोगी जब वेरिएबल को कई बार एक्सेस करने की आवश्यकता होती है)। कॉन्फिगस्टोर से प्राप्त मूल्य को इंस्टेंटियेटेड टेम्पलेट फ़ंक्शन के अंदर कैश किया जाता है ताकि इसे इंस्टेंटियेटेड टेम्पलेट फ़ंक्शन पर बाद में कॉल के लिए कॉन्फिगस्टोर सेवा से संपर्क किए बिना कैश्ड वैल्यू से तुरंत पुनर्प्राप्त किया जा सके। -
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) \