Converter módulos HAL

É possível atualizar módulos HAL preexistentes para módulos HIDL HAL convertendo o em hardware/libhardware/include/hardware.

Usar c2hal

A c2hal ferramenta cuida da maior parte do trabalho de conversão, reduzindo o número de solicitações mudanças. Por exemplo, para gerar um arquivo .hal HIDL para a 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

Esses comandos adicionam arquivos em hardware/interfaces/nfc/1.0/. Em execução hardware/interfaces/update-makefiles.sh do dispositivo $ANDROID_BUILD_TOP também adiciona o makefile necessário à HAL. A partir daqui, é possível fazer alterações manuais para converter completamente a HAL.

atividades c2hal

Quando você executa c2hal, tudo no arquivo principal é transferido para arquivos .hal.

c2hal identifica structs que contêm ponteiros de função no arquivo de cabeçalho fornecido e converte cada struct em um arquivo de interface separado. Por exemplo, alloc_device_t é convertido na Módulo HAL IAllocDevice (no arquivo IAllocDevice.hal).

Todos os outros tipos de dados são copiados para um arquivo types.hal. A libra define são movidas para enumerações, e os itens não fazem parte do HIDL ou não. conversíveis (como declarações de função estática) são copiados em comentários marcado com o texto "NOTE".

Atividades manuais

A ferramenta c2hal não sabe o que fazer ao se encontrar determinadas construções. Por exemplo, o HIDL não tem o conceito de ponteiros brutos. por causa de isso, quando c2hal encontra um ponteiro em arquivos de cabeçalho, ele não encontra sabe se o ponteiro deve ser interpretado como uma matriz ou como uma referência a outro objeto. Os ponteiros vazios também são opacos de forma semelhante.

Campo como int reserved[7] precisa ser removido manualmente durante a transição para o HIDL. Itens como o nome do valor de retorno devem ser atualizado para algo mais significativo, por exemplo, converter o retorno de métodos como write em NFC do valor gerado automaticamente int32_t write_ret a Status status (em que Status é um novo tipo enumerado que contém possíveis status NFC.

Implementar a HAL

Depois de criar arquivos .hal para representar a HAL, você precisa gerar os makefiles (Make ou Soong) que criam o suporte a idiomas no C++ e Java (a menos que a HAL use um recurso sem suporte em Java). A ./hardware/interfaces/update-makefiles.sh script pode fazer isso automaticamente gerar makefiles para HALs localizadas no hardware/interfaces. (para HALs em outros locais, basta atualizar o script).

Quando os makefiles estiverem atualizados, você estará pronto para gerar arquivos de cabeçalho e implementar métodos. Para detalhes sobre como implementar a interface gerada, consulte HIDL C++ (para C++) implementações) ou HIDL Java (para implementações Java).