आप मौजूदा इंटरफ़ेस वर्ग के लिए नए ConfigStore आइटम (अर्थात इंटरफ़ेस विधियाँ) जोड़ सकते हैं। यदि इंटरफ़ेस वर्ग परिभाषित नहीं है, तो उस वर्ग के लिए ConfigStore आइटम जोड़ने से पहले आपको एक नई कक्षा जोड़नी होगी। यह खंड IChargerConfigs
इंटरफ़ेस वर्ग में healthd
के लिए जोड़े जाने के लिए एक disableInitBlank
कॉन्फ़िगरेशन आइटम के उदाहरण का उपयोग करता है।
इंटरफ़ेस कक्षाएं जोड़ना
यदि इंटरफ़ेस विधि के लिए कोई इंटरफ़ेस वर्ग परिभाषित नहीं है जिसे आप जोड़ना चाहते हैं, तो इससे पहले कि आप संबंधित ConfigStore आइटम जोड़ सकें, आपको इंटरफ़ेस वर्ग जोड़ना होगा।
- एक 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 शामिल करने के लिए 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
Android.bp
औरAndroid.mk
कोhardware/interfaces/configstore/1.0
में अपडेट करते हैं। - सर्वर कोड को लागू करने के लिए 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 द्वारा नहीं किया जाता है। - कॉन्फिगस्टोर सेवा में कार्यान्वयन को पंजीकृत करें। उदाहरण के लिए,
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
- (वैकल्पिक) एक मेनिफेस्ट प्रविष्टि जोड़ें। यदि यह मौजूद नहीं है, तो ConfigStore के "डिफ़ॉल्ट" इंस्टेंस नाम के लिए डिफ़ॉल्ट। उदाहरण के लिए,
device/google/marlin/manifest.xml
में:<hal format="hidl"> <name>android.hardware.configstore</name> ... <interface> <name>IChargerConfigs</name> <instance>default</instance> </interface> </hal>
- यदि आवश्यक हो तो सेपॉलिसी नियम जोड़ें (अर्थात, यदि क्लाइंट के पास hal_configstore पर
hal_configstore
कॉल करने की अनुमति नहीं है)। उदाहरण के लिए,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
में उपयुक्त टेम्पलेट फ़ंक्शन का उपयोग करके 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 सेवा से संपर्क किए बिना कैश्ड मान से जल्दी से पुनर्प्राप्त किया जा सके। -
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) \