Mevcut bir arayüz sınıfı için yeni ConfigStore öğeleri (yani arayüz yöntemleri) ekleyebilirsiniz. Arayüz sınıfı tanımlanmamışsa bu sınıfa ait bir ConfigStore öğesi ekleyebilmek için önce yeni bir sınıf eklemeniz gerekir. Bu bölümde, IChargerConfigs arayüz sınıfına eklenen healthd için disableInitBlank yapılandırma öğesi örneği kullanılmaktadır.
Arayüz sınıfları ekleme
Eklemek istediğiniz arayüz yöntemi için arayüz sınıfı tanımlanmamışsa ilişkili ConfigStore öğelerini ekleyebilmek için önce arayüz sınıfını eklemeniz gerekir.
- Bir HAL arayüzü dosyası oluşturun. ConfigStore sürümü 1.0 olduğundan
hardware/interfaces/configstore/1.0içinde ConfigStore arayüzlerini tanımlayın. Örneğin,hardware/interfaces/configstore/1.0/IChargerConfigs.haliçinde:package android.hardware.configstore@1.0; interface IChargerConfigs { // TO-BE-FILLED-BELOW }; - Yeni arayüz HAL'sini eklemek için ConfigStore paylaşılan kitaplığı ve başlık dosyaları için
Android.bpveAndroid.mkdeğerlerini güncelleyin. Örneğin: Bu komutlar,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.0içindeAndroid.bpveAndroid.mkdeğerlerini günceller. - Sunucu kodunu uygulamak için C++ saplamasını oluşturun. Örneğin:
Bu komut,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/defaultiçindeChargerConfigs.hveChargerConfigs.cppolmak üzere iki dosya oluşturur. .hve.cppuygulama dosyalarını açın veHIDL_FETCH_nameişleviyle ilgili kodu (örneğin,HIDL_FETCH_IChargerConfigs) kaldırın. Bu işlev, ConfigStore tarafından kullanılmayan HIDL geçiş modu için gereklidir.- Uygulamayı ConfigStore hizmetine kaydedin. Örneğin,
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 } - Uygulama dosyasını (
modulenameConfigs.cpp)LOCAL_SRC_FILES'ye eklemek ve derleme işaretlerini makro tanımlarına eşlemek içinAndroid.mkdosyasını değiştirin. Örneğin,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
- (İsteğe bağlı) Manifest girişi ekleyin. Yoksa ConfigStore'un "varsayılan" örnek adını kullanın. Örneğin,
device/google/marlin/manifest.xml:<hal format="hidl"> <name>android.hardware.configstore</name> ... <interface> <name>IChargerConfigs</name> <instance>default</instance> </interface> </hal> - Gerekirse sepolicy kuralını ekleyin (yani istemcinin
hal_configstoreiçin hwbinder çağrıları yapma izni yoksa). Örneğin,system/sepolicy/private/healthd.teiçinde:... // other rules binder_call(healthd, hal_configstore)
Yeni ConfigStore öğeleri ekleme
Yeni bir ConfigStore öğesi eklemek için:
- HAL dosyasını açın ve öğe için gerekli arayüz yöntemini ekleyin. (ConfigStore'a ait
.haldosyalarıhardware/interfaces/configstore/1.0içinde bulunur.) Örneğin,hardware/interfaces/configstore/1.0/IChargerConfigs.haliçinde:package android.hardware.configstore@1.0; interface IChargerConfigs { ... // Other interfaces disableInitBlank() generates(OptionalBool value); }; - Yöntemi, ilgili arayüz HAL uygulama dosyalarında (
.hve.cpp) uygulayın. Varsayılan uygulamalarıhardware/interfaces/configstore/1.0/defaultiçine yerleştirin. Örneğin,hardware/interfaces/configstore/1.0/default/ChargerConfigs.h: Ayrıcastruct 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 öğelerini kullanma
ConfigStore öğesi kullanmak için:
- Gerekli başlık dosyalarını ekleyin. Örneğin,
system/core/healthd/healthd.cpp:#include <android/hardware/configstore/1.0/IChargerConfigs.h> #include <configstore/Utils.h>
android.hardware.configstore-utilsiçinde uygun şablon işlevini kullanarak ConfigStore öğesine erişin. Örneğin,system/core/healthd/healthd.cpp: Bu örnekte, ConfigStore öğesiusing namespace android::hardware::configstore; using namespace android::hardware::configstore::V1_0; static int64_t disableInitBlank = getBool< IChargerConfigs, &IChargerConfigs::disableInitBlank>(false);disableInitBlankalınır ve bir değişkende depolanır (değişkene birden fazla kez erişilmesi gerektiğinde kullanışlıdır). ConfigStore'dan alınan değer, oluşturulan şablon işlevinin içinde önbelleğe alınır. Böylece, oluşturulan şablon işlevinin sonraki çağrıları için ConfigStore hizmetine başvurmadan önbelleğe alınmış değerden hızlıca alınabilir.- ConfigStore'a ve
configstore-utilskitaplığınaAndroid.mkveyaAndroid.bpbağımlılığını ekleyin. Örneğin,system/core/healthd/Android.mk:LOCAL_SHARED_LIBRARIES := \ android.hardware.configstore@1.0 \ android.hardware.configstore-utils \ ... (other libraries) \