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