ConfigStore sınıfları ve öğeleri ekleme

.

Yeni ConfigStore öğeleri (yani arayüz yöntemleri) mevcut arayüz sınıfını kullanır. Arayüz sınıfı tanımlanmamışsa bir o sınıf için ConfigStore öğesi eklemeden önce yeni bir sınıf oluşturun. Bu bölüm şunun için bir disableInitBlank yapılandırma öğesi örneğini kullanır: healthd, IChargerConfigs arayüzüne ekleniyor sınıfını kullanır.

Arayüz sınıfları ekleyin

Görüntülemek istediğiniz arayüz yöntemi için herhangi bir arayüz sınıfı tanımlanmamışsa eklemek istiyorsanız, ilişkilendirilmiş verileri eklemeden önce arayüz sınıfını eklemeniz gerekir. ConfigStore öğeleri.

  1. Bir HAL arayüzü dosyası oluşturun. ConfigStore sürümü 1.0'dır, yani hardware/interfaces/configstore/1.0 bölgesindeki ConfigStore arayüzleri Örneğin, örneğin, hardware/interfaces/configstore/1.0/IChargerConfigs.hal:
    package android.hardware.configstore@1.0;
    
    interface IChargerConfigs {
        // TO-BE-FILLED-BELOW
    };
    
  2. Şu uygulama için Android.bp ve Android.mk öğelerini güncelleyin: ConfigStore, yeni arayüz HAL'sini içerecek şekilde paylaşılan kitaplık ve başlık dosyaları. Örnek:
    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
    
    . Bu komutlar Android.bp ve Android.mk içinde güncellenir hardware/interfaces/configstore/1.0.
  3. Sunucu kodunu uygulamak için C++ saplamayı oluşturun. Örnek:
    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
    
    . Bu komut, ChargerConfigs.h ve ChargerConfigs.cpp, inç hardware/interfaces/configstore/1.0/default.
  4. .h ve .cpp uygulama dosyalarını açın ve HIDL_FETCH_name işleviyle ilgili kodu kaldırın ( örnek, HIDL_FETCH_IChargerConfigs). Bu işlev, ConfigStore tarafından kullanılmayan HIDL geçiş modu.
  5. 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
    }
    
  6. Uygulama dosyasını eklemek için Android.mk dosyasını değiştirin (modulenameConfigs.cpp) - LOCAL_SRC_FILES ve derleme işaretlerini makro tanımlarla eşlemek için kullanılır. Ö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
    
  7. (İsteğe bağlı) Bir manifest girişi ekleyin. Yoksa varsayılan olarak "varsayılan" ConfigStore'un örnek adını görebilirsiniz. Örneğin, device/google/marlin/manifest.xml:
        <hal format="hidl">
            <name>android.hardware.configstore</name>
            ...
            <interface>
                <name>IChargerConfigs</name>
                <instance>default</instance>
            </interface>
        </hal>
    
  8. Gerekirse sepolicy kuralını ekleyin (yani müşterinin hal_configstore hedefine yönleyici çağrılar yapma izinleri). Örneğin, örnek, system/sepolicy/private/healthd.te içinde:
    ... // other rules
    binder_call(healthd, hal_configstore)
    

Yeni ConfigStore öğeleri ekle

Yeni bir ConfigStore öğesi eklemek için:

  1. HAL dosyasını açın ve öğe için gerekli arayüz yöntemini ekleyin. ( ConfigStore için .hal dosyası şurada bulunuyor: hardware/interfaces/configstore/1.0.) Örneğin, hardware/interfaces/configstore/1.0/IChargerConfigs.hal:
    package android.hardware.configstore@1.0;
    
    interface IChargerConfigs {
        ... // Other interfaces
        disableInitBlank() generates(OptionalBool value);
    };
    
  2. İlgili arayüz HAL uygulama dosyalarına yöntemi uygulayın (.h ve .cpp). Varsayılan uygulamaları hardware/interfaces/configstore/1.0/default. Örneğin, hardware/interfaces/configstore/1.0/default/ChargerConfigs.h:
    struct ChargerConfigs : public IChargerConfigs {
        ... // Other interfaces
        Return<void> disableInitBlank(disableInitBlank_cb _hidl_cb) override;
    };
    
    Ve 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

Bir ConfigStore öğesi kullanmak için:

  1. 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>
    
  2. Şuradaki uygun şablon işlevini kullanarak ConfigStore öğesine erişin: android.hardware.configstore-utils Örneğin, 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);
    
    Bu örnekte, ConfigStore öğesi disableInitBlank alınmıştır. ve bir değişkene depolanır (değişkene, birden fazla kez). ConfigStore'dan alınan değer bir şablondan hızlı bir şekilde alınabilmesi için, ConfigStore hizmetine başvurmadan önbelleğe alınmış değer, şablon işlevinden bahsedelim.
  3. Bağımlılığı ConfigStore ve configstore-utils öğesine ekleyin. Android.mk veya Android.bp kitaplığı. Örneğin, system/core/healthd/Android.mk:
    LOCAL_SHARED_LIBRARIES := \
        android.hardware.configstore@1.0 \
        android.hardware.configstore-utils \
        ... (other libraries) \