Puoi aggiornare i moduli HAL preesistenti in moduli HAL HIDL convertendo
intestazione in hardware/libhardware/include/hardware
.
Utilizza c2hal
La
c2hal
che gestisce la maggior parte del lavoro di conversione, riducendo il numero di
modifiche. Ad esempio, per generare un file .hal
HIDL per l'NFC
HAL:
make c2hal
c2hal -r android.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport -p android.hardware.nfc@1.0 hardware/libhardware/include/hardware/nfc.h
Questi comandi aggiungono file in hardware/interfaces/nfc/1.0/
. Esecuzione
hardware/interfaces/update-makefiles.sh
da $ANDROID_BUILD_TOP
aggiunge anche il makefile richiesto all'HAL. Da qui puoi:
apporta modifiche manuali per convertire completamente l'HAL.
attività c2hal
Quando esegui c2hal
, tutti i contenuti del file di intestazione vengono trasferiti
in .hal
file.
c2hal
identifica gli struct che contengono puntatori di funzione nella
file di intestazione fornito e converte ogni struct in un file di interfaccia separato.
Ad esempio, alloc_device_t
viene convertito nel
IAllocDevice
modulo HAL (nel file
IAllocDevice.hal
).
Tutti gli altri tipi di dati vengono copiati in un file types.hal
.
I valori di libbra vengono spostati in enum e gli elementi che non fanno o meno parte dell'elenco HIDL
convertibili (come le dichiarazioni di funzioni statiche) vengono copiati in commenti
contrassegnato con il testo "NOTE
".
Attività manuali
Lo strumento c2hal
non sa cosa fare quando rileva
alcuni costrutti. Ad esempio, HIDL non ha il concetto di cursori non elaborati; grazie a
Questo, quando c2hal
rileva un puntatore nei file di intestazione,
sapere se il puntatore deve essere interpretato come un array o come un riferimento a
da un altro oggetto. Anche i puntatori Void sono opachi.
Un campo come int reserved[7]
deve essere rimosso manualmente durante
la transizione all'HIDL. Elementi come il nome del valore restituito devono essere
aggiornato in modo più significativo; Ad esempio, convertendo il ritorno
parametro di metodi come write
in NFC dalla generazione automatica
Da int32_t write_ret
a Status status
(dove
Status
è una nuova enum contenente possibili stati NFC.
Implementare l'HAL
Dopo aver creato .hal
file per rappresentare il tuo HAL,
deve generare i makefile (Make o soong) che creano il supporto linguistico
C++ e Java (a meno che l'HAL non utilizzi una funzionalità non supportata in Java). La
./hardware/interfaces/update-makefiles.sh
script può automaticamente
genera makefile per gli HAL che si trovano in hardware/interfaces
(per HAL in altre posizioni, è sufficiente aggiornare lo script).
Quando i makefile sono aggiornati, puoi generare file di intestazione e implementare metodi. Per maggiori dettagli sull'implementazione dell'interfaccia generata, consulta HIDL C++ (per C++ implementazioni) o HIDL Java (per le implementazioni Java).