Вы можете обновить существующие модули HAL до модулей HIDL HAL, преобразовав заголовочный файл в hardware/libhardware/include/hardware .
Используйте c2hal
Инструмент c2hal выполняет большую часть работы по преобразованию, сокращая количество необходимых ручных изменений. Например, для генерации файла HIDL .hal для 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
Эти команды добавляют файлы в hardware/interfaces/nfc/1.0/ . Запуск файла hardware/interfaces/update-makefiles.sh из каталога $ANDROID_BUILD_TOP также добавляет необходимый makefile в HAL. Отсюда вы можете внести изменения вручную для полной конвертации HAL.
c2hal activities
При запуске c2hal все содержимое заголовочного файла переносится в файлы .hal .
c2hal идентифицирует структуры, содержащие указатели на функции в предоставленном заголовочном файле, и преобразует каждую структуру в отдельный файл интерфейса. Например, alloc_device_t преобразуется в модуль HAL IAllocDevice (в файле IAllocDevice.hal ).
Все остальные типы данных копируются в файл types.hal . Определения в виде скобок перемещаются в перечисления (enums), а элементы, не являющиеся частью HIDL или не подлежащие преобразованию (например, объявления статических функций), копируются в комментарии, помеченные текстом " NOTE ".
Ручные работы
Инструмент c2hal не знает, что делать при встрече с определенными конструкциями. Например, в HIDL отсутствует понятие «сырых» указателей; поэтому, когда c2hal встречает указатель в заголовочных файлах, он не знает, следует ли интерпретировать этот указатель как массив или как ссылку на другой объект. Пустые указатели также обладают аналогичной непрозрачностью.
Поля типа int reserved[7] необходимо удалить вручную во время перехода на HIDL. Такие элементы, как имя возвращаемого значения, следует обновить на что-то более осмысленное; например, преобразовать возвращаемый параметр таких методов, как write in NFC, из автоматически сгенерированного int32_t write_ret в Status status (где Status — это новое перечисление, содержащее возможные статусы NFC).
Внедрить HAL
После создания файлов .hal для представления вашего HAL необходимо сгенерировать файлы makefile (Make или Soong), которые обеспечивают поддержку языков C++ и Java (если только HAL не использует функцию, не поддерживаемую в Java). Скрипт ./hardware/interfaces/update-makefiles.sh может автоматически генерировать файлы makefile для HAL, расположенных в каталоге hardware/interfaces (для HAL, расположенных в других местах, просто обновите скрипт).
Когда файлы makefile будут обновлены, вы готовы сгенерировать заголовочные файлы и реализовать методы. Подробную информацию о реализации сгенерированного интерфейса см. в HIDL C++ (для реализаций на C++) или HIDL Java (для реализаций на Java).