İstemci tarafı kullanım

HAL arayüzünden değerleri dinamik olarak okumak için koşullu olarak derlenmiş kodu yeniden düzenleyebilirsiniz. Örnek:

#ifdef TARGET_FORCE_HWC_FOR_VIRTUAL_DISPLAYS
// some code fragment
#endif

Daha sonra ç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 örnekte, ConfigStore HAL'de OptionalBool dönüş türüyle forceHwcForVirtualDisplays() olarak tanımlanan TARGET_FORCE_HWC_FOR_VIRTUAL_DISPLAYS okuması gösterilmektedir:

#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ı program işlevi (yukarıdaki örnekte getBool), arayüz işlevinin proxy'sinin herkese açık kullanıcı adını almak için configstore hizmetiyle iletişim kurar, ardından herkese açık kullanıcı adını 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 listelenen Optional[Bool|String|Int32|UInt32|Int64|UInt64] dahil olmak üzere her temel dönüş türü için yardımcı işlevler sağlar:

Tür İş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, arayüz sınıfının adıdır.
  • Func, yapılandırma öğesini almak için kullanılan üye işlevi 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. Sonraki çağrılar, aynı bağlantı biriminde önbelleğe alınan değer kullanılarak daha verimli bir şekilde sunulur.

configstore-utils kullan

ConfigStore HAL, küçük sürüm yükseltmelerinde ileriye dönük olarak uyumlu olacak şekilde tasarlanmıştır. Diğer bir deyişle, HAL revize edildiğinde ve bazı çerçeve kodları yeni kullanıma sunulan öğeleri kullandığında, /vendor ürününde daha eski bir alt sürüme sahip ConfigStore hizmeti kullanılmaya devam edebilir.

İ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 kullanılabilir 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 arayüzü kullanır. Örnek:
    V1_1::IConfig::getService()->v1_0API(); // NOT ALLOWED
    
    V1_0::IConfig::getService()->v1_0API(); // OK
    
  3. Yeni sürümün hizmeti, eski sürümün arayüzü için alınabilir. Aşağıdaki örnekte yüklü 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 uygulama tarafından, 2 numara ise derleyici hatalarıyla garanti edilir. Bu nedenlerden dolayı, mümkün olduğunda configstore-utils kullanmanızı önemle tavsiye ederiz.