Converti i moduli HAL

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).