Puedes actualizar módulos HAL preexistentes a módulos HAL HIDL convirtiendo la
encabezado en hardware/libhardware/include/hardware
.
Usar c2hal
El
c2hal
La herramienta se encarga de la mayor parte del trabajo de conversión, lo que reduce la cantidad de tareas manuales requeridas.
cambios. Por ejemplo, para generar un archivo HIDL .hal
para el 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/
. Correr
hardware/interfaces/update-makefiles.sh
desde $ANDROID_BUILD_TOP
también agrega el archivo makefile requerido a la HAL. Desde aquí, puedes
Realiza cambios manuales para convertir por completo la HAL.
Actividades C2hal
Cuando ejecutas c2hal
, se transfiere todo el contenido del archivo de encabezado.
a archivos .hal
.
c2hal
identifica las structs que contienen punteros de función en la
proporcionado y convierte cada struct en un archivo de interfaz independiente.
Por ejemplo, alloc_device_t
se convierte en la
IAllocDevice
módulo de HAL (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.
convertibles (como declaraciones de funciones estáticas) se copian en los comentarios.
marcados con el texto "NOTE
".
Actividades manuales
La herramienta c2hal
no sabe qué hacer cuando se encuentra
ciertas construcciones. Por ejemplo, HIDL no tiene el concepto de punteros sin procesar. debido a
Esto, cuando c2hal
encuentra un puntero en los archivos de encabezado, no
si el puntero debe interpretarse como un array o como una referencia a
otro objeto. Los punteros vacíos también son igualmente opacos.
Los campos como int reserved[7]
deben quitarse manualmente durante
la transición a HIDL. Los elementos como el nombre del valor que se devuelve deben ser
se actualicen a algo más significativo; por ejemplo, convertir el valor
parámetro de métodos como write
en NFC de la API de
int32_t write_ret
a Status status
(donde
Status
es una nueva enumeración que contiene posibles estados de NFC).
Implementa la HAL
Después de crear archivos .hal
para representar tu HAL, haz lo siguiente:
debe generar los archivos makefile (Make o Soong) que crean el lenguaje compatible en
C++ y Java (a menos que la HAL use una función no compatible con Java). El
./hardware/interfaces/update-makefiles.sh
secuencia de comandos puede
generar archivos makefile para HALs ubicados en hardware/interfaces
(para las HAL de otras ubicaciones, solo debes actualizar la secuencia de comandos).
Cuando los archivos makefile estén actualizados, podrás generar archivos de encabezado y implementar métodos. Para obtener detalles sobre la implementación de la interfaz generada, consulta HIDL C++ (para C++) implementaciones) o HIDL Java (para implementaciones de Java).