Вы можете обновить существующие модули 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
также добавляет необходимый make-файл в HAL. Отсюда вы можете внести изменения вручную, чтобы полностью преобразовать HAL.
деятельность c2hal
Когда вы запускаете c2hal
, все, что находится в заголовочном файле, переносится в файлы .hal
.
c2hal
идентифицирует структуры, содержащие указатели функций, в предоставленном заголовочном файле и преобразует каждую структуру в отдельный файл интерфейса. Например, alloc_device_t
преобразуется в модуль IAllocDevice
HAL (в файле IAllocDevice.hal
).
Все остальные типы данных копируются в файл types.hal
. Определения фунта перемещаются в перечисления, а элементы, не являющиеся частью HIDL или не конвертируемые (например, объявления статических функций), копируются в комментарии, помеченные текстом « NOTE
».
Ручные действия
Инструмент c2hal
не знает, что делать, когда сталкивается с определенными конструкциями. Например, в HIDL нет концепции необработанных указателей; из-за этого, когда c2hal
встречает указатель в файлах заголовков, он не знает, следует ли интерпретировать указатель как массив или как ссылку на другой объект. Пустые указатели также непрозрачны.
Поле типа int reserved[7]
необходимо удалить вручную при переходе на HIDL. Такие элементы, как имя возвращаемого значения, следует обновить до чего-то более значимого; например, преобразование возвращаемого параметра таких методов, как write
в 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 в других местах просто обновите скрипт).
Когда файлы make-файлов обновлены, вы готовы создавать файлы заголовков и реализовывать методы. Подробные сведения о реализации сгенерированного интерфейса см. в разделе HIDL C++ (для реализаций C++) или HIDL Java (для реализаций Java).