İstemci Tarafı Kullanım

Değerleri HAL arayüzünden 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 daha sonra türüne bağlı olarak <configstore/Utils.h> de tanımlanan uygun bir yardımcı program işlevini çağırabilir.

ConfigStore örneği

Bu örnek, ConfigStore HAL'de, OptionalBool dönüş türüyle forceHwcForVirtualDisplays() olarak tanımlanan TARGET_FORCE_HWC_FOR_VIRTUAL_DISPLAYS okumayı 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 ), arayüz işlevinin proxy'sinin tanıtıcısını almak için configstore hizmetiyle iletişim kurar, ardından HIDL/hwbinder aracılığıyla tanıtıcıyı ç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ı işlevler 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 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 ü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. Sonraki çağrılara, aynı bağlantı biriminde önbelleğe alınan değer kullanılarak daha verimli bir şekilde hizmet verilir.

Configstore-utils'i kullanma

ConfigStore HAL, küçük sürüm yükseltmeleri için ileriye doğru uyumlu olacak şekilde tasarlanmıştır; bu, HAL revize edildiğinde ve bazı çerçeve kodları yeni tanıtılan öğeleri kullandığında, /vendor konumunda daha eski bir küçük sürüme sahip ConfigStore hizmetinin hâlâ kullanılabileceği anlamına gelir.

İ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 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, 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 öğesine erişim için configstore-utils kitaplığındaki erişim işlevleri kullanıldığında, #1 uygulama tarafından garanti edilir ve #2 ise derleyici hataları tarafından garanti edilir. Bu nedenlerden dolayı, mümkün olan her yerde configstore-utils kullanılmasını şiddetle tavsiye ederiz.