Puoi aggiungere nuovi elementi ConfigStore (ovvero metodi di interfaccia) per un
una classe di interfaccia esistente. Se la classe dell'interfaccia non è definita, devi aggiungere un
prima di poter aggiungere un elemento ConfigStore per quella classe. Questa sezione
utilizza l'esempio di un elemento di configurazione disableInitBlank
Aggiunta di healthd
all'interfaccia IChargerConfigs
in corso...
.
Aggiungi classi di interfaccia
Se non è definita alcuna classe di interfaccia per il metodo di interfaccia che si desidera add, devi aggiungere la classe dell'interfaccia prima di poter aggiungere l'attributo associato Elementi ConfigStore.
- Crea un file di interfaccia HAL. La versione di ConfigStore è 1.0, quindi definisci
Interfacce di ConfigStore in
hardware/interfaces/configstore/1.0
. Per ad esempio,hardware/interfaces/configstore/1.0/IChargerConfigs.hal
:package android.hardware.configstore@1.0; interface IChargerConfigs { // TO-BE-FILLED-BELOW };
- Aggiorna
Android.bp
eAndroid.mk
per La libreria condivisa ConfigStore e i file di intestazione per includere la nuova interfaccia HAL. Ad esempio: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
Android.bp
eAndroid.mk
inhardware/interfaces/configstore/1.0
. - Generare lo stub C++ per implementare il codice del server. Ad esempio:
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
Questo comando crea due file,ChargerConfigs.h
eChargerConfigs.cpp
, pollicihardware/interfaces/configstore/1.0/default
. - Apri i file di implementazione
.h
e.cpp
e rimuovi il codice relativo alla funzioneHIDL_FETCH_name
(ad esempio,HIDL_FETCH_IChargerConfigs
). Questa funzione è necessaria per Modalità passthrough HIDL, che non è utilizzata da ConfigStore. - Registra l'implementazione nel servizio ConfigStore. Ad esempio, nel
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 }
- Modifica il file
Android.mk
per aggiungere il file di implementazione (modulenameConfigs.cpp
) perLOCAL_SRC_FILES
e mappare i flag di build nelle definizioni delle macro. Ad esempio, nelhardware/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
- (Facoltativo) Aggiungi una voce del file manifest. Se non esiste, utilizza il valore predefinito
"predefinito" il nome istanza di ConfigStore. Ad esempio, nel
device/google/marlin/manifest.xml
:<hal format="hidl"> <name>android.hardware.configstore</name> ... <interface> <name>IChargerConfigs</name> <instance>default</instance> </interface> </hal>
- Se necessario, aggiungi la regola di sicurezza (se il client non ha
autorizzazioni per effettuare chiamate hwbinder a
hal_configstore
). Per esempio, insystem/sepolicy/private/healthd.te
:... // other rules binder_call(healthd, hal_configstore)
Aggiungi nuovi elementi di ConfigStore
Per aggiungere un nuovo elemento di ConfigStore:
- Apri il file HAL e aggiungi il metodo di interfaccia richiesto per l'elemento. (La
I file
.hal
di ConfigStore si trovano inhardware/interfaces/configstore/1.0
.) Ad esempio, nellahardware/interfaces/configstore/1.0/IChargerConfigs.hal
:package android.hardware.configstore@1.0; interface IChargerConfigs { ... // Other interfaces disableInitBlank() generates(OptionalBool value); };
- Implementare il metodo nei file di implementazione HAL dell'interfaccia corrispondente
(
.h
e.cpp
). Posiziona le implementazioni predefinite inhardware/interfaces/configstore/1.0/default
. Ad esempio, nelhardware/interfaces/configstore/1.0/default/ChargerConfigs.h
:struct ChargerConfigs : public IChargerConfigs { ... // Other interfaces Return<void> disableInitBlank(disableInitBlank_cb _hidl_cb) override; };
ehardware/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(); }
Utilizza gli elementi di ConfigStore
Per utilizzare un elemento di ConfigStore:
- Includi i file di intestazione richiesti. Ad esempio, nel
system/core/healthd/healthd.cpp
:#include <android/hardware/configstore/1.0/IChargerConfigs.h> #include <configstore/Utils.h>
- Accedi all'elemento ConfigStore utilizzando la funzione per il modello appropriata in
android.hardware.configstore-utils
. Ad esempio, nelsystem/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);
In questo esempio, viene recuperato l'elemento di ConfigStoredisableInitBlank
e archiviato in una variabile (utile quando è necessario accedere a più variabili volte). Il valore recuperato dal ConfigStore viene memorizzato nella cache all'interno del di creazione di un'istanza di modello in modo che possa essere recuperata rapidamente il valore memorizzato nella cache senza contattare il servizio ConfigStore per chiamate successive al funzione di modello creata con un'istanza. - Aggiungi la dipendenza su ConfigStore e
configstore-utils
raccolta inAndroid.mk
oAndroid.bp
. Ad esempio, nelsystem/core/healthd/Android.mk
:LOCAL_SHARED_LIBRARIES := \ android.hardware.configstore@1.0 \ android.hardware.configstore-utils \ ... (other libraries) \