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:
- 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); }
- İ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
- 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.