Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Penggunaan Sisi Klien

Anda dapat memfaktorkan ulang kode yang dikompilasi secara kondisional untuk membaca nilai secara dinamis dari antarmuka HAL. Sebagai contoh:

#ifdef TARGET_FORCE_HWC_FOR_VIRTUAL_DISPLAYS
//some code fragment
#endif

Kode kerangka kemudian dapat memanggil fungsi utilitas yang tepat didefinisikan dalam <configstore/Utils.h> tergantung pada jenisnya.

Contoh ConfigStore

Contoh ini menunjukkan membaca TARGET_FORCE_HWC_FOR_VIRTUAL_DISPLAYS , didefinisikan dalam ConfigStore HAL sebagai forceHwcForVirtualDisplays() dengan tipe kembali 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);

Fungsi utilitas ( getBool dalam contoh di atas) kontak yang configstore layanan untuk mendapatkan pegangan untuk proxy dari fungsi antarmuka, kemudian mengambil nilai dengan menerapkan pegangan melalui HIDL / hwbinder.

Fungsi utilitas

<configstore/Utils.h> ( configstore/1.0/include/configstore/Utils.h ) menyediakan fungsi utilitas untuk setiap jenis kembali primitif, termasuk Optional[Bool|String|Int32|UInt32|Int64|UInt64] , seperti yang tercantum di bawah ini:

Jenis Fungsi (template parameter dihilangkan)
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 adalah nilai default kembali ketika pelaksanaan HAL tidak menentukan nilai untuk item konfigurasi. Setiap fungsi membutuhkan dua parameter template:

  • I adalah nama kelas antarmuka.
  • Func adalah fungsi pointer anggota untuk mendapatkan item konfigurasi.

Karena nilai konfigurasi hanya-baca dan tidak berubah, fungsi utilitas menyimpan nilai konfigurasi secara internal. Panggilan berikutnya dilayani dengan lebih efisien menggunakan nilai yang di-cache di unit penautan yang sama.

Menggunakan configstore-utils

The ConfigStore HAL ini dirancang untuk menjadi maju kompatibel untuk versi minor upgrade, yang berarti bahwa ketika HAL direvisi dan beberapa kode kerangka menggunakan item baru diperkenalkan, layanan ConfigStore dengan versi minor yang lebih tua di /vendor masih bisa digunakan.

Untuk kompatibilitas ke depan, pastikan penerapan Anda mematuhi panduan berikut:

  1. Item baru menggunakan nilai default ketika layanan hanya versi lama tersedia. Contoh:
    service = V1_1::IConfig::getService(); // null if V1_0 is installed
    value = DEFAULT_VALUE;
      if(service) {
        value = service->v1_1API(DEFAULT_VALUE);
      }
    
  2. Klien menggunakan antarmuka pertama yang menyertakan item ConfigStore. Contoh:
    V1_1::IConfig::getService()->v1_0API(); // NOT ALLOWED
    
    V1_0::IConfig::getService()->v1_0API(); // OK
    
  3. Layanan versi baru dapat diambil untuk antarmuka versi lama. Dalam contoh berikut, jika versi diinstal adalah v1_1, layanan v1_1 harus dikembalikan untuk getService() :
    V1_0::IConfig::getService()->v1_0API();
    

Ketika fungsi akses di configstore-utils perpustakaan digunakan untuk mengakses item ConfigStore, # 1 dijamin oleh pelaksanaan dan # 2 dijamin oleh kesalahan kompilator. Untuk alasan ini, kami sangat menyarankan menggunakan configstore-utils sedapat mungkin.