İstemci Tarafı Kullanım

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

HAL arabiriminden değerleri dinamik olarak okumak için koşullu olarak derlenmiş kodu yeniden düzenleyebilirsiniz. Örneğin:

#ifdef TARGET_FORCE_HWC_FOR_VIRTUAL_DISPLAYS
//some code fragment
#endif

Çerçeve kodu, türüne bağlı olarak <configstore/Utils.h> içinde tanımlanan uygun bir yardımcı program işlevini çağırabilir.

ConfigStore örneği

Bu örnek, ConfigStore HAL'de forceHwcForVirtualDisplays() olarak tanımlanan TARGET_FORCE_HWC_FOR_VIRTUAL_DISPLAYS öğesinin OptionalBool dönüş türü ile okunmasını gösterir:

#include <configstore/Utils.h>
using namespace android::hardware::configstore;
using namespace android::hardware::configstore::V1_0;

static bool vsyncPhaseOffsetNs = getBool<ISurfaceFlingerConfigs,
        ISurfaceFlingerConfigs::forceHwcForVirtualDisplays>(false);

Yardımcı işlev (yukarıdaki örnekte getBool ), arabirim işlevinin proxy'sinin tanıtıcısını almak için configstore hizmetiyle bağlantı kurar, ardından tanıtıcıyı HIDL/hwbinder aracılığıyla çağırarak değeri alır.

Yardımcı işlevler

<configstore/Utils.h> ( configstore/1.0/include/configstore/Utils.h ), aşağıda listelendiği gibi Optional[Bool|String|Int32|UInt32|Int64|UInt64] dahil olmak üzere her ilkel dönüş türü için yardımcı program işlevleri sağlar:

Tip İşlev (şablon parametreleri atlandı)
OptionalBool bool getBool(const bool defValue)
OptionalInt32 int32_t getInt32(const int32_t defValue)
OptionalUInt32 uint32_t getUInt32(const uint32_t defValue)
OptionalInt64 int64_t getInt64(const int64_t defValue)
OptionalUInt64 uint64_t getUInt64(const uint64_t defValue)
OptionalString std::string getString(const std::string &defValue)

defValue , HAL uygulaması yapılandırma öğesi için bir değer belirtmediğinde döndürülen varsayılan bir değerdir. Her işlev iki şablon parametresi alır:

  • I , arabirim sınıfı adıdır.
  • Func , yapılandırma öğesini almak için üye işlev işaretçisidir.

Yapılandırma değeri salt okunur olduğundan ve değişmediğinden, yardımcı program işlevi yapılandırma değerini dahili olarak önbelleğe alır. Müteakip çağrılara, aynı bağlantı biriminde önbelleğe alınan değer kullanılarak daha verimli şekilde hizmet verilir.

configstore-utils'i kullanma

ConfigStore HAL, alt sürüm yükseltmeleri için ileriye dönük olarak uyumlu olacak şekilde tasarlanmıştır, yani HAL revize edildiğinde ve bazı çerçeve kodları yeni tanıtılan öğeleri kullandığında, /vendor vendor'da daha eski bir alt sürüme sahip ConfigStore hizmeti hala kullanılabilir.

İleriye dönük uyumluluk için uygulamanızın aşağıdaki yönergelere uyduğundan emin olun:

  1. Yeni öğeler, yalnızca eski sürümün hizmeti mevcut olduğunda varsayılan değeri kullanır. Örnek:
    service = V1_1::IConfig::getService(); // null if V1_0 is installed
    value = DEFAULT_VALUE;
      if(service) {
        value = service->v1_1API(DEFAULT_VALUE);
      }
    
  2. İstemci, ConfigStore öğesini içeren ilk arabirimi kullanır. Örnek:
    V1_1::IConfig::getService()->v1_0API(); // NOT ALLOWED
    
    V1_0::IConfig::getService()->v1_0API(); // OK
    
  3. Yeni sürümün servisi, eski sürümün arayüzü için alınabilir. Aşağıdaki örnekte, kurulu sürüm v1_1 ise, getService() için v1_1 hizmetinin döndürülmesi gerekir:
    V1_0::IConfig::getService()->v1_0API();
    

configstore-utils kitaplığındaki erişim işlevleri ConfigStore öğesine erişmek için kullanıldığında, #1 uygulama tarafından garanti edilir ve #2 derleyici hataları tarafından garanti edilir. Bu nedenlerden dolayı, mümkün olan her yerde configstore-utils kullanmanızı şiddetle tavsiye ederiz.