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

Menambahkan Kelas dan Item ConfigStore

Anda dapat menambahkan item ConfigStore baru (yaitu, metode antarmuka) untuk kelas antarmuka yang ada. Jika kelas antarmuka tidak ditentukan, Anda harus menambahkan kelas baru sebelum dapat menambahkan item ConfigStore untuk kelas tersebut. Bagian ini menggunakan contoh dari disableInitBlank item konfigurasi untuk healthd yang ditambahkan ke IChargerConfigs kelas antarmuka.

Menambahkan kelas antarmuka

Jika tidak ada kelas antarmuka yang ditentukan untuk metode antarmuka yang ingin Anda tambahkan, Anda harus menambahkan kelas antarmuka sebelum Anda dapat menambahkan item ConfigStore terkait.

  1. Buat file antarmuka HAL. Versi ConfigStore adalah 1,0, sehingga mendefinisikan interface ConfigStore di hardware/interfaces/configstore/1.0 . Misalnya, dalam hardware/interfaces/configstore/1.0/IChargerConfigs.hal :
    package android.hardware.configstore@1.0;
    
    interface IChargerConfigs {
        // TO-BE-FILLED-BELOW
    };
    
  2. Perbarui Android.bp dan Android.mk untuk ConfigStore shared library dan file header untuk menyertakan HAL antarmuka baru. Sebagai contoh:
    hidl-gen -o hardware/interfaces/configstore/1.0/default -Lmakefile -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.0::IChargerConfigs
    hidl-gen -o hardware/interfaces/configstore/1.0/default -Landroidbp -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.0::IChargerConfigs
    
    Perintah ini memperbarui Android.bp dan Android.mk di hardware/interfaces/configstore/1.0 .
  3. Hasilkan rintisan C++ untuk mengimplementasikan kode server. Sebagai contoh:
    hidl-gen -o hardware/interfaces/configstore/1.0/default -Lc++-impl -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.configstore@1.0::IChargerConfigs
    
    Perintah ini akan membuat dua file, ChargerConfigs.h dan ChargerConfigs.cpp , di hardware/interfaces/configstore/1.0/default .
  4. Buka .h dan .cpp file implementasi dan kode menghapus terkait dengan fungsi HIDL_FETCH_ name (misalnya, HIDL_FETCH_IChargerConfigs ). Fungsi ini diperlukan untuk mode passthrough HIDL, yang tidak digunakan oleh ConfigStore.
  5. Daftarkan implementasi ke layanan ConfigStore. Misalnya, dalam hardware/interfaces/configstore/1.0/default/service.cpp :
    #include <android/hardware/configstore/1.0/IChargerConfigs.h>
    #include "ChargerConfigs.h"
    
    using android::hardware::configstore::V1_0::IChargerConfigs;
    using android::hardware::configstore::V1_0::implementation::ChargerConfigs;
    
    int main() {
        ... // other code
        sp<IChargerConfigs> chargerConfigs = new ChargerConfigs;
        status = chargerConfigs->registerAsService();
        LOG_ALWAYS_FATAL_IF(status != OK, "Could not register IChargerConfigs");
        ... // other code
    }
    
  6. Memodifikasi Android.mk file untuk menambahkan file implementasi ( modulename Configs.cpp ) untuk LOCAL_SRC_FILES dan untuk memetakan membangun bendera ke dalam definisi makro. Misalnya, dalam hardware/interfaces/configstore/1.0/default/Android.mk :
    LOCAL_SRC_FILES += ChargerConfigs.cpp
    
    ifeq ($(strip $(BOARD_CHARGER_DISABLE_INIT_BLANK)),true)
    LOCAL_CFLAGS += -DCHARGER_DISABLE_INIT_BLANK
    endif
    
  7. (Opsional) Tambahkan entri manifes. Jika tidak ada, default ke nama instance "default" dari ConfigStore. Misalnya, dalam device/google/marlin/manifest.xml :
        <hal format="hidl">
            <name>android.hardware.configstore</name>
            ...
            <interface>
                <name>IChargerConfigs</name>
                <instance>default</instance>
            </interface>
        </hal>
    
  8. Tambahkan aturan sepolicy jika diperlukan (yaitu, jika klien tidak memiliki izin untuk membuat panggilan hwbinder untuk hal_configstore ). Sebagai contoh, dalam system/sepolicy/private/healthd.te :
    ... // other rules
    binder_call(healthd, hal_configstore)
    

Menambahkan item ConfigStore baru

Untuk menambahkan item ConfigStore baru:

  1. Buka file HAL dan tambahkan metode antarmuka yang diperlukan untuk item tersebut. (The .hal file untuk ConfigStore tinggal di hardware/interfaces/configstore/1.0 .) Sebagai contoh, dalam hardware/interfaces/configstore/1.0/IChargerConfigs.hal :
    package android.hardware.configstore@1.0;
    
    interface IChargerConfigs {
        ... // Other interfaces
        disableInitBlank() generates(OptionalBool value);
    };
    
  2. Menerapkan metode dalam file implementasi antarmuka HAL yang sesuai ( .h dan .cpp ). Tempatkan implementasi default pada hardware/interfaces/configstore/1.0/default . Misalnya, dalam hardware/interfaces/configstore/1.0/default/ChargerConfigs.h :
    struct ChargerConfigs : public IChargerConfigs {
        ... // Other interfaces
        Return<void> disableInitBlank(disableInitBlank_cb _hidl_cb) override;
    };
    
    Dan dalam hardware/interfaces/configstore/1.0/default/ChargerConfigs.cpp :
    Return<void> ChargerConfigs::disableInitBlank(disableInitBlank_cb _hidl_cb) {
        bool value = false;
    #ifdef CHARGER_DISABLE_INIT_BLANK
        value = true;
    #endif
        _hidl_cb({true, value});
        return Void();
    }
    

Menggunakan item ConfigStore

Untuk menggunakan item ConfigStore:

  1. Sertakan file header yang diperlukan. Sebagai contoh, dalam system/core/healthd/healthd.cpp :
    #include <android/hardware/configstore/1.0/IChargerConfigs.h>
    #include <configstore/Utils.h>
    
  2. Mengakses item ConfigStore menggunakan fungsi template yang sesuai di android.hardware.configstore-utils . Sebagai contoh, dalam system/core/healthd/healthd.cpp :
    using namespace android::hardware::configstore;
    using namespace android::hardware::configstore::V1_0;
    
    static int64_t disableInitBlank = getBool<
            IChargerConfigs,
            &IChargerConfigs::disableInitBlank>(false);
    
    Dalam contoh ini, item ConfigStore disableInitBlank diambil dan disimpan ke variabel (berguna ketika kebutuhan variabel yang akan diakses beberapa kali). Nilai yang diambil dari ConfigStore di-cache di dalam fungsi template yang dipakai sehingga dapat diambil dengan cepat dari nilai yang di-cache tanpa menghubungi layanan ConfigStore untuk panggilan selanjutnya ke fungsi template yang dipakai.
  3. Tambahkan ketergantungan pada ConfigStore dan configstore-utils perpustakaan di Android.mk atau Android.bp . Sebagai contoh, dalam system/core/healthd/Android.mk :
    LOCAL_SHARED_LIBRARIES := \
        android.hardware.configstore@1.0 \
        android.hardware.configstore-utils \
        ... (other libraries) \