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 söz konusu sınıf için ConfigStore öğesi eklemeden önce yeni bir sınıf eklemeniz gerekir. Bu bölümde, IChargerConfigs
arayüz sınıfına healthd
için eklenen bir 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 eklemeden önce arayüz sınıfını eklemeniz gerekir.
- HAL arayüzü dosyası oluşturun. ConfigStore sürümü 1.0 olduğundan
hardware/interfaces/configstore/1.0
içinde ConfigStore arayüzlerini tanımlayın. Örneğin,hardware/interfaces/configstore/1.0/IChargerConfigs.hal
dosyasında:package android.hardware.configstore@1.0; interface IChargerConfigs { // TO-BE-FILLED-BELOW };
- ConfigStore ortak kitaplığı ve başlık dosyaları için
Android.bp
veAndroid.mk
'yi yeni HAL arayüzünü içerecek şekilde güncelleyin. Örnek: 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::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
'dekiAndroid.bp
veAndroid.mk
öğelerini günceller. - Sunucu kodunu uygulamak için C++ stub'ını oluşturun. Örnek:
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/default
içindeChargerConfigs.h
veChargerConfigs.cpp
adlı iki dosya oluşturur. .h
ve.cpp
uygulama dosyalarını açıpHIDL_FETCH_name
işleviyle ilgili kodu (ör.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 }
Android.mk
dosyasını, uygulama dosyasını (modulenameConfigs.cpp
)LOCAL_SRC_FILES
dosyasına eklemek ve derleme işaretlerini makro tanımlarıyla eşlemek için 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ı) Bir manifest girişi ekleyin. Bu dosya yoksa varsayılan olarak ConfigStore'ın "default" örneği adı kullanılır. Ö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_configstore
'ye hwbinder çağrısı yapma izni yoksa). Örneğin,system/sepolicy/private/healthd.te
'te:... // 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 için
.hal
dosyalarıhardware/interfaces/configstore/1.0
içinde bulunur.) Örneğin,hardware/interfaces/configstore/1.0/IChargerConfigs.hal
içinde:package android.hardware.configstore@1.0; interface IChargerConfigs { ... // Other interfaces disableInitBlank() generates(OptionalBool value); };
- İlgili arayüz HAL uygulama dosyalarında (
.h
ve.cpp
) yöntemi uygulayın. Varsayılan uygulamalarıhardware/interfaces/configstore/1.0/default
içine yerleştirin. Örneğin,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
'da: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 öğesini 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-utils
iç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);
disableInitBlank
alınır ve bir değişkene kaydedilir (değişkene birden fazla kez erişilmesi gerektiğinde kullanışlıdır). ConfigStore'dan alınan değer, oluşturulan şablon işlevi içinde önbelleğe alınır. Böylece, oluşturulan şablon işlevine yapılan sonraki çağrılar için ConfigStore hizmetiyle iletişime geçmeden önbelleğe alınan değerden hızlıca alınabilir.- ConfigStore bağımlılığını ve
Android.mk
veyaAndroid.bp
'dekiconfigstore-utils
kitaplığını ekleyin. Örneğin,system/core/healthd/Android.mk
:LOCAL_SHARED_LIBRARIES := \ android.hardware.configstore@1.0 \ android.hardware.configstore-utils \ ... (other libraries) \