Conversión de módulos HAL

Puede actualizar módulos HAL preexistentes a módulos HIDL HAL convirtiendo el encabezado en hardware/libhardware/include/hardware .

Usando c2hal

La herramienta c2hal maneja la mayor parte del trabajo de conversión, reduciendo la cantidad de cambios manuales necesarios. Por ejemplo, para generar un archivo HIDL .hal para 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

Estos comandos agregan archivos en hardware/interfaces/nfc/1.0/ . Al ejecutar hardware/interfaces/update-makefiles.sh desde el directorio $ANDROID_BUILD_TOP también se agregará el archivo MAKE requerido a HAL. Desde aquí, puede realizar cambios manuales para convertir completamente el HAL.

actividades de c2hal

Cuando ejecuta c2hal , todo el contenido del archivo de encabezado se transfiere a archivos .hal .

c2hal identifica estructuras que contienen punteros de función en el archivo de encabezado proporcionado y convierte cada estructura en un archivo de interfaz independiente. Por ejemplo, alloc_device_t se convierte al módulo HAL IAllocDevice (en el archivo IAllocDevice.hal ).

Todos los demás tipos de datos se copian en un archivo types.hal . Las definiciones de libra se mueven a enumeraciones y los elementos que no forman parte de HIDL o no son convertibles (como declaraciones de funciones estáticas) se copian en comentarios marcados con el texto " NOTE ".

actividades manuales

La herramienta c2hal no sabe qué hacer cuando encuentra ciertas construcciones. Por ejemplo, HIDL no tiene concepto de punteros sin formato; Debido a esto, cuando c2hal encuentra un puntero en los archivos de encabezado, no sabe si el puntero debe interpretarse como una matriz o como una referencia a otro objeto. Los indicadores de vacío también son igualmente opacos.

Campos como int reserved[7] deben eliminarse manualmente durante la transición a HIDL. Elementos como el nombre del valor de retorno deben actualizarse a algo más significativo; por ejemplo, convertir el parámetro de retorno de métodos como write en NFC del int32_t write_ret generado automáticamente al Status status (donde Status es una nueva enumeración que contiene posibles estados de NFC).

Implementando el HAL

Después de haber creado archivos .hal para representar su HAL, debe generar los archivos MAKE (Make o Soong) que crean el soporte de lenguaje en C++ y Java (a menos que HAL utilice una función no compatible con Java). El script ./hardware/interfaces/update-makefiles.sh puede generar automáticamente archivos MAKE para HAL ubicados en el directorio hardware/interfaces (para HAL en otras ubicaciones, simplemente actualice el script).

Cuando los archivos MAKE estén actualizados, estará listo para generar archivos de encabezado e implementar métodos. Para obtener detalles sobre la implementación de la interfaz generada, consulte HIDL C++ (para implementaciones de C++) o HIDL Java (para implementaciones de Java).