用戶端使用

您可以重構有條件編譯的程式碼,以動態方式讀取值 HAL 介面例如:

#ifdef TARGET_FORCE_HWC_FOR_VIRTUAL_DISPLAYS
// some code fragment
#endif

這樣一來,架構程式碼就能呼叫 <configstore/Utils.h> (視類型而定)。

ConfigStore 範例

這個範例顯示: TARGET_FORCE_HWC_FOR_VIRTUAL_DISPLAYS,在 ConfigStore HAL 中定義 與 forceHwcForVirtualDisplays() 一樣,且傳回類型 OptionalBool:

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

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

公用程式函式 (上述範例中的 getBool) 會與 configstore 服務,以取得 Proxy 的 Proxy 控制代碼 介面函式,然後透過叫用控制代碼來擷取值 HIDL/hwbinder。

公用函式

<configstore/Utils.h> (configstore/1.0/include/configstore/Utils.h) 提供公用程式 各種原始傳回類型的函式,包括 Optional[Bool|String|Int32|UInt32|Int64|UInt64],如所列 如下:

類型 函式 (省略範本參數)
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 實作時傳回的預設值 未指定設定項目的值。每個函式都會包含 範本參數:

  • I 是介面類別名稱。
  • Func 是以下項目的成員函式指標: 取得設定項目

由於設定值處於唯讀狀態且不會變動,因此公用程式 函式會在內部快取設定值。後續呼叫 更有效率地利用相同連結單元中的快取值。

使用 configstore-utils

ConfigStore HAL 是專為次要版本而設計 也就是當 HAL 經過修改時和一些架構程式碼 使用新導入的項目,ConfigStore 服務具有較舊的子項目 您仍可使用 /vendor 的版本。

為維持前瞻相容性,請確保實作方式遵循 下列規範:

  1. 「只有」舊版服務會使用新項目的預設值 可以使用。範例:
    service = V1_1::IConfig::getService(); // null if V1_0 is installed
    value = DEFAULT_VALUE;
      if(service) {
        value = service->v1_1API(DEFAULT_VALUE);
      }
    
  2. 用戶端會使用包含 ConfigStore 項目的第一個介面。 範例:
    V1_1::IConfig::getService()->v1_0API(); // NOT ALLOWED
    
    V1_0::IConfig::getService()->v1_0API(); // OK
    
  3. 您可以在舊版介面中擷取新版本的服務。於 在下列範例中,如果安裝的版本是 v1_1,則 v1_1 服務必須 退回 getService()
    V1_0::IConfig::getService()->v1_0API();
    

configstore-utils 程式庫中的存取函式出現以下情況時 而 #1 則由實作保證 第 2 項是編譯器錯誤保證。因此,我們強烈建議 建議您盡可能使用 configstore-utils